Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

LA PAGINATION (AFFICHAGE PAR PAGE)


Information sur la source

Catégorie :Tutoriaux Niveau : Débutant Date de création : 29/05/2002 Date de mise à jour : 06/12/2003 11:52:55 Vu : 14 176

Note :
7,5 / 10 - par 2 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

Petit cours simple sur la pagination
 

Source

  • Article pour AZ-PHP.COM
  • A travers les exercices précédent, vous avez appris à créer par exemple un livre d'or ou un annuaire pour les exos les plus marquants. Une question qui n'a pas été abordé est celle du nombre de réponse. Imaginer que dans votre livre d'or par exemple, vous ayez une cinquantaine de message. Afficher 50 messages sur une page va sûrement vous faire une page trop longue en contenue et à charger. Il vous faut donc répartir vos 50 messages sur plusieurs pages. Pour cela nous allons donc utiliser l'affichage par pages qu'on peut également appeler une barre d'affichage.
  • Nous allons donc utiliser le cours n°18 ( construction d'un livre d'or ) pour maîtriser l'affichage par pages.
  • Il nous suffit donc de modifier ( seulement ! ) la page accueil.php ; Le texte qui est en gras est celui qui a été rajouter/modifier au fichier accueil.php
  • <?
  • //----------------------------------------------------------------
  • //
  • // Page d'affichage des messages
  • //
  • //----------------------------------------------------------------
  • $mysql_host = 'localhost'; // entrer vôtre hote ici
  • $mysql_user = 'votre login'; // entrer vôtre login
  • $mysql_password = 'password'; // entrer vôtre password
  • $mysql_base = 'le nom de vôtre base de donnée'; // entrer le nom de votre base
  • //----------------------------------------------------------------
  • // Déclaration des variables
  • $nb_rep_pages=5; // Nombre de réponses par pages
  • //on se connecte à la base de donnée
  • $db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");
  • //selection de vôtre base de donnée
  • mysql_select_db($mysql_base,$db) or die ("erreur de connexion
  • base");
  • // Initialisation des variables
  • if(empty($page)) $page = 1;
  • if(empty($fin)){
  • $sql = "select count(*) as qte from livre_tbl";
  • $p = @mysql_query($sql,$db);
  • $fin = @mysql_result($p,"0","qte");
  • }
  • // Déclaration de la variable début
  • $debut = ($page - 1) * $nb_rep_pages;
  • //la requète de selection des messages
  • $req = mysql_query("SELECT date,pseudo,email,message from livre_tbl Order by date_verif Desc LIMIT $debut,$nb_rep_pages ") or die ("erreur requete");
  • // Ici on calcul le nombre de page
  • $nbpages = ceil($fin / $nb_rep_pages); // Ici on arrondi
  • // Affichage par page :)
  • for($i = 1;$i <= $nbpages;$i ++){
  • echo "<font size='1' face='verdana' color='#000000'><a href=\"?page=$i&fin=$fin\">Page $i</a></font>";
  • if($i < $nbpages) echo " - ";
  • }
  • //on ressort le contenu en boucle, et on stock dans un tableau avec mysql_fetch_array
  • while( $contenu = mysql_fetch_array ($req))
  • {
  • //on affiche le résultat
  • print 'Posté le : '.$contenu[date].'<br>';
  • print 'Auteur : <a href="mailto:'.$contenu[email].'">'.$contenu[pseudo].'</a><br>';
  • print 'Message : <br>'.$contenu[message].'<br>';
  • print '<hr>';
  • }
  • //on referme la connexion
  • mysql_close();
  • //----------------- FIN DU SCRIPT --------------------------------
  • ?>
  • Voila :) c'est finit ! Comme vous le voyez, c'est tous simple.. En cas de problème ya le forum ;-)
Article pour AZ-PHP.COM

