Menu

Problème d'affichage page par page / Pagination

hankabyl 18 Messages postés mardi 10 septembre 2013Date d'inscription 29 avril 2018 Dernière intervention - 9 févr. 2018 à 14:34 - Dernière réponse : hankabyl 18 Messages postés mardi 10 septembre 2013Date d'inscription 29 avril 2018 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

8 réponses

yg_be 5615 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 25 mai 2018 Dernière intervention - 9 févr. 2018 à 20:40
0
Merci
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?
Commenter la réponse de yg_be
hankabyl 18 Messages postés mardi 10 septembre 2013Date d'inscription 29 avril 2018 Dernière intervention - Modifié par hankabyl le 10/02/2018 à 14:44
0
Merci
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
yg_be 5615 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 25 mai 2018 Dernière intervention - 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.
Commenter la réponse de hankabyl
hankabyl 18 Messages postés mardi 10 septembre 2013Date d'inscription 29 avril 2018 Dernière intervention - Modifié par baladur13 le 11/02/2018 à 22:03
0
Merci
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 .
yg_be 5615 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 25 mai 2018 Dernière intervention - 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";
}
Commenter la réponse de hankabyl
hankabyl 18 Messages postés mardi 10 septembre 2013Date d'inscription 29 avril 2018 Dernière intervention - Modifié par baladur13 le 11/02/2018 à 22:01
0
Merci
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.
yg_be 5615 Messages postés lundi 9 juin 2008Date d'inscriptionContributeurStatut 25 mai 2018 Dernière intervention - 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.
Commenter la réponse de hankabyl
hankabyl 18 Messages postés mardi 10 septembre 2013Date d'inscription 29 avril 2018 Dernière intervention - 11 févr. 2018 à 12:32
0
Merci
Bonjour monsieur,et je vous remercie pour votre aide .
Commenter la réponse de hankabyl