PHP sytème de pagination.

Fermé
killermano66 Messages postés 233 Date d'inscription jeudi 17 janvier 2008 Statut Membre Dernière intervention 25 novembre 2010 - 24 mars 2010 à 16:55
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 24 mars 2010 à 18:48
Bonjour,

Je rencontre un petit soucis avec un système de pagination. Celui-ci est lié à l'emploie de la méthode $_GET pour générer mes pages. J'utilise ce système pour mon site avec des url du genre :

nom_du_site/index.php?page=blog

Mais je n'arrives pas à l'adapter à mon système de pagination justement pour la partie blog. Le script me permet de créer des pages avec x billets à l'intérieur et d'afficher autant de pages nécessaires. Le calcul des pages est ok et fonctionne en revanche les liens ne m'emmène pas ou je souhaiterais. Je me doutes aussi qu'il manque quelque chose dans ma requête d'affichage mais je bloque totalement.

Les liens créés par le script sont du genre :
nom_du_site/index.php?page=blog&id=2

Mais ne récupèrent aucunes données.

Je vous met ci dessous le code de ma page :
<?php
require("fichiers/connection.php");
//Affichage complet des news
if(isset($_GET['id'])){ //si la variable id existe
	$id=$_GET['id'];	
	// Affiche complet des articles	
	$requete_selection = mysql_query('SELECT * FROM blog WHERE id='.$_GET['id']) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
	$donnees = mysql_fetch_assoc($requete_selection);
	$requete_selection = mysql_query('SELECT * FROM blog') or die('Erreur SQL !<br />: '.mysql_error());	
	echo '<div class="title"><h1 class="title_art">'.htmlentities($donnees['titre']).'</h1></div>';
	echo '<div class="contenu_news">';
	echo $donnees['image'];
	echo '<p class="justify">'.htmlentities($donnees['intro']).'</p>';
	echo '<p class="justify">'.htmlentities($donnees['contenu']).'</p></div>';
	
}
// Affichage des liens vers les articles
else {
	//Pagination
	$nbMess = 2;
	$req = mysql_query('SELECT COUNT(*) AS nbMessage FROM blog');
	$donnees2 = mysql_fetch_assoc($req);
	$totalMess = $donnees2['nbMessage'];	
	$nbPages  = ceil($totalMess / $nbMess);
	
	//Requête affichage
	$requete_selection = mysql_query('SELECT * FROM blog') or die('Erreur SQL !<br />: '.mysql_error());
	while ($donnees = mysql_fetch_assoc($requete_selection)){
		echo '<div class="title"><h1 class="title_art">'.htmlentities($donnees['titre']).
		'</h1></div><div class="contenu_news">'.$donnees['image'].'<p class="justify">'.htmlentities($donnees['intro']).'</p>
		<div class="suite_com"><div class="suite"><img src="design/normal/accept.png" alt="Lire la suite" />
		<a href="index.php?page=blog&id='.$donnees["id"].'" class="general"> Lire la suite...</a>
		</div><p class="right"><img src="design/normal/com_litle.png" alt="Commentaires" /><a href="#" class="general"> Commenter</a> (15)</p></div></div>';
	}	
	
	//Affichage pagination
	echo 'Page : ';
	for ($i = 1 ; $i <= $nbPages ; $i++)
	{
		echo '<a href="index.php?page=blog&id=' . $i . '">' . $i . '</a> ';
	}	
}	
?>



J'espère que quelqu'un pourra m'aider et au passage si un ou une d'entre vous connaît un article expliquant VRAIMENT clairement la méthode $_GET avec des exemples concret etc ... je suis preneur car elle me bloque dans la plupart de mes scripts php.

Merci d'avance et bonne fin d'aprem ;)
A voir également:

1 réponse

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
24 mars 2010 à 18:48
Je n'ai pas testé, mais c'est une piste:
<?php
require("fichiers/connection.php");
//Affichage complet des news
if(isset($_GET['id'])){ //si la variable id existe
	$id=$_GET['id'];	
	// Affiche complet des articles	
	$requete_selection = mysql_query('SELECT * FROM blog WHERE id='.$_GET['id']) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
	$donnees = mysql_fetch_assoc($requete_selection);
	//la requette ci dessous ne sert a rien, puisque tu utilises le résultat de celle au dessus
	//$requete_selection = mysql_query('SELECT * FROM blog') or die('Erreur SQL !<br />: '.mysql_error());	
	echo '<div class="title"><h1 class="title_art">'.htmlentities($donnees['titre']).'</h1></div>';
	echo '<div class="contenu_news">';
	echo $donnees['image'];
	echo '<p class="justify">'.htmlentities($donnees['intro']).'</p>';
	echo '<p class="justify">'.htmlentities($donnees['contenu']).'</p></div>';
	
}
// Affichage des liens vers les articles
else {
	//Pagination
	$nbMess = 2;
	//recup du numero de la page appelée depuis le lien pagination, ou valeur par defaut=premiere page
	if(isset($_GET['num_page'])){ $num_page=$_GET['num_page'];} else {$num_page=1;}
	//calcul valeur  LIMIT 
	 
	$debut=($nbMess*$num_page) - $nbMess;
	
	$req = mysql_query('SELECT COUNT(*) AS nbMessage FROM blog');
	$donnees2 = mysql_fetch_assoc($req);
	$totalMess = $donnees2['nbMessage'];	
	$nbPages  = ceil($totalMess / $nbMess);
	
	//Requête affichage
	//si tu veux faire une pagination, il faut limiter le nombre d'article extraits de la BDD au nombre par page (c a d 2 dans ton cas)
	$requete_selection = mysql_query('SELECT * FROM blog LIMIT '.$debut.','.$nbMess.' ') or die('Erreur SQL !<br />: '.mysql_error());
	while ($donnees = mysql_fetch_assoc($requete_selection)){
		echo '<div class="title"><h1 class="title_art">'.htmlentities($donnees['titre']).
		'</h1></div><div class="contenu_news">'.$donnees['image'].'<p class="justify">'.htmlentities($donnees['intro']).'</p>
		<div class="suite_com"><div class="suite"><img src="design/normal/accept.png" alt="Lire la suite" />
		<a href="index.php?page=blog&id='.$donnees["id"].'" class="general"> Lire la suite...</a>
		</div><p class="right"><img src="design/normal/com_litle.png" alt="Commentaires" /><a href="#" class="general"> Commenter</a> (15)</p></div></div>';
	}	
	
	//Affichage pagination
	echo 'Page : ';
	for ($i = 1 ; $i <= $nbPages ; $i++)
	{
		echo '<a href="index.php?page=blog&num_page=' . $i . '">' . $i . '</a> ';
	}	
}	
?>


Ensuite pour ta question:

pour passer des valeurs d'une page à une autre deux méthodes
si la page 1 contient un formulaire il peut etre en methode get ou post
si post on recupére dans la page 2 par $_POST['nom_du_champ_formulaire']
si get "" "" $_GET['nom_du_champ_formulaire']

avec un lien page 1 on peut passer des valeurs en GET via l'URL

page2.php?var1=lundi&var2=fervrier

on récupère page2 par $_GET['var1'] et $_GET['var2']

vas voir le site:

www.siteduzero.com
0