A travers les exercices précédent, vous avez appris à créer par exemple un livre d'or ou un annuaire pour les exos les plus marquants. Une question qui n'a pas été abordé est celle du nombre de réponse. Imaginer que dans votre livre d'or par exemple, vous ayez une cinquantaine de message. Afficher 50 messages sur une page va sûrement vous faire une page trop longue en contenue et à charger. Il vous faut donc répartir vos 50 messages sur plusieurs pages. Pour cela nous allons donc utiliser l'affichage par pages qu'on peut également appeler une barre d'affichage.

Nous allons donc utiliser le cours n°18 ( construction d'un livre d'or ) pour maîtriser l'affichage par pages.

Il nous suffit donc de modifier ( seulement ! ) la page accueil.php ; Le texte qui est en gras est celui qui a été rajouter/modifier au fichier accueil.php

<?
//----------------------------------------------------------------
//
// Page d'affichage des messages
//
//----------------------------------------------------------------

$mysql_host = 'localhost'; // entrer vôtre hote ici
$mysql_user = 'votre login'; // entrer vôtre login
$mysql_password = 'password'; // entrer vôtre password
$mysql_base = 'le nom de vôtre base de donnée'; // entrer le nom de votre base

//----------------------------------------------------------------

// Déclaration des variables
$nb_rep_pages=5; // Nombre de réponses par pages

//on se connecte à la base de donnée
$db = mysql_connect($mysql_host,$mysql_user,$mysql_password) or die ("erreur de connexion");

//selection de vôtre base de donnée
mysql_select_db($mysql_base,$db) or die ("erreur de connexion
base");

// Initialisation des variables
if(empty($page)) $page = 1;
if(empty($fin)){
$sql = "select count(*) as qte from livre_tbl";
$p = @mysql_query($sql,$db);
$fin = @mysql_result($p,"0","qte");
}

// Déclaration de la variable début
$debut = ($page - 1) * $nb_rep_pages;

//la requète de selection des messages
$req = mysql_query("SELECT date,pseudo,email,message from livre_tbl Order by date_verif Desc LIMIT $debut,$nb_rep_pages ") or die ("erreur requete");

// Ici on calcul le nombre de page
$nbpages = ceil($fin / $nb_rep_pages); // Ici on arrondi

// Affichage par page :)
for($i = 1;$i <= $nbpages;$i ++){
echo "<font size='1' face='verdana' color='#000000'><a href=\"?page=$i&fin=$fin\">Page $i</a></font>";
if($i < $nbpages) echo " - ";
}

//on ressort le contenu en boucle, et on stock dans un tableau avec mysql_fetch_array
while( $contenu = mysql_fetch_array ($req))
{

//on affiche le résultat
print 'Posté le : '.$contenu[date].'<br>';
print 'Auteur : <a href="mailto:'.$contenu[email].'">'.$contenu[pseudo].'</a><br>';
print 'Message : <br>'.$contenu[message].'<br>';
print '<hr>';

}

//on referme la connexion
mysql_close();

//----------------- FIN DU SCRIPT --------------------------------

?>


Voila :) c'est finit ! Comme vous le voyez, c'est tous simple.. En cas de problème ya le forum ;-)

Conclusion

Bonne ProG !
 

Commentaires et avis

signaler à un administrateur
Commentaire de cress le 10/06/2004 19:28:08

bonjour, j'ai essayé d'intégrer ce code dans le mien. J'arrive bien à visualiser la première page avec le nb de champ souhaité et les liens vers le nombre de pages nécessaires se créent aussi. Cependant lorsque je sélectionne un lien mes résultats de recherhce sont nuls car mes critères dans ma Zséquence sql (dans le where) sont perdus. J'ai essayé de passer mes critères par url mais sans succés. Pouvez-vous m'aider?

merci











































































































signaler à un administrateur
Commentaire de Destrucwar le 26/06/2004 16:46:11

slt,
sur ce script est il possible d'ajouter un bout de code permettant d'aller a la page precedente ??
Merci

