Problème d'affichage page par page / Pagination

Fermé
hankabyl Messages postés 20 Date d'inscription mardi 10 septembre 2013 Statut Membre Dernière intervention 24 octobre 2020 - Modifié le 9 févr. 2018 à 14:42
hankabyl Messages postés 20 Date d'inscription mardi 10 septembre 2013 Statut Membre Dernière intervention 24 octobre 2020 - 11 févr. 2018 à 12:32
Bonjour messieurs ,J'ai ajouter un système de pagination et ça marche très bien seulement il ne limite pas le nombre de page ,il affiche tous les numéros de page.Je vous prie messieurs, de m'aider à résoudre ce problème et je vous remercie d'avance .Voila la fonction qui affiche les numéro et ne limite pas le nombre de pages .

<?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";
}
?>


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.
A voir également:

5 réponses

yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
9 févr. 2018 à 20:40
bonsoir, tu veux dire que, malgré
while($numeroPages <= $nbpages)
, $numeroPages dépasse $nbpages?
si oui, es-tu certain de la valeur de $nbpages?
si non, peux-tu expliquer plus factuellement?
0
hankabyl Messages postés 20 Date d'inscription mardi 10 septembre 2013 Statut Membre Dernière intervention 24 octobre 2020
Modifié le 10 févr. 2018 à 14:44
Bonjour monsieur , je vous remercie beaucoup de m'avoir répondu .En bref et franchement , j' ai rien compris parce que je suis débutant et faible en php ( seulement si quelqu'un me montre quelque chose à supprimer, ajouter ou modifier ,dans ce cas je peux le faire .merci monsieur
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
10 févr. 2018 à 16:20
dans ce cas, il serait utile que tu expliques factuellement ce que tu obtiens et ce que tu souhaites obtenir.
0
hankabyl Messages postés 20 Date d'inscription mardi 10 septembre 2013 Statut Membre Dernière intervention 24 octobre 2020
Modifié le 11 févr. 2018 à 22:03
Bonjour monsieur ;je m'éxcuse de vous avoir dérangé . J'ai bien placé la pagination , ça fonctionne très bien ( j'ai bien limiter le nombre d'enregistrement par page et afficher les liens des pages .Le problème que tous les liens s'affiche sur la page , c'est à dire le nombre de pages n'est pas limité . Mio, je voudrais obtenir une pagination avec des points de suspension : par exemple << 1234.........25 25 27 28 >>
Voila le lien si vous voulez tester www.bravoforum.topsawa.com . et voila les page de ma pagination .
1) page index.php
<html>
<head>
<style type="text/css">

.menu{
 width: 20px;
 font-family: Arial, Helvetica, sans-serif;
 font-size: 12px;
 font-weight: bold;
 font-style: normal;
 text-decoration: none;
}

.menu ul{
 margin: 0;
 padding: 0;
 float: left;
 width: 20px;
 background: #000000;
 border-top-width: 1px;
 border-right-width: 1px;
 border-bottom-width: 1px;
 border-left-width: 1px;
 border-top-style: solid;
 border-right-style: solid;
 border-bottom-style: solid;
 border-left-style: solid;
 border-top-color: #0000FF;
 border-right-color: #0000FF;
 border-bottom-color: #0000FF;
 border-left-color: #0000FF
}

.menu ul li{
display: inline;
}

.menu ul li a{
 float: left;
 color: #FFFFFF;
 padding: 5px 6px;
 text-decoration: none;
 border-right-width: 1px;
 border-right-style: solid;
 border-right-color: #000000;
}

.menu ul li a:visited{
color: #FFFFFF;
}

.menu ul li a:hover, .menu ul li .selected{
 color: #000000 !important;
 padding-top: 5px;
 padding-bottom: 5px;
 background: #FFFF35;
}

</style>
</head>
<body>
<?php
 require 'header.html'; 
 require 'config.php';

// 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; 

// on cherche le nom de la page.    

$path_parts = pathinfo($_SERVER['PHP_SELF']);

$page = $path_parts["basename"];

$link = mysql_connect (localhost,user,pass) or die ('Erreur : '.mysql_error() );

mysql_select_db(base_donnees) or die ('Erreur :'.mysql_error());

// requête SQL qui compte le nombre total 

// d'enregistrements dans la table.


 $select = 'SELECT id, auteur, titre, date_derniere_reponse FROM forum_sujets';

$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;



require 'fonctions.php';


// 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; 

// on cherche le nom de la page.    

$path_parts = pathinfo($_SERVER['PHP_SELF']);

$page = $path_parts["basename"];


// connection à la DB

$link = mysql_connect (localhost,user,pass) or die ('Erreur : '.mysql_error() );

mysql_select_db(topsawa_forum) or die ('Erreur :'.mysql_error());


// requête SQL qui compte le nombre total 

// d'enregistrements dans la table.

$select = 'SELECT count(id) FROM forum_sujets';

$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 id,auteur, titre, date_derniere_reponse FROM forum_sujets ORDER BY date_derniere_reponse DESC limit '.$limite.','.$nombre;

$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );

?>

<br />
<a href="insert_sujet.php"><img src="images/Hb.png" alt="cliquer"/></a>

<?php

// 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 id, auteur, titre, date_derniere_reponse FROM forum_sujets ORDER BY date_derniere_reponse DESC limit '.$limite.','.$nombre;

