Pagination

Eléphanteau du PHP | 13 Messages

30 nov. 2011, 00:23

Bonjour a tous
J'ai ajouté un système de pagination a une page php, cette page fonctionne correctement sauf que il ne m'affiche pas les pages ce qui est assez contraignant surtout si l'utilisateur doit ajouter &page=2 a chaque fois ^^
<?php
					try
					{ 
						$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
						$bdd = new PDO('mysql:host=localhost;dbname=cyclisme_vienne', 'root', '', $pdo_options);
						$nombreDeMessagesParPage = 5;
						$ret = $bdd->query('SELECT COUNT(*) AS nb FROM article WHERE DATE_FORMAT(date_creation, "%M")');

						$databis = $ret->fetch();
						$totalDesMessages = $databis['nb'];
						$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
						echo 'Page : ';
						{
							for ($i = 1 ; $i <= $nombreDePages ; $i++)
							{
								echo '<a href="post_mois.php?mois=' . $_GET['mois'] . '&page=' . $i . '">' . $i . '</a> ';
							}
						}
					}
					catch(Exception $e)
					{
						die('Erreur : '.$e->getMessage());
					}
				?>
				</p>
				<?php
				if (isset($_GET['page']))
				{
					$page = intval($_GET['page']);
				}
				else
				{
					$page = 1;
				}
				$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
				$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 LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage);
				$req->execute(array($_GET['mois']));
				if (empty($_GET['mois']))
					echo 'Veuillez selectionner un mois';
					?>
					<h1><?php echo $_GET['mois'];?></h1>
						<?php while($donnees = $req->fetch())
						{ 
						?>
						<div class="post">
							<h3><?php echo htmlspecialchars($donnees['titre']); ?></h3>
							 Le <?php echo $donnees['date_creation_fr']; ?>
							<p>
								<?php
								echo nl2br(htmlspecialchars($donnees['contenu']));
								}
								$req->closeCursor();
								?>

ViPHP
xTG
ViPHP | 7331 Messages

30 nov. 2011, 01:05

Il manque la fin de ta requête :
SELECT COUNT(*) AS nb FROM article WHERE DATE_FORMAT(date_creation, "%M")
Ton date_format() tu le compares à quoi ? Car si ton but est de récupérer tous les enregistrements enlèves la clause where.
Bizarre que cette requête ne te retourne pas une erreur selon moi.

Eléphanteau du PHP | 13 Messages

30 nov. 2011, 14:23

je veux récuperer tout les enregistrement pour un mois qui est donné dans l'url $_GET['mois']
c'est en mettant justement = \'mois\' que ca bloque

ViPHP
xTG
ViPHP | 7331 Messages

30 nov. 2011, 14:27

Utilises plutôt une requête préparée dans ce cas :
$ret = $bdd->prepare('SELECT COUNT(*) AS nb FROM article WHERE DATE_FORMAT(date_creation, "%M") = ?');
$ret->execute(array($_GET['mois']));
http://fr.php.net/manual/fr/pdo.prepared-statements.php

Eléphanteau du PHP | 13 Messages

30 nov. 2011, 14:45

ca ne change rien j'ai toujours aucun message d'erreur mais pas le lien des pages qui s'affiche, c'est ptet la ligne for pourtant elle me semble correct :|
<?php
					try
					{ 
						$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
						$bdd = new PDO('mysql:host=localhost;dbname=cyclisme_vienne', 'root', '', $pdo_options);
						$nombreDeMessagesParPage = 5;
						$ret = $bdd->prepare('SELECT COUNT(*) AS nb FROM article WHERE DATE_FORMAT(date_creation, "%M") = ?');
						$ret->execute(array($_GET['mois']));
						$databis = $ret->fetch();
						$totalDesMessages = $databis['nb'];
						$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
						echo 'Page : ';
						{
							for ($i = 1 ; $i <= $nombreDePages ; $i++)
							{
								echo '<a href="post_mois.php?mois=' . $_GET['mois'] . '&page=' . $i . '">' . $i . '</a> ';
							}
						}
					}
					catch(Exception $e)
					{
						die('Erreur : '.$e->getMessage());
					}
				?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

30 nov. 2011, 15:14

salut,

- stop aux requête préparée pour quedal ! la protection d'une valeur c'est avec [url=http://www.php.net/manual/fr/pdo.quote.php]la méthode quote[/pdo]
- tu ne gère pas l'utilisation de la pagination, du moins dans ton dernier message ^^
dans le 1er message, qu'est ce qui ne va pas exactement ?
qu'entend tu par il n'affiche pas les pages, c'est la barre de navigation qui ne s'affiche pas ?
c'est la requête SQL qui ne va pas ?

y a quoi dans $databis . (un var_dump pour bien voir).

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 13 Messages

30 nov. 2011, 15:40

faut que je vois pour utiliser PDO quote
le dernier message que j'ai fait était juste pour montrer si je n'avais pas fait une erreur bete que je n'avais pas vu, il y a bien tout le code de mon premier message
quand je parle qu'il n'affiche pas les pages je parle de la navigation en effet ( ce qui permet d'afficher les chiffres pour cliquer dessus et envoyer page=2 dans l'url )
si j'enleve le WHERE DATE_FORMAT(date_creation, "%M") = ? tout va bien sauf que j'ai tout les messages de tout les mois alors que la je veux qu'il fasse en fonction du $_GET['mois'] envoyé dans l'url
si c'était la requete sql qui n'allais pas j'aurai une erreur je pense non ? alors que la j'ai rien juste un blanc apres le Page :
pour le $databis je ne sais pas trop ce qu'il y a dedans, j'ai surtout bien pompé sur le tuto de creer un livre d'or sur le site du zero