signaler à un administrateur
Commentaire de anouartepdr le 18/05/2005 21:33:56

  je vous conseil d' executer cet exercie dabord la base sur mysql puuis inmplementer ce sode php comme il est et tu vas bien comprendre
//////////////
CREATE TABLE vaches (
id int(11) NOT NULL auto_increment,
surnom varchar(50) NOT NULL default '',
prenom varchar(20) NOT NULL default '',
PRIMARY KEY  (id)
) TYPE=MyISAM;
        
INSERT INTO vaches VALUES (1, 'Qui aime les frites', 'Margueritte');
INSERT INTO vaches VALUES (2, 'Belle clochette', 'Roussette');
INSERT INTO vaches VALUES (3, 'La starlette', 'Blanchette');
INSERT INTO vaches VALUES (4, 'Petite Pataude', 'Noireaude');
INSERT INTO vaches VALUES (5, 'Toujours chouette', 'Paquerette');
INSERT INTO vaches VALUES (6, 'Tête de linotte', 'Cowpilot');
INSERT INTO vaches VALUES (7, 'Qui saute partout', 'Kancowroo');
INSERT INTO vaches VALUES (8, 'La gentille', 'Cowchenille');
INSERT INTO vaches VALUES (9, 'Le plus bizarre des cows', 'Haricow');

//////////////////////////////////////////////////
<html>
<body>

//=========================================
// includes du fichier fonctions
//=========================================
<?php
function displayNextPreviousButtons($limite,$total,$nb,$page) {
$limiteSuivante = $limite + $nb;
$limitePrecedente = $limite - $nb;
echo  '<table><tr>'."\n";
if($limite != 0) {
        echo  '<td valign="top">'."\n";
        echo  '<form action="'.$page.'" method="post">'."\n";
        echo  '<input type="submit" value="précédents">'."\n";
        echo  '<input type="hidden" value="'.$limitePrecedente.'" name="limite">'."\n";
        echo  '</form>'."\n";
        echo  '</td>'."\n";
}
if($limiteSuivante < $total) {
        echo  '<td valign="top">'."\n";
        echo  '<form action="'.$page.'" method="post">'."\n";
        echo  '<input type="submit" value="suivants">'."\n";
        echo  '<input type="hidden" value="'.$limiteSuivante.'" name="limite">'."\n";
        echo  '</form>'."\n";
        echo  '</td>'."\n";
            
}
echo  '</tr></table>'."\n";
}


function affichePages($nb,$page,$total) {
        $nbpages=ceil($total/$nb);
        $numeroPages = 1;
        $compteurPages = 1;
        $limite  = 0;
        echo '<table border = "0" ><tr>'."\n";
        while($numeroPages <= $nbpages) {
        echo '<td ><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></td>'."\n";
        $limite = $limite + $nb;
        $numeroPages = $numeroPages + 1;
        $compteurPages = $compteurPages + 1;
            if($compteurPages == 10) {
            $compteurPages = 1;
            echo '<br>'."\n";
            }
        }
        echo '</tr></table>'."\n";
}

//récupération de $limite
    if(isset($_GET['limite']))
        $limite=$_GET['limite'];    else   $limite=0;

function verifLimite($limite,$total,$nombre) {
    // je verifie si limite est un nombre.
    if(is_numeric($limite)) {
        
// si $limite est entre 0 et $total, $limite est ok
        // sinon $limite n'est pas valide.
        if(($limite >=0) && ($limite <= $total) && (($limite%$nombre)==0)) {
            // j'assigne 1 à $valide si $limite est entre 0 et $max
            $valide = 1;
        }    
        else {
            // sinon j'assigne 0 à $valide
            $valide = 0;
        }
    }
    else {
            // si $limite n'est pas numérique j'assigne 0 à $valide
            $valide = 0;
    }
// je renvois $valide
return $valide;
}



