affichage page par page

affichage page par page - PHP - Programmation

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  :)  
 
 

Reply

Marsh Posté le 26-05-2004 à 14:57:38   

Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed