begin process at 2012 02 09 10:18:57
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Base de données

 > RÉDUIRE LE NOMBRE D'AFFICHAGE À UN CERTAIN NOMBRE DE PAGES... PHP4

RÉDUIRE LE NOMBRE D'AFFICHAGE À UN CERTAIN NOMBRE DE PAGES... PHP4


 Information sur la source

Note :
7 / 10 - par 1 personne
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Base de données Niveau :Initié Date de création :07/02/2003 Date de mise à jour :07/02/2003 08:38:02 Vu :2 675

Auteur : Legion

Ecrire un message privé
Site perso
Commentaire sur cette source (1)
Ajouter un commentaire et/ou une note

 Description

Lorsqu'on effectue une requête sur une table, il arrive souvent qu'on se retrouve avec une quantité importante de résultats à afficher. Voici un moyen de les afficher page par page. A noter l'utilisation de fonctions sympa comme round().
Ne cherchez pas à recopier, comprenez...

Source

  • <?
  • /*************************************************************************
  • * @Auteur: Legion
  • * @Script: Afficher le résultat d'une requête sur plusieures pages.
  • * @Version: 1.0
  • * @Description: Il est souvent difficile que de gérer le résultat d'une
  • * requête plus ou moins complexe sur une même page. Ce script montre
  • * comment ce problème peut être contourné.
  • * @Date: Jeudi 6 Février
  • **************************************************************************/
  • //Connection à la base.
  • include("connect.inc");
  • $base = mysql_select_db("ma_base");
  • // Récupérer la variable $debut de page en page (PHP version 4)
  • $debut = $HTTP_GET_VARS["debut"];
  • if(!$debut) {
  • $debut = "0";
  • }
  • // Requête native - Notons également que le paramètre '4' de la clause LIMIT servira à dénombrer le nombre
  • // d'éléments par page.
  • $sql = "SELECT * FROM ma_table a, ma_table2 b, ma_table3 c WHERE a.champ1 = b.champ1 AND a.champ2 = b.champ2 ORDER BY 'champ1' ASC LIMIT $debut,4";
  • $requete = mysql_query($sql) or die(mysql_error());
  • // Comptage du nombre de ligne concernées par la requête
  • $nb_resultats = mysql_num_rows($requete);
  • // Boucle d'affichage
  • while($row = mysql_fetch_object($requete)) {
  • $prixFrancs = round($row -> champ1 * '6,55957');
  • echo '<tr><td width="150" border="1" bordercolor="#ffffff"><p><b><font color="#FF5B00">';
  • echo $row -> champ2;
  • echo '</font></b></p></td><td width="200" border="1" bordercolor="#ffffff"><p align="center">';
  • echo $row -> champ3;
  • echo ' jours</font></b></p></td><td width="100" border="1" bordercolor="#ffffff"><p align="center">';
  • echo '<a href="fiche_tech.php?id=';
  • echo $row -> num_champ;
  • echo '" target="iarticles">Voir</a>';
  • echo '</td></tr><tr><td width="150" border="1" bordercolor="#ffffff"><img src="img/vignettes/';
  • echo $row -> champ4;
  • echo '.gif"></td><td width="200" border="1" bordercolor="#ffffff"><p align="center">Notre prix:';
  • echo $row -> champ5;
  • echo ' ? / ';
  • echo $prixFrancs;
  • echo ' Frcs.</p></td></tr>';
  • echo '<tr><td align="center" colspan="3" width="450" border="1" bordercolor="#ffffff">';
  • echo '<hr width="400" size="1" NOSHADE color="#B9B9B9"></td></tr>';
  • }
  • // Comptons le nombre total de lignes.
  • $sql_total = "SELECT * FROM tab_ecran";
  • $requete_total = mysql_query($sql_total);
  • $total_resultats = mysql_num_rows($requete_total);
  • // Bouton Précédent
  • if($debut != "0" AND ($nb_resultats < "5" OR ($debut+4) == $total_resultats)) {
  • echo '<tr><td width="450" colspan="3" border="0"><table width="450" border="0" cellpadding="0" cellspacing="0">';
  • echo '<tr><td width="225" align="left">';
  • $debut = $debut - 4;
  • echo '<a href="ecrans.php?debut='.$debut.'">[ << Précédents ]</a>';
  • echo '</td><td width="225" align="right"></td></tr></table></td></tr>';
  • // Bouton Suivant et Précédent
  • } elseif($nb_resultats == "5" AND $debut != "0") {
  • echo '<tr><td width="450" colspan="3" border="0"><table width="450" border="0" cellpadding="0" cellspacing="0">';
  • echo '<tr><td width="225" align="left">';
  • $debut = $debut - 4;
  • echo '<a href="ecrans.php?debut='.$debut.'">[ << Précedents ]</a>';
  • echo '</td><td width="225" align="right">';
  • $debut = $debut + 4;
  • echo '<a href="ecrans.php?debut='.$debut.'">[ Suivants >> ]</a>';
  • echo '</td></tr></table></td></tr>';
  • // Bouton Suivant
  • } elseif($total_resultats != $nb_resultats AND ($debut == "0" OR ($debut + 4) != $total_resultats)) {
  • $debut = $debut + 4;
  • echo '<tr><td width="450" colspan="3" border="0"><table width="450" border="0" cellpadding="0" cellspacing="0">';
  • echo '<tr><td width="225" align="left"></td><td width="225" align="right">';
  • echo '<a href="ecrans.php?debut='.$debut.'">[ Suivants >>]</a>';
  • echo '</td></tr></table></td></tr>';
  • }
  • ?>
