[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
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
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:
- [PHP] Automatisation de passage de page
- Impossible de supprimer une page word - Guide
- Word numéro de page 1/2 - Guide
- Passage qwerty azerty - Guide
- Bordure de page word - Guide
- Faire de google ma page d'accueil - Guide
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
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>
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
14 mars 2013 à 17:41
t'aider oui mais il nous faudrait ton code ?
voici ma page (liste_membre.php)
Puis ma page (liste_membres_suite.php)
Merci de ton attention
<?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
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
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 !
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>
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:
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 ...
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
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
Merci, ça marche !
Mais j'ai changé ce bout de code pour que ce soit parfait.
Merci encore
Mais j'ai changé ce bout de code pour que ce soit parfait.
$debut = 10*($page-1); $fin = $nb_par_page;
Merci encore
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
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
Amicalement
@lain