Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
803 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu]Bouton <Précédent> <Suivant> Pagination

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu]Bouton <Précédent> <Suivant> Pagination

n°1909499
Profil sup​primé
Posté le 28-07-2009 à 17:39:11  answer
 

Bonjour,
J'ai réussi à faire mon script de pagination qui fonctionne bien. Le problème c'est que depuis hier j'aimerai arriver à faire un bouton suivant et précédent et n'afficher que les 5 ou 10 pages courantes afin de pas me retrouver avec 300pages à afficher.
 
Edit: J'sais pas si j'ai bien expliqué alors j'fais un ptit dessin  [:fande--] : <précédent>...5...6...7...8...<suivant>
 
Mon code:

<h3>Liste des utilisateur</h3>
<?php
include('../admin/modules/db.php');
 
$sql = "SELECT COUNT(id_util) AS nbutil FROM utilisateur";
$req = mysql_query($sql);
$data = mysql_fetch_assoc($req);
 
$nbutil = $data['nbutil'];
$parpage = 2;
$nbpage = ceil($nbutil/$parpage);
 
if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p'] <= $nbpage)
    {
    $cpage = $_GET['p'];
    }
else
    {
    $cpage = 1;
    }
         
$sql2 = mysql_query("SELECT nom_util,prenom_util,statut_util,mail
FROM utilisateur  
ORDER BY id_util  
ASC LIMIT ".(($cpage-1)*$parpage).",$parpage";);
?>
<table>
<tr>
    <th>Nom</th>
    <th>Prénom</th>
    <th>Statut</th>
    <th>E-mail</th>
</tr>
<?php
while ($data = mysql_fetch_array($sql2))
    {
?>
<tr>
    <td><?php echo $data['nom_util'];?></td>
    <td><?php echo $data['prenom_util'];?></td>
    <td><?php echo $data['statut_util'];?></td>
    <td><?php echo $data['mail'];?></td>
</tr>
<?php    
    }
?>
</table>
<?php
for ($i=1;$i<=$nbpage;$i++)
    {
    if($i == $cpage)
        {
        echo "$i |";
        }
    else
        {
        echo "<a href="admin.php?m=liste_util&p=$i">$i</a> |";
        }
    }
?>


 
 
Donc j'aimerai dans la mesure du possible un début de piste pour pouvoir me débloquer.
 
Merci  :)
 
Edit: J'ai regardé la page avec les scripts les plus demandés et j'ai bien regardé celui sur la pagination mais j'ai pas été inspiré  :(


Message édité par Profil supprimé le 31-07-2009 à 12:50:40
mood
Publicité
Posté le 28-07-2009 à 17:39:11  profilanswer
 

n°1909511
Pascal le ​nain
Posté le 28-07-2009 à 18:51:18  profilanswer
 

J'avais fait ca pour un site web. Tu peux t'en inspirer.
Ca affiche une barre du type :  
 

<<   <   ... 5 6 7 8 ... >    >>


 

<?
$Ncom = 1564; // Nombre de commentaires au total (modifiable)
$Nmax = 15; // Nombre de commentaires par page (modifiable)
$nbre_cle = 7; // Nombre de clés que l'on veut afficher (modifiable)
$pagin_pas = 5; // Taille du pas du défilement rapide (modifiable)
$pagin_pos = 1; // Position où l'on se trouve (modifiable)
 
$pagin_last = ((int)(($Ncom + $Nmax - 1) / $Nmax ));
 
if ($pagin_pos > 1) //Si l'on se trouve au début
{
  $debut = "<a href="page-1.htm">Début</a> ";
  $pp = "<a href="page-" . ($pagin_pos - 1) . ".htm">Précédent</a> ";
}
else
{
  $debut = "Début ";
  $pp = "Précédent ";
};
if ($pagin_pos > $pagin_pas) //Si l'on se trouve à plus de 5 pages
{
  $pp5 = "<a href="page-" . ($pagin_pos - $pagin_pas) . ".htm">Précédent5</a> ";
}
else
{
  $pp5 = "Précédent5 ";
};
if ($pagin_pos < $pagin_last) //Si l'on se trouve à la fin
{
  $fin = " <a href="page-$pagin_last.htm">Fin</a>";
  $ps = "<a href="page-" . ($pagin_pos + 1) . ".htm">Suivant</a> ";
}
else
{
  $fin = "Fin";
  $ps = " Suivant ";
};
if ($pagin_pos < ($pagin_last - $pagin_pas + 1)) //Si l'on se trouve à moins de 5 pages de la fin
{
  $ps5 = "<a href="page-" . ($pagin_pos + $pagin_pas) . ".htm">suivant5</a> ";
}
else
{
  $ps5 = " suivant5 ";
};
 