<?
      /*************************************************************************
      *  @Auteur: Legion
      *  @Script: Afficher le résultat d'une requête sur plusieures pages.
      *  @Version: 1.0
      *  @Description: Il est souvent difficile que de gérer le résultat d'une
      *  requête plus ou moins complexe sur une même page. Ce script montre
      *  comment ce problème peut être contourné.
      *  @Date: Jeudi 6 Février
      **************************************************************************/
      
      //Connection à la base.
      include("connect.inc");
      $base = mysql_select_db("ma_base");
      
      // Récupérer la variable $debut de page en page (PHP version 4)
      $debut = $HTTP_GET_VARS["debut"];
      if(!$debut) {
      	$debut = "0";
      }
      
      // Requête native - Notons également que le paramètre '4' de la clause LIMIT servira à dénombrer le nombre 
      // d'éléments par page.
      $sql = "SELECT * FROM ma_table a, ma_table2 b, ma_table3 c WHERE a.champ1 = b.champ1 AND a.champ2 = b.champ2 ORDER BY 'champ1' ASC LIMIT $debut,4";
      $requete = mysql_query($sql) or die(mysql_error());
      
      // Comptage du nombre de ligne concernées par la requête
      $nb_resultats = mysql_num_rows($requete);
      
      // Boucle d'affichage
      while($row = mysql_fetch_object($requete)) {
      		$prixFrancs = round($row -> champ1 * '6,55957');
      	        echo '<tr><td width="150" border="1" bordercolor="#ffffff"><p><b><font color="#FF5B00">';
      	        echo $row -> champ2;
      	        echo '</font></b></p></td><td width="200" border="1" bordercolor="#ffffff"><p align="center">';
      	        echo $row -> champ3;
      	        echo ' jours</font></b></p></td><td width="100" border="1" bordercolor="#ffffff"><p align="center">';
      	        echo '<a href="fiche_tech.php?id=';
      	        echo $row -> num_champ;
      	        echo '" target="iarticles">Voir</a>';
      	        echo '</td></tr><tr><td width="150" border="1" bordercolor="#ffffff"><img src="img/vignettes/';
      		echo $row -> champ4;
      		echo '.gif"></td><td width="200" border="1" bordercolor="#ffffff"><p align="center">Notre prix:';
      		echo $row -> champ5;
      		echo ' ? / ';
      		echo $prixFrancs;
      		echo ' Frcs.</p></td></tr>';
      		echo '<tr><td align="center" colspan="3" width="450" border="1" bordercolor="#ffffff">';
      		echo '<hr width="400" size="1" NOSHADE color="#B9B9B9"></td></tr>';
      }
      
      // Comptons le nombre total de lignes.
      $sql_total = "SELECT * FROM tab_ecran";
      $requete_total = mysql_query($sql_total);
      $total_resultats = mysql_num_rows($requete_total);
      
      // Bouton Précédent
      if($debut != "0" AND ($nb_resultats < "5" OR ($debut+4) == $total_resultats)) {
      	echo '<tr><td width="450" colspan="3" border="0"><table width="450" border="0" cellpadding="0" cellspacing="0">';
      	echo '<tr><td width="225" align="left">';
      	$debut = $debut - 4;
      	echo '<a href="ecrans.php?debut='.$debut.'">[ << Précédents ]</a>';
      	echo '</td><td width="225" align="right"></td></tr></table></td></tr>';
      // Bouton Suivant et Précédent
      } elseif($nb_resultats == "5" AND $debut != "0") {
      	echo '<tr><td width="450" colspan="3" border="0"><table width="450" border="0" cellpadding="0" cellspacing="0">';
        echo '<tr><td width="225" align="left">';
      	$debut = $debut - 4;
      	echo '<a href="ecrans.php?debut='.$debut.'">[ << Précedents ]</a>';
      	echo '</td><td width="225" align="right">';
      	$debut = $debut + 4;
      	echo '<a href="ecrans.php?debut='.$debut.'">[ Suivants >> ]</a>';
      	echo '</td></tr></table></td></tr>';
      // Bouton Suivant
      } elseif($total_resultats != $nb_resultats AND ($debut == "0" OR ($debut + 4) != $total_resultats)) {
      	$debut = $debut + 4;
      	echo '<tr><td width="450" colspan="3" border="0"><table width="450" border="0" cellpadding="0" cellspacing="0">';
        echo '<tr><td width="225" align="left"></td><td width="225" align="right">';
      	echo '<a href="ecrans.php?debut='.$debut.'">[ Suivants >>]</a>';
      	echo '</td></tr></table></td></tr>';
      }
  ?>

 Conclusion