?><?php

//=========================================
// information pour la connection à le DB
//=========================================
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'test';

//=========================================
// initialisation des variables
//=========================================
// on va afficher 5 résultats par page.
$nombre = 5;  
// si limite n'existe pas on l'initialise à zéro
if (!$limite) $limite = 0;
// on cherche le nom de la page.    
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts["basename"];

//=========================================    
// connection à la DB
//=========================================
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

//=========================================    
// requête SQL qui compte le nombre total
// d'enregistrements dans la table.
//=========================================
$select = 'SELECT count(id) FROM vaches';
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$row = mysql_fetch_row($result);
$total = $row[0];
    
//=========================================
// vérifier la validité de notre variable
// $limite;
//=========================================
$verifLimite= verifLimite($limite,$total,$nombre);
// si la limite passée n'est pas valide on la remet à zéro
if(!$verifLimite)  {
    $limite = 0;
}
//=========================================
// requête SQL qui ne prend que le nombre
// d'enregistrement necessaire à l'affichage.
//=========================================
$select = 'select prenom,surnom FROM vaches ORDER BY prenom ASC limit '.$limite.','.$nombre;
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
    
//=========================================    
// si on a récupéré un resultat on l'affiche.
//=========================================
if($total) {
    // début du tableau
    echo '<table bgcolor="#FFFFFF">'."\n";
        // première ligne on affiche les titres prénom et surnom dans 2 colonnes
        echo '<tr>';
        echo '<td bgcolor="#669999"><b><u>Prénom</u></b></td>';
        echo '<td bgcolor="#669999"><b><u>Surnom</u></b></td>';
        echo '</tr>'."\n";
    // lecture et affichage des résultats sur 2 colonnes    
    while($row = mysql_fetch_array($result)) {
        echo '<tr>';
        echo '<td bgcolor="#CCCCCC">'.$row['prenom'].'</td>';
        echo '<td bgcolor="#CCCCCC">'.$row['surnom'].'</td>';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";
}
else echo 'Pas d\'enregistrements dans cette table...';
mysql_free_result($result);

//=========================================    
// si le nombre d'enregistrement à afficher
// est plus grand que $nombre
//=========================================
if($total > $nombre) {
    // affichage des liens vers les pages
    affichePages($nombre,$page,$total);
    // affichage des boutons
    displayNextPreviousButtons($limite,$total,$nombre,$page);
}
?>
</body>
</html>

signaler à un administrateur
Commentaire de trackercheese le 25/05/2005 14:58:23

Bonjour, je recherchais un script comme celui en haut de page mais avec en plus les fonctions Page suivantes, Page précédentes, je m'explique:

sur le resultat d'une requette on affiche
1 - PAUL
2 - PIERRE
3 - JACQUES
4 - ANDRE
5 - DEBILO
6 - ARTHUR
7 - COUET
......ETC
ET COMME AU TOTAL, LE RESULTAT CONTENAIT PLUS DE 3000 ENREGISTREMENTS, A RAISON DE 3 ENREGISTREMENTS AFFICHEE PAR PAGE, CA FAISAIT PLUS DE 1000 PAGES...

Et bein, tu va pas me croire... ON AVAIT + DE 1000 LIENS VERS LES PAGES. :-O

Donc du coup j'ai un peu modifier le truc et en bas de chaque page, on a maintenant:

1  2  3  4  5 >> si je clique sur le >>, on a :
<< 6  7  8  9  10  >>   etc etc

C'est un peu mieux non?
voila, je vous donne le truc...

// EN LOCAL, TU METS ICI LE NOM DE TA BASE,TES PARAMETRES ET TOUT KOI......
// ah oui, dans l'exemple, on a une table id composée d'un champ id auto incrementé et d'un champ nom

define ('DB_HOST','localhost');
define ('DB_USER','root');
define ('DB_BASE','NOM DE TA BASE');
define ('DB_PASSWORD','');

// ON SE CONNECTE A MYSQL
$track=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die('<font color="red">'.mysql_error());
// ON CHOISI LA BASE
mysql_select_db(DB_BASE,$track) or die('<font color="red">'.mysql_error());



//----------------------------------------------------------------
  
// Déclaration des variables
// ICI TU CHANGES LES VALEURS SI TU VEUX, LA PREMIERE VARIABLE N'A PAS CHANGE PAR RAPPORT AU 1ER SCRIPT, LA DEUXIEME C POUR PARAMETRER LE NOMBRE DE LIEN VERS LES PAGES QUE TU VEUX AFFICHER EN MEME TEMPS...BON FORCEMENT, SI TU METS 1000, CA SERT A RIEN QUE JE ME SOIS DECARCASSER!!!

$nb_rep_pages=1; // Nombre de réponses par pages
$nb_liens_pages=4; // Nombre de liens vers les pages en bas de page
  
// Initialisation des variables
if(empty($page)) $page = 1;
if(empty($fin)){
$sql = "SELECT COUNT(*) as qte FROM id";
$p = mysql_query($sql,$track);
$fin = mysql_result($p,"0","qte");
}

// Déclaration de la variable début
$debut = ($page - 1) * $nb_rep_pages;
  
//la requète de selection des messages
$req = mysql_query("SELECT id,nom from id Order by id Asc LIMIT $debut,$nb_rep_pages ") or die ("erreur requete");
  
// Ici on calcul le nombre de page
$nbpages = ceil($fin / $nb_rep_pages); // Ici on arrondi  

  
//on ressort le contenu en boucle, et on stock dans un tableau avec mysql_fetch_array
while( $contenu = mysql_fetch_array ($req)){  
//on affiche le résultat
print 'ID : '.$contenu[id].'<br>';
print 'NOM : '.$contenu[nom].'<br>';
print '<hr>';
print '<br>';
}

// Affichage par page :)
if(empty($pointeur)) $pointeur = 1;

if ($pointeur - $nb_liens_pages >= 1){ //Test s'il reste des pages a afficher avant, auquel cas on affiche le << pour 'precedent'
$c = $pointeur - $nb_liens_pages;
echo "<font size='1' face='verdana' color='#000000'><a href=\"?page=$c&fin=$fin&pointeur=$c\"> << </a></font>";
}

for($i = 1 ;$i <= $nb_liens_pages ;$i++){ //Boucle pour les 'nb_liens_pages' liens a afficher
$j=($pointeur+$i)-1;
if ($j <= $nbpages){
echo "<font size='1' face='verdana' color='#000000'><a href=\"?page=$j&fin=$fin&pointeur=$pointeur\">$j</a></font>";
echo " ";

}
}

if ($pointeur + $nb_liens_pages <= $nbpages){ //Test s'il reste des pages a afficher apres, auquel cas on affiche le >> pour 'suivantes'
$b = $pointeur + $nb_liens_pages;
echo "<font size='1' face='verdana' color='#000000'><a href=\"?page=$b&fin=$fin&pointeur=$b\"> >> </a></font>";
}

//on referme la connexion
mysql_close();
  
//----------------- FIN DU SCRIPT --------------------------------
  



Si ya des probs, sdewevre@tiscali.fr.
Passez voir mon site aussi ! : http://trackercheese.free.fr


signaler à un administrateur
Commentaire de milkasoprano le 15/11/2005 14:15:00

lol clair moi jai testé je suis pareil que CRESS ! ya un sacré bug et je voudrai ajouté un where sa merde

signaler à un administrateur
Commentaire de skyman272 le 27/01/2006 10:39:32

Bonjour, sur le premier script, lorsque je selectionne un lien vers les pages suivantes, ça ne marche pas...
Quelqu'un aurait il trouvé une solution depuis ?
Merci

Ajouter un commentaire



Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,250 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.