affichage page par page - PHP - Programmation
Marsh Posté le 26-05-2004 à 15:29:14
j'ai déjà vu ce code
quand tu dis je n'y arrive pas ... c'est quoi le problème exactement?
... au fait tu bosses avec le register_globals à off ? comment tu reccuperes $limite en naviguant de page en page ? tout le code n'y est pas ...
Marsh Posté le 26-05-2004 à 14:57:38
Bonjour,
Je suis novice en php et j'ai un souci pour faire de l'affichage page par page.
Le probleme est le suivant :
J'ai deux tables, une table de produits et une de famille de produits les deux reliees entre elle par un code, donc chaque produit appartient a une famille.
En fait quand je cree une requete directement sur la table produit et que je demande de m'afficher les resultats sur plusieurs page -> pas de souci.
Mais quand je cree un menu famille de produit pour n'arriver que sur les produits de la famille, là je ny' arrive plus et c tres embetant.
Je vous donne le code de ce que j'arrive a faire :
Donc partie affichage c'est :
<html>
<body>
<?
//=========================================
// includes du fichier fonctions
//=========================================
require 'fonctions.php';
//=========================================
// information pour la connection à le DB
//=========================================
$host = 'localhost';
$user = 'root';
$pass = '';
$db = 'atelier';
//=========================================
// 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;
$numpage = ($limite/$nombre) + 1;
echo "vous êtes sur la page $numpage" ;
// on cherche le nom de la page.
$path_parts = pathinfo($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'enregistrement dans la table.
//=========================================
$select = 'SELECT count(reference) FROM cordageproduit';
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$data = mysql_fetch_row($result);
$total = $data[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 reference, nom, description, prix, code, image, vignette FROM cordageproduit ORDER BY nom ASC limit '.$limite.','.$nombre;
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
//=====================================`?D??A ?<ht====
// si on a récupéré un resultat on l'affiche.
//=========================================
if($total) {
// debut du tableau
echo '<table bgcolor="#FFFFFF" width="100%">'."\n";
// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr>';
echo '<td bgcolor="#669999"><b><u>REFERENCE</u></b></td>';
echo '<td bgcolor="#669999"><b><u>NOM</u></b></td>';
echo '<td bgcolor="#669999"><b><u>DESCRIPTION</u></b></td>';
echo '<td bgcolor="#669999"><b><u>PRIX</u></b></td>';
echo '<td bgcolor="#669999"><b><u>IMAGE</u></b></td>';
echo '</tr>'."\n";
// lecture et affichage des résultats sur 2 colonnes
while($data = mysql_fetch_array($result))
{
// on affiche les informations de l'enregistrements en cours
echo "<tr>";
echo "<td width=\"20%\">".stripslashes($data["reference"])."</td>";
echo "<td width=\"20%\">".stripslashes($data['nom'])."</td>";
echo "<td width=\"20%\"><div align=\"justify\"><font color=\"#ff0000\" size=\"1\">".stripslashes($data['description'])."</font></div></td>";
echo "<td width=\"20%\">".stripslashes($data['prix']). ."</td>";
$toto="vignette/".stripslashes($data['vignette']);
//echo $toto;
echo "<td width=\"20%\">
<a href=\"image/g_".$data["reference"].".jpg\" target=\"_blank\"><img src=\"vignette/v_".$data["reference"].".jpg\"/></a></td>";
echo "</tr>";
}}
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>
Et l'include (fonctions.php), c'est :
<?php
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";
}
?>
<?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="image" src="images/precedent.gif">'."\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="image" src="images/suivant.gif">'."\n";
echo '<input type="hidden" value="'.$limiteSuivante.'" name="limite">'."\n";
echo '</form>'."\n";
echo '</td>'."\n";
}
echo '</tr></table>'."\n";
}
?>
<?php
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;
}
?>
Merci d'avance en esperant avoir été clair