P.S: Le code est assez massif, je me suis contenté de copier-coller un script que j'ai développé pour une appli. Tout ne concerne pas le multi-paging mais bon...


 Sources du même auteur

VARIABLES DE SESSION PHP4 - IDENTIFICATION
LIRE ET AFFCIHER LE CONTENU D'UN FICHIER TEXTE + FORMATAGE

 Sources de la même categorie

Source avec Zip RECHERCHE DES DOUBLONS DANS UNE TABLE MYSQL EN SÉLECTIONNANT... par aladec2007
[CRON] INSERT ON DUPLICATE KEY UPDATE par pierreSabatier
Source avec Zip CLASS MYSQL 5/PHP5 AVEC GESTION DES EXCEPTION ET DES REQUÊTE... par devil_may_cry
Source avec Zip Source avec une capture MOTEUR DE RECHERCHE SUR BASE MYSQL FULLTEXT ET BOOLEAN AVEC ... par cod57
SYSTÈME DE PAGINATION AVEC BDD ET IMAGES (FICHIERS) par begueradj

Commentaires et avis

Commentaire de Neo020585 le 23/03/2007 17:23:44

Bonjour Legion^^

J'ai fait un petit site web (PHP5), et je voulais afficher des images à la suite l'une de l'autre, mais pas afficher toutes celles de ma base de données (je stocke les liens).
J'ai donc décidé de chercher comment faire et miraculeusement, je suis tombé sur ton code.

Il m'a beaucoup servit, et je l'ai même un peu amélioré :
$debut = $HTTP_GET_VARS["debut"];
     remplacé par -> $debut = $_GET["debut"]; (parce que ta version ne fonctionnait pas - ou plus)

et j'ai amélioré la gestion des boutons :

echo "<tr><td colspan=\"2\">";
  /* bouton précédent */
  if($debut >= $nb)
  {
    $tmp = $debut - $nb;
    echo "<a href=\"photos.php?debut=".$tmp."\">[ << Précédentes ]</a>";
  }

  /* bouton suivant */
  if(($debut + $nb) < $nb_resultats_total)
  {
    $tmp = $debut + $nb;
    echo "<a href=\"photos.php?debut=".$tmp."\">[ Suivantes >>]</a>";
  }
echo "</td></tr>";

Le code se trouve simplifié, et je trouvais tes tests compliqués (ce que j'ai mis fonctionne impec). J'en ai profité pour que le nombre d'objets affiché soit un paramètre ($nb).

Voilà, je sais que ça fait un bail que tu as posté ce code, mais bon, il n'est jamais trop tard pour dire merci, donc merci

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

 
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

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,279 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales