8795 sujets

Développement web côté serveur, CMS

Bonjour, je suis débutant en php, à l'aide de lecture et d'aide du forum, j'ai réussi a créer une base de donnée et à l'afficher sur mon site. Cependant je coince dès que le code deviens complexe.

Je vous présente mon code actuel


			<h2 class="ribbon"><span>Fruits de saison : Le calendrier du marché du mois</span></h2>
			<div id="entry_0" class="entry_prev odd">
			<img class="thumb" src="../images/ban-rge.png" />
			<h3 class="title rge">Printemps</h3></div>
			<div id="entry_1" class="entry_prev even">
			<img class="thumb" src="../images/ban-org.png" />
			<h3 class="title org">Eté</h3></div>
			<div id="entry_2" class="entry_prev odd">
			<img class="thumb" src="../images/ban-vrt.png" />
			<h3 class="title vrt">Automne</h3></div>
			<div id="entry_3" class="entry_prev even">
			<img class="thumb" src="../images/ban-blc.png" />
			<h3 class="title blc">Hiver</h3></div>
		
<?php 

// Déclaration des paramètres de connexion
$host = "";
$user = "";
$passwd  = "";

try
{
$bdd = new PDO("mysql:host=$host; dbname=bienmangrseason", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch (Exception $e)
{
  die('Erreur : ' . $e->getMessage());
}
$dt = new DateTime();

// 2. Modification de la requete
$query = "SELECT * FROM `liste-fruits` WHERE mois LIKE :mois";; 

// 3. Tu utilises le mois que tu as récupéré
$sth = $bdd->prepare($query);
$sth->execute(array('mois' => '%'  . $dt->format("m") . '%'));
?>
<section class="ff-container">
  <ul class="ff-items">
  <?php
  // Recuperation des resultats
  while($row = $sth->fetch(PDO::FETCH_ASSOC))
  {
  ?>
			<li>
			  <a href="produits-de-saison/fiche-fruit.php?id_fruits=<?php echo $row['id_fruits']; ?>">
				<span><?php echo $row['noms']; ?></span>
				<img alt="<?php echo $row['noms']; ?>" src="<?php echo $row['image']; ?>" />
			  </a>
			</li>
		   <?php
		   }
		   ?>
		   </ul>
		</section>


L'affichage des données se fait en fonction en du mois, je souhaiterai en plus que
cette partie permette de sélectionner dans ma base de donnée la saison qui est intitulé dans la bdd comme suit : "printemps", "ete", "automne" et "hiver".


			<div id="entry_0" class="entry_prev odd">
			<img class="thumb" src="../images/ban-rge.png" />
			<h3 class="title rge">Printemps</h3></div>
			<div id="entry_1" class="entry_prev even">
			<img class="thumb" src="../images/ban-org.png" />
			<h3 class="title org">Eté</h3></div>
			<div id="entry_2" class="entry_prev odd">
			<img class="thumb" src="../images/ban-vrt.png" />
			<h3 class="title vrt">Automne</h3></div>
			<div id="entry_3" class="entry_prev even">
			<img class="thumb" src="../images/ban-blc.png" />
			<h3 class="title blc">Hiver</h3></div>


Auriez-vous la possibilité de m'aider
Alors si j'ai bien compris ce que tu cherches à faire, je ferais au niveau de tes h3 des liens qui affichent la page en passant un paramètreen get de ce genre là :
<h3 class="title rge"><a href="?saison=printemps">Printemps</a></h3></div>


ensuite dans ton code page php tu récupère le paramètre en question (idéalement avec les fonctions filter de php, mais là comme il n'y a que 4 possibilités on peut vérifier par un simple tableau) :
$saisons = ['printemps','ete','automne','hiver'];
if (isset($_GET['saison']) && in_array($_GET['saison'],$saisons)) {
   $saison = $_GET['saison'];
} else {
   $saison = false;
}


puis au moment de faire ta requête :

if ($saison){
    $query = "SELECT * FROM `liste-fruits` WHERE saison = :saison";
    $sth = $bdd->prepare($query);
    $sth->execute(['saison' => $saison]);
} else {
    $query = "SELECT * FROM `liste-fruits` WHERE mois LIKE :mois";; 
    $sth = $bdd->prepare($query);
    $sth->execute(['mois' => '%'  . $dt->format("m") . '%']);
}
D'ailleurs à ce propos, je ne comprends pas bien ton LIKE dans la requête sur le mois. Si je ne me trompe pas datetime::format("m") te ressort juste le numéro du mois, donc un "=" et sans les "%" devrait faire l'affaire non ?


Bon, vu que j'ai tapé tout ça directement dans la réponse sans tester il y a peu de chance que ça fonctionne du premier coup (j'ai bien du faire une ou deux erreurs quelquepart Smiley lol ) mais j'espère que ça te donnera des idées.
Modifié par BlueScreenJunky (03 Mar 2013 - 13:55)
BlueScreenJunky a écrit :

Bon, vu que j'ai tapé tout ça directement dans la réponse sans tester il y a peu de chance que ça fonctionne du premier coup (j'ai bien du faire une ou deux erreurs quelquepart Smiley lol ) mais j'espère que ça te donnera des idées.



Un grand merci BlueScreenJunky pour cette réponse, je teste ça aujourd'hui, et je ferai mon retour sur le forum Smiley cligne

Excellente journée à toi.
BlueScreenJunky a écrit :

ensuite dans ton code page php tu récupère le paramètre en question (idéalement avec les fonctions filter de php, mais là comme il n'y a que 4 possibilités on peut vérifier par un simple tableau)



Alors après avoir testé ce premier jet, je confirme que ça ne fonctionne pas Smiley cligne ... pour le moment

voici la rédaction du code
je pense que j'ai du faire une erreur sur cette ligne "$saison = ['printemps','ete','automne','hiver'];"

car j'ai cette erreur qui apparaît : Parse error: syntax error, unexpected '['


<?php 

// Déclaration des paramètres de connexion
$host = "";
$user = "";
$passwd  = "";

try
{
$bdd = new PDO("mysql:host=$host; dbname=bienmangrseason", $user, $passwd, array (PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
}
catch (Exception $e)
{
  die('Erreur : ' . $e->getMessage());
}
$dt = new DateTime();
$saison = ['printemps','ete','automne','hiver'];
if (isset($_GET['saison']) && in_array($_GET['saison'],$saison)) {
   $saison = $_GET['saison'];
} else {
   $saison = false;
}

// 2. Modification de la requete
if ($saison){
    $query = "SELECT * FROM `liste-fruits` WHERE saison = :saison";
    $sth = $bdd->prepare($query);
    $sth->execute(['saison' => $saison]);
} else {
$query = "SELECT * FROM `liste-fruits` WHERE mois LIKE :mois";; 
}

// 3. Tu utilises le mois que tu as récupéré
$sth = $bdd->prepare($query);
$sth->execute(array('mois' => '%'  . $dt->format("m") . '%'));
?>

			<div id="entry_0" class="entry_prev odd">
			<img class="thumb" src="../images/ban-rge.png" />
			<h3 class="title rge"><a href="?saison=printemps">Printemps</a></h3></div>
			<div id="entry_1" class="entry_prev even">
			<img class="thumb" src="../images/ban-org.png" />
			<h3 class="title org"><a href="?saison=ete">Eté</a></h3></div>
			<div id="entry_2" class="entry_prev odd">
			<img class="thumb" src="../images/ban-vrt.png" />
			<h3 class="title vrt"><a href="?saison=automne">Automne</a></h3></div>
			<div id="entry_3" class="entry_prev even">
			<img class="thumb" src="../images/ban-blc.png" />
			<h3 class="title blc"><a href="?saison=hiver">Hiver</a></h3></div>
			
<section class="ff-container">
  <ul class="ff-items">
  <?php
  // Recuperation des resultats
  while($row = $sth->fetch(PDO::FETCH_ASSOC))
  {
  ?>
			<li>
			  <a href="produits-de-saison/fiche-fruit.php?id_fruits=<?php echo $row['id_fruits']; ?>">
				<span><?php echo $row['noms']; ?></span>
				<img alt="<?php echo $row['noms']; ?>" src="<?php echo $row['image']; ?>" />
			  </a>
			</li>
		   <?php
		   }
		   ?>
Hello, la syntaxe pour déclarer un tableau c'est ça :


$saison = array('printemps','ete','automne','hiver');

Zed13 a écrit :
Hello, la syntaxe pour déclarer un tableau c'est ça :


$saison = array('printemps','ete','automne','hiver');



Ca c'est la vieille syntaxe en php 5.3 Smiley lol
Mais en effet, soit il faut que tu passes en PHP 5.4, soit tu utilises la syntaxe que Zed13 propose Smiley smile
a écrit :
Ca c'est la vieille syntaxe en php 5.3 Smiley lol


Certes, mais vu qu'il n'y a pas compatibilité descendante 5.4 -> 5.3, vaut mieux utiliser la syntaxe qui plait à tout le monde Smiley langue !
BlueScreenJunky a écrit :


Ca c'est la vieille syntaxe en php 5.3 Smiley lol
Mais en effet, soit il faut que tu passes en PHP 5.4, soit tu utilises la syntaxe que Zed13 propose Smiley smile



Comme je le disais, je débute +++ en php, donc je vois pas la différence (désolé).

J'ai donc utilisé array comme proposé dans la réponse et sur d'autres sites d'infos.

Une nouvelle erreur apparaît:

   $sth->execute(['saison' => $saison]);


une idée ?
Même problème :
$sth->execute(array('saison' => $saison));


C'est juste que PHP 5.4 propose un raccourcis pour écrire les tableaux avec des crochets plutôt que array(), j'y ai rapidement pris goût mais ça pose problème sur les anciennes versions forcément ^^;
   $sth-&gt;execute(['saison' =&gt; $saison]);


J'ai essayé en enlevant les []
et cette erreur apparaît : Parse error: syntax error, unexpected T_DOUBLE_ARROW


les débuts (pour moi en php) et bah c'est pas simple
Modifié par dafid5 (04 Mar 2013 - 17:33)
BlueScreenJunky a écrit :
Même problème :
$sth-&gt;execute(array('saison' =&gt; $saison));




mon serveur me renvoi cette erreur à présent

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in /homez.666/nom/www/page.php on line 208


qui correspond à cette ligne

$sth->execute(array('mois' => '%'  . $dt->format("m") . '%'));


je n'arrive pas à mettre en pièce jointe l'imprime écran de ma base de donnée.
J'ai une colonne nommée "saison" avec plusieurs possibilités de variables : printemps, été, automne, hiver et j'ai également des colonnes nommées et remplies par leurs noms : printemps, été, automne, hiver. désolé ça aurait été plus clair avec l'image.
BlueScreenJunky a écrit :
Même problème :
$sth-&gt;execute(array('saison' =&gt; $saison));




Bonsoir, avez-vous une idée de mon nouveau problème ?
BlueScreenJunky a écrit :


upload/40410-imprim.jpg


J'ai enfin réussi a publier l'imprim écran de ma base de donnée. Auriez-vous une idée sur le problème que je rencontre ?
Salut,

quand tu as des erreurs aussi explicites que ça, lis les, ça te dit d'où vient le problème:
là, en l'occurrence, c'est à cause de ta requête préparée PDO (rien à voir avec ta DB).
Ton paramètre "mois" n'est pas reconnu dans ta requête préparée...
Cherche donc de ce côté.
Zed13 a écrit :
Salut,

quand tu as des erreurs aussi explicites que ça, lis les, ça te dit d'où vient le problème:
là, en l'occurrence, c'est à cause de ta requête préparée PDO (rien à voir avec ta DB).
Ton paramètre &quot;mois&quot; n'est pas reconnu dans ta requête préparée...
Cherche donc de ce côté.



Pardonne moi Zed13, mais pour moi le php ne coule pas de source, je suis moins que débutant, donc la lecture d'une requête ne me permet pas de trouver mon erreur.

Pour info, cette requête fonctionnait très bien avant que je ne veuille rajouter celle avec l'option des saisons.
Il n'y a pas eu de réponse à mon problème, je l'ai donc contourné.

Merci à ceux qui ont essayé de me donner un coup de pouce