if (($pagin_pos > ((int)($nbre_cle / 2) + 1))) //Si besoin des "..." de droite
{
  $sepg = "...";
} else
{
  $sepg = "     ";
}
if (($pagin_pos < ($pagin_last - ((int)($nbre_cle / 2))))) //Si besoin des "..." de gauche
{
  $sepd = "...";
} else
{
  $sepd = "     ";
}
 
if ($pagin_pos > ((int)($nbre_cle / 2))) // Arret du défilement quand on arrive aux bornes
{
  if ($pagin_pos < ($pagin_last - ((int)($nbre_cle / 2))))
  {
   $i=($pagin_pos-((int)($nbre_cle / 2)));
  }  
  else
  {
    $i=$pagin_last - $nbre_cle + 1;
  }
}  
else
{
  $i=1;
}
$liste = "";
$j = $i + $nbre_cle;
 
while ($i < $j)
{
  if (($i <= $pagin_last) and ($i >= 1))
  {
    $cle = " <a href="page-$i.htm">$i</a>";
    if ($i == $pagin_pos)
      {
        $liste = $liste . "<u>$cle</u>";
      } else
      {
        $liste = $liste . $cle . " ";
      }
  }
  ++$i;
}
 
 
echo "<div style="float:left;">" . $debut . $pp5 . $pp . $sepg .$liste. $sepd . $ps . $ps5 . $fin . "</div>";
 
echo "<div style="float:right;">Page : " .$pagin_pos. " / " .$pagin_last. "</div>";
?>


Message édité par Pascal le nain le 28-07-2009 à 20:22:34
n°1909514
Profil sup​primé
Posté le 28-07-2009 à 19:03:58  answer
 

Houlala le gros bout de code  [:petrus75]  
 
J'vais regarder ça et j'irais surement reposter pour d'éventuelles questions sur des trucs que je pige pas. Merci quand même :D

n°1909527
Pascal le ​nain
Posté le 28-07-2009 à 20:21:40  profilanswer
 

Je te l'ai simplifié un peu en virant les variables inutiles et en rassemblant toutes les variables au début.

n°1909540
stealth35
Posté le 28-07-2009 à 21:31:14  profilanswer
 

tu peux caluler le nombre total d'entrer avec SQL_CALC_FOUND_ROWS

 

$result = $dbh->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM `reponses` ORDER BY `id` ASC LIMIT 0, 10" );
$result->execute();
 
$count_result = $dbh->prepare("SELECT FOUND_ROWS() as FOUND_ROWS" );
$count_result->execute();
 
$count  = $count_result->fetch(PDO::FETCH_OBJ)->FOUND_ROWS;
$row  = $result->fetchAll(PDO::FETCH_OBJ);


Message édité par stealth35 le 28-07-2009 à 21:31:51
n°1909558
stealth35
Posté le 28-07-2009 à 23:13:14  profilanswer
 


<?php

 

$Nmax  = 15;
$nbre_cle  = 7;
$page  = (int) @$_GET['page'] ? (int) @$_GET['page'] : 1;
$pagin_pas  = ($page - 1) * $Nmax;
$page_max= null;

 

// PARTIE 1

 

try {
     $dbh = new PDO('mysql:unix_socket=/usr/local/zend/mysql/tmp/mysql.sock;dbname=test', 'login', 'pass');
 } catch (PDOException $error) {
     print $error->getMessage();
     die();
 }
 
 $result = $dbh->prepare("SELECT SQL_CALC_FOUND_ROWS * FROM `data` LIMIT :s, :e" );
 $result->bindParam(':s', $pagin_pas, PDO::PARAM_INT);
 $result->bindParam(':e', $Nmax, PDO::PARAM_INT);
 $result->execute();
 
 $count_result = $dbh->prepare("SELECT FOUND_ROWS() as FOUND_ROWS" );
 $count_result->execute();
 
 $count  = $count_result->fetch(PDO::FETCH_OBJ)->FOUND_ROWS;
 $row  = $result->fetchAll(PDO::FETCH_OBJ);
 
 
// PARTIE 2

 


 $dom = new DOMDocument();
 
 $div = $dom->createElement('div');
 $div = $dom->appendChild($div);
 
 $head = sprintf('Resultat %d à %d sur %d :', $pagin_pas + 1, $pagin_pas + count($row), $count);
 
 $text = $dom->createTextNode($head);
 $text = $div->appendChild($text);

 

$table = $dom->createElement('table');
 $table = $dom->appendChild($table);
 
 foreach($row as $data){
  $tr = $dom->createElement('tr');
  $tr = $table->appendChild($tr);
 
  foreach($data as $value){
   $td = $dom->createElement('td');
   $td = $tr->appendChild($td);
   
   $text = $dom->createTextNode($value);
   $text = $td->appendChild($text);
  }  
 }

 


