[PHP] Automatisation de passage de page

Fermé
Papage - 14 mars 2013 à 13:36
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 - 18 mars 2013 à 13:40
Bonjour,

Je voudrais réaliser un code qui me parait simple mais je n'y arrive pas.
Je voudrais faire comme le pied de page du forum comme ceci
http://imageshack.us/photo/my-images/5/ccm1v.jpg/

C'est à dire: Select de champs d'une table de bdd, mettre en place des pages en fonction du nombre d'entrées.
Exemple: afficher sur une page (liste_membres.php) les 10 premiers membres puis sur la même page, charger les 10 suivants ...
J'ai essayé avec la méthode $_GET mais je m'emmêle les pinceaux, pouvez-vous m'aider ?

Merci d'avance
A voir également:

6 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
16 mars 2013 à 13:49
petite erreur j'ai rectifié pour le comptage du nbr enr

<style type="text/css">
.num_page_courante {
	font-size:14px;
	font-weight:bold;
	padding:10px;
}

.num_pages {
	font-size:12px;
	padding:10px;
}
</style>
<?php session_start();
if(isset($_GET["page"]) && $_GET["page"]!=""){
	//si reçu par url on le récupère
	$page = $_GET["page"];
}else{
	//sinon on initialise à 1
	$page=1;
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<?php
//parametres (modifiables)
$nb_par_page=10;

//il faut d'abbord calculer le nombre total de pages
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test','root','',$pdo_options);

////nombre total de pages
if(isset($_GET['nb_pages']) && $_GET['nb_pages']!=""){
	//si on l'a reçu par l'url on le récupère
	$total_pages = $_GET['nb_pages'];
}else{
	//sinon on fait une interro base pour le calculer
	$result_total=$bdd->query("SELECT * FROM membres");
	$nb_enregistrements=$result_total->rowCount();
	$total_pages= ceil($nb_enregistrements / $nb_par_page);
}
///// il faut faire une requette en jouant sur LIMIT pour afficher les enr voulus 0 à 9 puis 10 à 19 etc..
//calcul debut et fin de LIMIT
$debut=10*($page-1);
$fin=$debut+($nb_par_page-1); //-1 car les enr commencent à 0

$reponse = $bdd->query("SELECT * FROM membres ORDER BY id ASC LIMIT ".$debut.",".$fin."");

    while ($donnees = $reponse->fetch())
    {
        //affichage
    }
$reponse->closeCursor();
	//affichage des lien qui permettent de passer de page en page
	//par une boucle sur le total pages
	for($n=1;$n<=$total_pages;$n++){	
		//on va faire un affichage différent si page courante
		//et tu fais du CSS sur les class num_page_courante et num_pages
		if($n==$page){
			echo '<span class="num_page_courante">'.$n.'</span>';;
		}else{
			echo '<span  class="num_pages"><a href="liste_membres.php?page='.$n.'&nb_pages='.$total_pages.'">'.$n.'</a></span>';
		}
	}

	
	
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
?>
</html>
1
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
14 mars 2013 à 17:41
t'aider oui mais il nous faudrait ton code ?
0
voici ma page (liste_membre.php)

<?php session_start();
$page = $_GET["page"];
$finale = $_GET["finale"];
$requete = $_GET["requete"];
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<?php
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test','root','',$pdo_options);
$reponse = $bdd->query('SELECT * FROM membres ORDER BY id ASC LIMIT 0,10');

    while ($donnees = $reponse->fetch())
    {
        //affichage des 10 premiers membres selon un tableau défini par du css trop long à mettre ici
    }

echo '<a href="liste_membres_suite.php?page=1&finale=3&requete=1">1</a> | 
<a href="liste_membres_suite.php?page=2&finale=3&requete=2">2</a> | 
<a href="liste_membres_suite.php?fin=1">3</a>'; //pied de page qui mène sur la même page sans me mettre les 10 membres suivants
	
	$reponse->closeCursor();
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
?>
</html>


Puis ma page (liste_membres_suite.php)
<?php if (isset($_GET["fin"]))
{
echo "Fin de page";
exit();
}
else
{
$page = $_GET["page"];
$finale = $_GET["finale"];
$requete = $_GET["requete"];
$base = mysql_connect ('localhost','root',''); 
mysql_select_db ('test',$base);
$requete = 'SELECT * FROM membres ORDER BY id ASC LIMIT 10,10';
mysql_query ($requete) or die ('Erreur SQL !<br />'.mysql_error());

echo '<meta http-equiv="refresh" content="0.2; url=liste_membres.php?page='.$page.'&finale='.$finale.'&requete=1" />';
}
?>


Merci de ton attention
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
15 mars 2013 à 14:01
pourquoi fais tu deux fichiers, il faut faire retour au premier pour voir une autre page, un seul suffit
et il faut faire des calculs sur le nombre total de pages sinon si tu le met en dur dans ton code, si tu as plus de membres ça ne marchera plus
J'ai pas testé, il peut subsister des erreurs de frappe ou autre !

fichier liste_memebres.php
<?php session_start();
if(isset($_GET["page"]) && $_GET["page"]!=""){
	//si reçu par url on le récupère
	$page = $_GET["page"];
}else{
	//sinon on initialise à 1
	$page=1;
}

?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<?php
//parametres (modifiables)
$nb_par_page=10;

//il faut d'abbord calculer le nombre total de pages
try
{
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=test','root','',$pdo_options);

////nombre total de pages
if(isset($_GET['nb_pages']) && $_GET['nb_pages']!=""){
	//si on l'a reçu par l'url on le récupère
	$total_pages = $_GET['nb_pages'];
}else{
	//sinon on fait une interro base pour le calculer
	$result_total=$bdd->query("SELECT COUNT(*) FROM membres");
	$nb_enregistrements=$bdd->fetchColumn();
	$total_pages= ceil($nb_enregistrements / $nb_par_page);
}
///// il faut faire une requette en jouant sur LIMIT pour afficher les enr voulus 0 à 9 puis 10 à 19 etc..
//calcul debut et fin de LIMIT
$debut=10*($page-1);
$fin=$debut+($nb_par_page-1); //-1 car les enr commencent à 0

$reponse = $bdd->query("SELECT * FROM membres ORDER BY id ASC LIMIT ".$debut.",".$fin."");

    while ($donnees = $reponse->fetch())
    {
        //affichage  $nb_par_page membres page par page
    }
$reponse->closeCursor();
	//affichage des lien qui permettent de passer de page en page
	//par une boucle sur le total pages
	for($n=1;$n<=$total_pages;$n++){	
		//on va faire un affichage différent si page courante
		//et tu fais du CSS sur les class num_page_courante et num_pages
		if($n==$page){
			echo '<a class="num_page_courante" href="liste_membres.php?page='.$n.'&nb_pages='.$total_pages.'">'.$n.'</a> ';
		}else{
			echo '<a  class="num_pages href="liste_membres.php?page='.$n.'&nb_pages='.$total_pages.'">'.$n.'</a> ';
		}
	}

	
	
}
catch(Exception $e)
{
    die('Erreur : '.$e->getMessage());
}
?>
</html>
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Merci de ton attention et de m'avoir appris une fonction (ceil) !

Dans cette partie là de ton code, ça ne fonctionne pas:
}else{
	//sinon on fait une interro base pour le calculer
	$result_total=$bdd->query("SELECT COUNT(*) FROM membres");
	$nb_enregistrements=$bdd->fetchColumn();
	$total_pages= ceil($nb_enregistrements / $nb_par_page);
}


J'ai essayé (vite fait) de remplacer par mysql_num_rows (sans passer par PDO) pour compter le nombre d'entrées mais ça ne fonctionne pas ...

$result_total = mysql_num_rows("SELECT COUNT(*) FROM membres");
	$nb_enregistrements = mysql_fetch_assoc($result_total);
$total_pages= ceil($nb_enregistrements / $nb_par_page);


J'essaierais quand j'aurais plus de temps un autre moyen à moins que tu ne passes par là et que tu m'apportes ton aide si précieuse.

Merci encore
0
Merci, ça marche !

Mais j'ai changé ce bout de code pour que ce soit parfait.

$debut = 10*($page-1);
$fin = $nb_par_page;


Merci encore
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 mars 2013 à 13:40
ha oui pardon une petite erreur d'inattention, c'est bien que tu ai rectifié cela prouve que tu as compris le code.

Amicalement
@lain
0