Réduire le nombre d'affichage à un certain nombre de pages... php4

5/5 (1 avis)

Snippet vu 5 032 fois - Téléchargée 30 fois

Contenu du snippet

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 / Exemple :


<?
      /*************************************************************************

  • @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...

A voir également

Ajouter un commentaire Commentaire
Neo020585 Messages postés 178 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 6 juillet 2009 4
23 mars 2007 à 17:23
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 "[ << Précédentes ]";
}

/* bouton suivant */
if(($debut + $nb) < $nb_resultats_total)
{
$tmp = $debut + $nb;
echo "[ Suivantes >>]";
}
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.