// PARTIE 3

 


 $foot  = array();
 $page_max  = ceil($count / $Nmax) + 1;
 
 if(($page + $nbre_cle) < $page_max){
  $start  = $page;
  $end  = $page + $nbre_cle;
 }else{
  $start = $page_max - $nbre_cle;
  $end = $page_max;
 }

 

if($page > 1){
  $link = (object) array('text' => '<<', 'num' => '1');
  array_push($foot, $link);
 
  $link = (object) array('text' => '<', 'num' => ($page - 1));
  array_push($foot, $link);
 }
 
 for($i = $start; $i < $end; $i++){
  $link = (object) array('text' => $i, 'num' => $i);  
  array_push($foot, $link);
 }
 
 if($page < $page_max - 1){
  $link = (object) array('text' => '>', 'num' => ($page + 1));
  array_push($foot, $link);
 
  $link = (object) array('text' => '>>', 'num' => $page_max);
  array_push($foot, $link);
 }
 
 $div = $dom->createElement('div');
 $div = $dom->appendChild($div);
 
 foreach($foot as $link){
  $a = $dom->createElement('a');
  $a->setAttribute('href', '?page=' . $link->num);
 
  if($link->num == $page)
  $a->setAttribute('class', 'onpage');
 
  $a = $div->appendChild($a);
 
  $text = $dom->createTextNode($link->text);
  $text = $a->appendChild($text);
 }
 
 echo $dom->saveHTML();
?>


Message édité par stealth35 le 28-07-2009 à 23:44:22
n°1909563
Profil sup​primé
Posté le 28-07-2009 à 23:31:57  answer
 

Houla, y a plein de truc que je connais pas encore là dedans  :whistle:  
 
Y a rien de plus simple pour faire ce que je veux ?  Ou alors c'est moi qui suis ptète un bon gros noob... ce qui n'est pas à exclure  [:sniperlk]

n°1909567
stealth35
Posté le 28-07-2009 à 23:41:30  profilanswer
 

c'est simple la, meme si ca en a par l'air,
 
le probleme est qu'il faut beaucoup de condition comme te le montre le code de Pascal.
 
a l'affiche c'est simple, mais deriere ca l'est moins et encore la ca va, y'a 3 grandes partie
 
1 : connexion + requete  
2 : affichage du tableau
3 : la pagination
 
apres moi j'utilise DomDocument   pour generer plus facilement du HTML, mais c'est pas obligé.

n°1909571
Profil sup​primé
Posté le 28-07-2009 à 23:58:32  answer
 

1)La connexion + requête ça je l'ai fais
2) affichage je l'ai fais aussi
3) ben à moitié fait en fait :D
 
J'avais vu des mecs qui faisait des fonctions mais j'ai encore du mal avec ça et j'sais pas trop comment les intégrer donc...
J'vais essayer de voir son code et de bidouiller un truc

n°1909574
stealth35
Posté le 29-07-2009 à 00:10:51  profilanswer
 

tien je t'ai fait le code en version un peu plus débutant,

 

<?php
 $Nmax   = 15;
 $nbre_cle  = 7;
 $page   = (int) @$_GET['page'] ? (int) @$_GET['page'] : 1;
 $pagin_pas  = ($page - 1) * $Nmax;
 $page_max = null;

 


// PARTIE 1

 


 $dbh = mysql_connect('localhost', 'root', '');
 mysql_select_db('baseflashfoad', $dbh);
 
 $sql  = sprintf("SELECT SQL_CALC_FOUND_ROWS * FROM `t_stages` LIMIT %d, %d", $pagin_pas, $Nmax);
 $result = mysql_query($sql);
 
 $count_result = mysql_query("SELECT FOUND_ROWS() as FOUND_ROWS" );
 $count_result = mysql_fetch_object($count_result);
 
 $count  = $count_result->FOUND_ROWS;
 $row = array();
 
 while($data = mysql_fetch_object($result))
 array_push($row, $data);

 


// PARTIE 2
 
 echo '<div>' . sprintf('Resultat %d à %d sur %d :', $pagin_pas + 1, $pagin_pas + count($row), $count) . '</div>';
 echo '<table>';
 
 foreach($row as $data){
  echo '<tr>';
 
  foreach($data as $value)
  echo "<td>$value</td";
 
  echo '</tr>';  
 }

 


// PARTIE 3

 


 $foot  = array();
 $page_max  = ceil($count / $Nmax) + 1;
 
 if(($page + $nbre_cle) < $page_max){
  $start  = $page;
  $end  = $page + $nbre_cle;
 }else{
  $start = $page_max - $nbre_cle;
  $end = $page_max;
 }

 

