Page 1 sur 1

mois dans l'array

Posté : 28 nov. 2011, 18:12
par JeanJack
Bonjour a tous
Je n'arrive pas a finir mon code php du moins ce qu'il faut mettre dans l'array il me semble je vous montre. Il se compose en 2 fichiers. Le but de ce code est que quand il y a un article a un mois donnée, il affiche un lien avec ce 'mois' écrit en francais et que lorsque on clique sur ce mois il nous affiche tous les articles du mois précédemment cliqué .
<nav>
			<h3>Articles par Mois</h3>
			<ul>
				<?php
					try
					{
						$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
						$bdd = new PDO('mysql:host=localhost;dbname=*************', 'root', '', $pdo_options);
						$bdd->query('SET lc_time_names="fr_FR"');
						$reponse = $bdd->query('SELECT DATE_FORMAT(date_creation, "%M") AS mois FROM article GROUP BY MONTH(date_creation)');
						while( $data = $reponse->fetch(PDO::FETCH_ASSOC) )
						{
							echo '<ul>';
							echo '<li><a href="post_mois.php?mois=' . $data['mois'] . '">
							' . $data['mois'] . ' 2012</a></li>';
							echo '</ul>';
						}
							$reponse->closeCursor();
					}
					catch(PDOException $e)
					{
						exit('Erreur : '.$e->getMessage());
					}
				?>
			</ul>
		</nav>
Ce premier code est normalement bon enfin on sais jamais
C'est plutot sur celui ci que je coince
<?php
				try
				{
				$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
				$bdd = new PDO('mysql:host=localhost;dbname=************************', 'root', '', $pdo_options);
				$bdd->query('SET lc_time_names="fr_FR"');
				$req = $bdd->prepare('SELECT titre, contenu, DATE_FORMAT(date_creation, "%d/%m/%Y") AS date_creation_fr, FROM article WHERE DATE_FORMAT(date_creation, "%M") = ? ORDER BY date_creation DESC LIMIT 0,5');
                                 ??????????????????????????????????????????????????????????????????????????????????
				$donnees = $req->fetch();
					{
					?>
					<h1><?php echo $_GET['mois'];'</h1>'
					?>
						<div class="post">
							<h3><?php echo htmlspecialchars($donnees['titre']); ?></h3>
							 Le <?php echo $donnees['date_creation_fr']; ?>
							<p>
								<?php
								echo nl2br(htmlspecialchars($donnees['contenu']));
								}
								?>
							</p>
						</div>
				<?php
					}
					catch(Exception $e)
					{
						exit('Erreur : '.$e->getMessage());
					}
				?>
Je ne sais pas quoi mettre a la place de tout les ?????
c'est peu etre une autre erreur je ne sais pas trop :?
Cordialement
JeanJack

Re: mois dans l'array

Posté : 28 nov. 2011, 20:48
par dix2
salut,

à la place des ??????????????, il faut mettre un truc du genre :
$req->execute(array("'January'"));

@+
dix2

Re: mois dans l'array

Posté : 28 nov. 2011, 21:28
par JeanJack
oui je pense mais il faut mettre une autre valeur que january car ca ne marchera pas avec un autre mois :?
justement je ne sais pas quoi y mettre car j'ai essayer plusieurs truc sans succes avec que des erreurs sql

Re: mois dans l'array

Posté : 28 nov. 2011, 21:47
par xTG
Tu as une virgule qui se balade avant le FROM.
Car l'erreur SQL ne peut provenir d'un paramètre, car les paramètres sont protégés dans les requêtes préparées.
L'erreur est donc la requête en elle même.

Re: mois dans l'array

Posté : 28 nov. 2011, 22:12
par JeanJack
effectivement j'ai plus d'erreur SQL mais au final que mettre dans l'array car quand je met $_GET['mois'] il m'affiche un article mais un seul uniquement alors que normalement il doit en afficher 2.
Quand j'essaye avec autre chose il ne m'affiche rien donc je pense que la solution est pas loin #-o

Re: mois dans l'array

Posté : 28 nov. 2011, 23:13
par dix2
En fait, il faut boucler sur tous les résultats de la requête avec un while
Ce qui donne :
<?PHP
try{
  $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
  $bdd = new PDO('mysql:host=localhost;dbname=************************', 'root', '', $pdo_options);
  $bdd->query('SET lc_time_names="fr_FR"');
              $req = $bdd->prepare('SELECT titre, contenu, DATE_FORMAT(date_creation, "%d/%m/%Y") AS date_creation_fr FROM article WHERE DATE_FORMAT(date_creation, "%M") = ? ORDER BY date_creation DESC LIMIT 0,5');
  $req->execute(array($_GET['mois']));
?>
<h1><?PHP echo($_GET['mois']) ?></h1>
<?PHP
  while($donnees = $req->fetch()){
?>
<div class="post">
  <h3>
<?PHP
    echo(htmlspecialchars($donnees['titre']));
?>
  </h3>
<?PHP
    echo('Le'.$donnees['date_creation_fr']);
?>
  <p>
<?PHP
    echo(nl2br(htmlspecialchars($donnees['contenu'])));
?>
  </p>
</div>
<?PHP
  }
}
catch(Exception $e){
  exit('Erreur : '.$e->getMessage());
}
?>

Re: mois dans l'array

Posté : 29 nov. 2011, 00:04
par JeanJack
Ca Marche ! Merci ca fait 4 jours que je bloquais ^^