$result = mysql_query($select,$link)  or die ('Erreur : '.mysql_error() );

// si on a récupéré un resultat on l'affiche.

if($total) {

    // début du tableau
echo '<p align="center">Page : ';
    echo '<table bgcolor="#660000 width="700" border="20">'."\n";
        // première ligne on affiche les titres prénom et surnom dans 2 colonnes
        
echo '<tr>';
        echo '<td bgcolor="#669999"><div style="text-align: center;"><b><big><big><u>auteur</u></big></big></b></td>';
echo '<td bgcolor="#669999"><div style="text-align: center;"><b><big><big><u>titre</u></big></big></b></td>';
echo '<td bgcolor="#669999"><div style="text-align: center;"><b><big><big><u>date_derniere_reponse</u></big></big></b></big></td>'; 
        echo '</tr>'."\n";

    // lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.    
    while($row = mysql_fetch_array($result)) {
        echo '<tr>';
        echo '<td bgcolor="#ffffff"><div style="text-align: center;"><big>'.$row['auteur'].'</big></td>';
        echo '<td bgcolor="#ffffff"><big><a href="./lire_sujet.php?id_sujet_a_lire=' , $row['id'] , '">' , htmlentities(trim($row['titre'])).'</a></td>';
        echo '<td bgcolor="#ffffff"><div style="text-align: center;"><big>'.$row['date_derniere_reponse'].'</big></td>';
        echo '</tr>'."\n";
    }
    echo '</table>'."\n";

}

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

}

// page precedante et page suinte
 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>';
 }
?>

</body>

</html>




Et voila ma page fonction.php
<?php

//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;

}


function affichePages($nb,$page,$total) {
        $nbpages=ceil($total/$nb);
        $numeroPages = 1;
        $compteurPages = 1;
        $limite  = 0;
        echo '<table border = "10" ><tr>'."\n";
        while($numeroPages <= $nbpages) {
        echo '<td ><div class="menu"> 
<ul> 
<li><center><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></center></li>
</ul>
</div></td>'."\n";
        $limite = $limite + $nb;
        $numeroPages = $numeroPages + 1;
        $compteurPages = $compteurPages + 1;
           if($compteurPages == 10) {
            $compteurPages = 1;
            echo '<br>'."\n";
            }
        }
        echo '</tr></table>'."\n";
}

// page precedante et page suinte
$limitesuivante = $limite + $nombre;
$limiteprecedente = $limite - $nombre;
?> 

et je vous remercie d'avance .
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
10 févr. 2018 à 20:47
donc tu voudrais avoir uniquement les 4 premiers et les 4 derniers liens?
pourquoi n'as-tu pas expliqué cela dès le départ?
as-tu essayé de programmer cela?
peut-être ainsi:
function affichePages($nb,$page,$total) {
        $nbpages=ceil($total/$nb);
        $numeroPages = 1;
        $limite  = 0;
        echo '<table border = "0" ><tr>'."\n";
        while($numeroPages <= $nbpages) {
            if ($numeroPages <=4 or $numeroPages >= $nbpages-4) {
                   echo '<td ><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></td>'."\n";
            }
           $limite = $limite + $nb;
           $numeroPages = $numeroPages + 1;
        }
        echo '</tr></table>'."\n";
}
0
hankabyl Messages postés 20 Date d'inscription mardi 10 septembre 2013 Statut Membre Dernière intervention 24 octobre 2020
Modifié le 11 févr. 2018 à 22:01
Merci beaucoup cher monsieur, j'ai essayé le bout de code que vous m'avez envoyé, c'est bien ça ce que je cherche, mais il n'y'a pas de points de suspension entre les quatre premiers numéro de page et le reste des pages; alors s'il n'a pas de points de suspension ,on peut pas trouver et cliquer sur les pages sautées.
1 2 3 4 17 18 19 20 21
si vous voulez tester en haut de la barre google www.bravoforum.topsawa.com
Et voila ma nouvelle page : fonction.php
<?php

//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;

}

 function affichePages($nb,$page,$total) {
        $nbpages=ceil($total/$nb);
        $numeroPages = 1;
        $limite  = 0;
        echo '<table border = "0" ><tr>'."\n";
        while($numeroPages <= $nbpages) {
            if ($numeroPages <=4 or $numeroPages >= $nbpages-4) {
                   echo '<td ><a href = "'.$page.'?limite='.$limite.'">'.$numeroPages.'</a></td>'."\n";
            }
           $limite = $limite + $nb;
           $numeroPages = $numeroPages + 1;
        }
        echo '</tr></table>'."\n";
}

// page precedante et page suinte
$limitesuivante = $limite + $nombre;
$limiteprecedente = $limite - $nombre;
?> 

et merci beaucoup.
0
yg_be Messages postés 22692 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 16 avril 2024 1 471
11 févr. 2018 à 11:00
ah bon, tu souhaites avoir des points de suspension sur lesquels on peut cliquer pour trouver les pages manquantes. pourquoi n'as-tu pas expliqué cela au départ?
par ailleurs, je te suggère de commencer par des exercices plus simples, qui vont te permettre de progresser, avant de faire des exercices plus compliqués.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
hankabyl Messages postés 20 Date d'inscription mardi 10 septembre 2013 Statut Membre Dernière intervention 24 octobre 2020
11 févr. 2018 à 12:32
Bonjour monsieur,et je vous remercie pour votre aide .
0