if($page > 1){
  $link = (object) array('text' => '<<', 'num' => '1');
  array_push($foot, $link);
 
  $link = (object) array('text' => '<', 'num' => ($page - 1));
  array_push($foot, $link);
 }
 
 for($i = $start; $i < $end; $i++){
  $link = (object) array('text' => $i, 'num' => $i);  
  array_push($foot, $link);
 }
 
 if($page < $page_max - 1){
  $link = (object) array('text' => '>', 'num' => ($page + 1));
  array_push($foot, $link);
 
  $link = (object) array('text' => '>>', 'num' => $page_max);
  array_push($foot, $link);
 }
 
 echo '</table>';
 echo '<div>';
 
 foreach($foot as $link)
 echo '<a href="?page=' . $link->num . '">' . $link->text . '</a>';
 
 echo '</div>';
?>


Message édité par stealth35 le 29-07-2009 à 00:22:05
mood
Publicité
Posté le 29-07-2009 à 00:10:51  profilanswer
 

n°1909578
Profil sup​primé
Posté le 29-07-2009 à 01:29:53  answer
 

Whoa c'est super sympa, merci beaucoup :)
 
J'vais étudier ça  :jap:
 

$page   = (int) @$_GET['page'] ? (int) @$_GET['page'] : 1;


A quoi ça sert de mettre des (int) devant les variables ? C'est une protection ? ça fait penser au C.  Le "?" je sais pas non plus à quoi il sert  :D  ni le ": 1" à la fin.
 
Sinon dans l'ensemble y a beaucoup de fonction que je connais pas et que je n'ai jamais utilisé  [:tinostar]  
 
array_push (ok j'ai pigé en regardant la doc php)
SELECT SQL_CALC_FOUND_ROWS (ça équivaut pas à un COUNT ça ?  [:tinostar] ²)
sprintf avec les %d (ça me rappel le C ça  :whistle: )

Message cité 1 fois
Message édité par Profil supprimé le 29-07-2009 à 12:11:13
n°1910209
Pascal le ​nain
Posté le 30-07-2009 à 11:03:41  profilanswer
 


 
Oui, ca marche aussi en C. C'est pour caster une variable. Ici on force une variable à être un int.

n°1910214
Aaron GOUZ​IT
Posté le 30-07-2009 à 11:32:28  profilanswer
 

Le (int) permet en effet de s'assurer qu'on a bien un entier.
Sinon, la structure condition ? if : else est une expression qui renvoie if si la condition est remplie, else sinon.
Pour être plus clair ici si $_GET['page'] peut être cast en entier, ça le renvoie, et sinon ça renvoie 1.

n°1910217
Profil sup​primé
Posté le 30-07-2009 à 11:54:42  answer
 

Ouais donc mettre 'in' c'est avant tout pour la sécurité non ?

n°1910221
Pascal le ​nain
Posté le 30-07-2009 à 12:01:36  profilanswer
 


 
Je crois comprendre que c'est au cas où l'utilisateur fait une connerie.
 
s'il demande la page liste.php?page=4 on lui donne la 4ème page.
 
par contre s'il demande la page liste.php?page=coucou, le script a des risques de planter lamentablement, car coucou n'est pas un entier.
C'est pour ça qu'on vérifie que page est bien un entier. Si ce n'est pas le cas, on le renvoie a la première page.
 
A confirmer...


Message édité par Pascal le nain le 30-07-2009 à 12:05:09
n°1910607
Profil sup​primé
Posté le 31-07-2009 à 13:08:58  answer
 

Re  :hello:  
 
Bon en fait j'ai trouvé un script de pagination sur internet que j'ai réussi à adapter grâce à la tonne de commentaires qui m'a fait apprendre pas mal de ptits trucs.
Au fait, pour le coup du int, avec ce que j'avais écris tout marche bien et même si on écrit coucou rien ne plante.
 

if(isset($_GET['p']) && $_GET['p']>0 && $_GET['p'] <= $nbpage)
    {
    $cpage = $_GET['p'];
    }
else
    {
    $cpage = 1;
    }


Merci de votre aide, j'aurai appris des trucs  :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu]Bouton <Précédent> <Suivant> Pagination

 

Sujets relatifs
Bouton Excel associé à une macro[VB]Changer position d'un bouton
[Java] interférences entre OpenDialog et impression de jFrame (résolu)[RESOLU] Problème de requête et mysql_num_rows
[Resolu][CSS] Div l'une à coté de l'autrerécuperer le parametre value d'un bouton dans la fonction execappli
[VBA Excel] garder la mise en forme dans une textbox [RESOLU][JPA/Hibernate] Mapper des Map
session perdue après un window.location [pas encore résolu :( ][RESOLU] [VBS] copier uniquement les lignes filtrées sous Excel
Plus de sujets relatifs à : [Résolu]Bouton <Précédent> <Suivant> Pagination


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR