Page 1 sur 1

Tableau : page suivante

Posté : 28 sept. 2010, 14:23
par cmoi
Bonjour,

de façon inattendue, le code ci-dessous ne fonctionne plus comme avant. Il affiche 4 articles sur 2 colonnes (ça c'est bon) et propose une page suivante à partir du 5e article. Sauf qu'en cliquant sur "page suivante", on retrouve les 4 mêmes articles.
Où est le bug et pourquoi, mystère ?

Merci à ceux qui voudront bien mettre le nez dans le code !
            <?php
//=========================================
// includes du fichier fonctions
//=========================================
require 'fonctions.php';

$nombre = 4;  // on va afficher 4 résultats par page.
if (!isset($limite)) $limite = 0; // si on arrive sur la page pour la première fois 
               // on met limite à 0.
    
$path_parts = pathinfo($_SERVER['PHP_SELF']);
$page = $path_parts['basename'];

// requête SQL qui compte le nombre total d'enregistrements dans la table et qui
//récupère tous les enregistrements
$select = 'SELECT count(id) FROM ballerines';
$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 * FROM ballerines WHERE validation=1 ORDER BY id DESC limit '.$limite.','.$nombre;
$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );
$nbCols = 2; // nombre de colonnes du tableau  
$cpt = 0;
$rs = mysql_query($select); 
$limitesuivante = $limite + $nombre;
$limiteprecedente = $limite - $nombre;
// si on a récupéré un résultat on l'affiche.
    // début du tableau
    echo '<table>';
        echo '<tr>';
        echo '</tr>';
    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
    while ($row=mysql_fetch_assoc($rs)) { // parcours des résultats  

    // début d'une ligne  
    if ($cpt%$nbCols==0)
        echo '<tr>';
// Je prépare ma cellule 
$cellule = '<td align="center" valign="top"><span class="style1">'; 
$cellule .= '<strong>'.$row['nom'].' </strong>'; 
$cellule .= '<br/><br/>'; 
$cellule .= $row['presentation']; 
if (!empty($row['logo'])) { // le logo s'il existe 
   $cellule .= ' <img src="http://'.$row['logo'].'" height="30"/>'; 
   $cellule .= '<br/>'; 
} 
$cellule .= '<br/>'; 
$cellule .= '<a href="http://'.$row['photo'].'" target="_blank"><img src="http://'.$row['photo'].'" width="220" border="0"/></a>'; 
$cellule .= '<br/>'; 
$cellule .= $row['suite']; 
$cellule .= '<br/>'; 
$cellule .= $row['prix']; 
$cellule .= '<br/>'; 
$cellule .= $row['paypal'];  
$cellule .= '</span></td>'; 

// et je l'affiche 
echo $cellule;
        if ($cpt%$nbCols==($nbCols-1))
        echo '</tr>';
        $cpt++; // on incrémente le compteur pour savoir où on en est 
}  

// Au cas où ... 
if ($cpt!=0 && $cpt%$nbCols!=0) { // S'il n'y a pas eu assez de cellules dans la boucle pour finir la ligne ... 
    echo '<td colspan="'.($nbCols - ($cpt%$nbCols) ).'">&nbsp;</td>'; // ... on complète avec une cellule vide de la bonne taille... 
    echo '</tr>'; // ... et on ferme la ligne 
} 
    echo '</table>';
    // fin du tableau.

// on libère le résultat
mysql_free_result($result);
//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;
}

if($limite != 0) {
    echo '<a href="'.$page.'?limite='.$limiteprecedente.'">Page précédente</a>';
}
if($limitesuivante < $total) {
    echo '<a href="'.$page.'?limite='.$limitesuivante.'"> | Page Suivante</a>';
}

?>

Re: Tableau : page suivante

Posté : 28 sept. 2010, 14:45
par Nours312
tests avec
$limite =  (!isset($_GET['limite'])) ? 0 : $_GET['limite']; // si on arrive sur la page pour la première fois
en tout début de ton script à la place de ce qu'il y a ...

+

Re: Tableau : page suivante

Posté : 28 sept. 2010, 19:50
par cmoi
ça marche : super ! merci

Mais alors ... pourquoi ça marchait avant et plus maintenant ??

Re: Tableau : page suivante

Posté : 28 sept. 2010, 20:35
par Nours312
Mais alors ... pourquoi ça marchait avant et plus maintenant ??
par ce que le paramétrage de php.ini n'était pas bon !... :D