Fonction de pagination en php

Fermé
nannousss Messages postés 4 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 17 mars 2009 - 17 mars 2009 à 10:05
 CéKoiDonc - 21 mars 2009 à 08:31
Bonjour,
je suis débutant en php, j'utilise un script php pour afficher les pas de page. j'ai une requête de recherche pour afficher un tableau d'élément et j'ai fixé la condition 'limit' dans 'where' à 10 mais il ne s'affiche que les 10 premiers élément du tableau et lorsque je clique sur la 2ème page il ne s'affiche rien.
Aidez-moi svp.
Voila le script que j'utilise:

<?php


if(isset($_POST['MotCle']))
{
$Annee = $_REQUEST['ListeAnnee'];
$Mois = $_REQUEST['ListeMois'];
$MotCle = $_REQUEST['MotCle'];
$where = ' 1';
$where .= ($Annee!='')? " AND `annee`=".$Annee:'';
$where .= ($Mois!='')? " AND `mois`='".$Mois."'":'';
$where .= ($MotCle!='')? " AND `objet` LIKE '%".$MotCle."%'":' ';
//conexion avec la base de donnée//
$Connexion = mysql_connect('localhost','root','');
mysql_select_db('BD',$Connexion);

$xt=(isset($_GET['pas']))?$_GET['pas']:0;
$sql = 'SELECT * FROM `tablebod` WHERE'.$where.' limit '.$xt.',10';
$Resulta = mysql_query($sql);
$Nombre = mysql_num_rows($Resulta);
if($Nombre==0)
{
echo "<div align=center><b> Aucun résultat trouvé </b></div>";
}
else{
echo "<table border=1 cellspacing=0 class=style_tab2><tr class=entete_tab><td><b>N° Texte</b></td><td><b>Description</b></td><td><b>Date</b></td><td><b>N° Classement</b></td><td><b>PDF</b></td></tr> ";
while($data = mysql_fetch_array($Resulta))
{
//recherche du fichier PDF
$nom = explode('/',$data['numtext']);
$nomPDF = $nom[1].'_'.$nom[0];
$nomDossier = 'DGD_'.$data['annee'];
// on affiche les informations

echo "<tr style='cursor:pointer;' onmouseover='ListOver(this);' onmouseout='ListOut_1(this);'> <a href=fileadmin/download.php?Fichier_a_telecharger=".$nomPDF.".pdf&chemin=BOD/".$nomDossier."/ />";
echo '<td>'.$data['numtext'].'</td>';
echo '<td>'.$data['objet'].'</td>';
echo '<td>'.$data['datebod'].'</td>';
echo '<td>'.$data['annee'].'</td>';
echo '<td>'.$data['mois'].'</td>';
echo '<td>'.$data['numclassement'].'</td>';
echo '<td><a href=fileadmin/download.php?Fichier_a_telecharger='.$nomPDF.'.pdf&chemin=BOD/'.$nomDossier.'/ /><img src=uploads/acrobat.gif width=16 height=16 border=0 /></a></td></a></tr>';

}
echo "</table>";



function browse_results($Nombre, $pas, $page_actuel) {
$pas=1;
$nbrpages = ceil($Nombre/$pas);
$begin_suiv = $begin_actuel+$pas;
$begin_prec = $begin_actuel-$pas;
$begin_fin = ($pas*($nbrpages-1));
$page_actuel = ceil(($begin_actuel / $pas) + 1);
$liste_pages = '';
$page = $page_actuel+2;
if($page_actuel<=3)
$page_debut = 1;
else
$page_debut = $page_actuel-3;

if($page_actuel>=($nbrpages-3))
$page_fin = $nbrpages;
else
$page_fin = $page_actuel+3;
if(($page_debut>0)&&($page_fin<$nbrpages)||($page_fin==$nbrpages)){
while($page_debut<=$page_fin){
$begin_page = ($page_debut-1)*$pas;
$TheLink = $BasicLink."begin=".$begin_page;
if($page_debut==$page_actuel)
$liste_pages .= '   <b>['.$page_debut.']</b>   ';
elseif($page_debut<=$nbrpages)
$liste_pages .= "  <a href=\"index.php?id=".$_GET['id']."&pas=".($page_debut-1)."\">[".$page_debut."]</a>  ";
$page_debut++;
}
}
$begin = $begin_actuel;
return $liste_pages;
}
echo '<br /><br /><div align="center">'.browse_results($Nombre, $pas, $page_actuel).'</div>';

}}
else{
echo "";
A voir également:

1 réponse

NonMaisOh !!
17 mars 2009 à 10:53
Bonjour,

En supposant que votre algorithme est correctement construit, vous avez un vrai problème avec votre variable $pas qui est passé en argument de votre fonction browse_results.

crdlt.
0
nannousss Messages postés 4 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 17 mars 2009
17 mars 2009 à 12:19
Merci NonMaisOh, j'ai initialisé $pas à 1 pour éviter le message d'erreur (division par 0) mais peut-tu me dire quelle modification je peux le faire pour arriver à une solution... et merci d'avance.
0
CéKoiDonc ?? > nannousss Messages postés 4 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 17 mars 2009
17 mars 2009 à 12:48
Re,

Remarque 1 :

echo '<br /><br /><div align="center">'.browse_results($Nombre, $pas, $page_actuel).'</div>';

--> $pas ne semble jamais initialisé quand vous le passez en paramètre de la fonction browse_results.

$pas est donc toujours = 0 quand vous appelez votre fonction.

Remarque 2 :

function browse_results($Nombre, $pas, $page_actuel)
{
IF ($pas==0)
{
$pas=1;
}
}

--> Avec les corrections comme demandé pour la division par 0 mais ça ne résout pas le problème de $pas.

Je vais voir plus en détail votre code pour ma part.

A+.
0
nannousss Messages postés 4 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 17 mars 2009 > CéKoiDonc ??
17 mars 2009 à 13:16
merci CéKoiDonc,
j'ai besoin de votre aide parce que je suis bloqué à ce problème ...
0
CéKoiDonc ?? > nannousss Messages postés 4 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 17 mars 2009
17 mars 2009 à 14:29
Re,

J'ai essayé de me plonger dans ton code mais c'est assez laborieux.

Pour le moment, j'ai adapté tout ton code avec un exemple de squelette de pagination simple qui fonctionne chez moi.
Tu peux regarder ce code et voir si ça te convient - en attendant de bien cerner tes problèmes.

A+.

<?php 
 $limit=30; // Nbre max d'enregistrements à afficher par page

// 1er appel de cette page avec 'fonction' = '1ER_ACCES' en méthode $_GET
// Paginations suivantes avec 'fonction' = 'BROWSE' en méthode $_POST
 if ($_POST['fonction'] == 'BROWSE' or $_GET['fonction'] == '1ER_ACCES')
 {
// Si pagination
  if ($_POST['fonction'] == 'BROWSE')
  {
// récupération numéro de la page courante
   $page = $_GET['page'];
  }

// Récupération des champs stockés en $_REQUEST
  $Annee = $_REQUEST['ListeAnnee'];
  $Mois = $_REQUEST['ListeMois'];
  $MotCle = $_REQUEST['MotCle'];

// Mise en forme de la clause WHERE SQL
  $where = ' 1';
  $where .= ($Annee!='')? " AND `annee`=".$Annee:'';
  $where .= ($Mois!='')? " AND `mois`='".$Mois."'":'';
  $where .= ($MotCle!='')? " AND `objet` LIKE '%".$MotCle."%'":' ';
   
// Génération requête SQL entière
  $requete_tot = 'SELECT * FROM `tablebod` WHERE'.$where; 
   
// Compte le nombre total de champs à afficher pour toute la requête		
  $ret_total=mysql_query($requete_tot);
  $nb_total=mysql_num_rows($ret_total);  
   
// Détermination du 1er enregistrement à paginer
  $debut=$page*$limit; 
   
// construction de la requête pour la page en cours (avec restriction LIMIT)
  $limit_str = "LIMIT ". $page * $limit .",$limit"; 
  $requete_part_browse=$requete_tot." ".$limit_str; 

// Compte le nombre d'enregistrements - page en cours
  $result_pos = mysql_query($requete_part_browse);
  $nb_enr_page=mysql_num_rows($result_pos); 
   
// Exécution de la requête et stockage des enregistrements de la page en cours dans un tableau
  $k=0;
    
  while ($row = mysql_fetch_array ($result_pos) ) 
  { 
   $nom[$k] = explode('/',$data['numtext']);
   $nomPDF[$k] = $nom[1].'_'.$nom[0];
   $nomDossier[$k] = 'DGD_'.$data['annee']; 
   $numtext[$k] = $data['numtext'];
   $objet[k] = $data['objet'];
   $datebod[k] = $data['datebod'];
   $annee[k] = $data['annee'];
   $mois[k] = $data['mois'];
   $numclassement[k] = data['numclassement'];
   $k++;
  }
   
 // Si au moins un enregistrement à afficher
  if ($nb_total != 0)
  {  
 // Affichage des liens de pagination (ce sont des boutons SUBMIT et pas des liens URL - c'est plus joli)
   echo "<CENTER>";
   if ($page>0)
   { 
    $precedent=$page-1; 
       
    echo "<FORM NAME=FORM10 ACTION=Cette_Page.php?page=$precedent METHOD=POST>";
    echo "<input type=hidden name=fonction value='BROWSE'>";
    echo "<INPUT TYPE=SUBMIT VALUE='<< Page Precedente'>";
    echo "</FORM>";
   } 
   $i=0; 
   $j=1; 

   if($nb_total>$limit)
   { 
    while($i<($nb_total/$limit))
    { 
     if($i!=$page)
     {
      echo "<FORM NAME=FORM11 ACTION=Cette_Page.php?page=$i METHOD=POST>";
      echo "<input type=hidden name=fonction value='BROWSE'>";
      echo "</FORM>";
     } 
     else
     {
      echo " <B>$j</B> ";
     } 
     $i++;$j++; 
    } 
   } 
   if($debut+$limit < $nb_total) 
   { 
    $suivant=$page+1; 
    echo "<FORM NAME=FORM12 ACTION=Cette_Page.php?page=$suivant METHOD=POST>";
    echo "<input type=hidden name=fonction value='BROWSE'>";
    echo "<INPUT TYPE=SUBMIT VALUE='Page Suivante >>'>";
    echo "</FORM>";
   } 
   echo '</CENTER>';
   
// Mise en forme entête du tableau d'affichage
   echo "<table border=1 cellspacing=0 class=style_tab2><tr class=entete_tab><td><b>N° Texte</b></td><td><b>Description</b>< /td><td><b>Date</b></td><td><b>N° Classement</b></td><td><b>PDF</b></td></tr> "; 

// Parcours du tableau de stockage et affichage des enregistrements stockés dans le tableau 
   for ($i=0; $i <= $nb_enr_page; $i++)
   {
//  Affichage enregistrement
    echo "<tr style='cursor:pointer;' onmouseover='ListOver(this);' onmouseout='ListOut_1(this);'> <a href=fileadmin/ download.php?Fichier_a_telecharger=".$nomPDF[i]].".pdf&chemin=BOD/".$nomDossier[i]]."/ />";
    echo '<td>'.$numtext[i].'</td>';
    echo '<td>'.$objet[i].'</td>';
    echo '<td>'.$datebod[i].'</td>';
    echo '<td>'.$annee[i].'</td>';
    echo '<td>'.$mois[i].'</td>';
    echo '<td>'.$numclassement[i].'</td>';
    echo '<td><a href=fileadmin/download.php?Fichier_a_telecharger='.$nomPDF[i].'.pdf&chemin=BOD/'.$nomDossier[i]].'/ /><img src=uploads/acrobat.gif width=16 height=16 border=0 /></a></td></a></tr>';
   }
  }  
  else
  {
   echo "<CENTER><H4><FONT COLOR='RED'> pas de données à afficher !! </FONT></H4></CENTER>";
  }
 }
 else
 {
  echo '<CENTER><H4><FONT COLOR="RED"> Vous devez reposter vos crit&egrave;res de recherche</FONT></H4><CENTER>';
  echo "<FORM NAME=FORM1 ACTION='Retour_Page_Du_Post.php' METHOD=POST>";
  echo '<CENTER><INPUT TYPE=SUBMIT VALUE="Retour"></CENTER>';
  echo '</FORM>';
 } 
?>
0
CéKoiDonc ?? > nannousss Messages postés 4 Date d'inscription mardi 17 mars 2009 Statut Membre Dernière intervention 17 mars 2009
17 mars 2009 à 14:55
Re,

Avec de légères corrections pour m'adapter à ton code original.
A+.

<?php
$limit=30; // Nbre max d'enregistrements à afficher par page

// 1er appel de cette page avec 'fonction' = '1ER_ACCES' en méthode $_GET
// Paginations suivantes avec 'fonction' = 'BROWSE' en méthode $_POST
if ($_POST['fonction'] == 'BROWSE' or $_GET['fonction'] == '1ER_ACCES')
{
// Si pagination
if ($_POST['fonction'] == 'BROWSE')
{
// recuperation numéro de la page courante
$page = $_GET['page'];
}
// Récuperation des champs stockés en $_REQUEST
$Annee = $_REQUEST['ListeAnnee'];
$Mois = $_REQUEST['ListeMois'];
$MotCle = $_REQUEST['MotCle'];
// Mise en forme de la clause WHERE SQL
$where = ' 1';
$where .= ($Annee!='')? " AND `annee`=".$Annee:'';
$where .= ($Mois!='')? " AND `mois`='".$Mois."'":'';
$where .= ($MotCle!='')? " AND `objet` LIKE '%".$MotCle."%'":' ';

//connexion avec la base de donnée
$Connexion = mysql_connect('localhost','root','');
mysql_select_db('BD',$Connexion);

// Génération requete SQL entière
$requete_tot = 'SELECT * FROM `tablebod` WHERE'.$where;

// Compte le nombre total de champs à afficher pour toute la requete
$ret_total=mysql_query($requete_tot);
$nb_total=mysql_num_rows($ret_total);

// Détermination du 1er enregistrement à paginer
$debut=$page*$limit;

// construction de la requete pours la page en cours (avec restriction LIMIT)
$limit_str = "LIMIT ". $page * $limit .",$limit";
$requete_part_browse=$requete_tot." ".$limit_str;

// Compte le nombre d'enregistrements - page en cours
$result_pos = mysql_query($requete_part_browse);
$nb_enr_page=mysql_num_rows($result_pos);

// Execution de la requete et stockage des enregistrements de la page en cours --> tableau
$k=0;

while ($data = mysql_fetch_array ($result_pos) )
{
$nom[$k] = explode('/',$data['numtext']);
$nom = $nom[k];
$nomPDF[$k] = $nom[1].'_'.$nom[0];
$nomDossier[$k] = 'DGD_'.$data['annee'];
$numtext[$k] = $data['numtext'];
$objet[k] = $data['objet'];
$datebod[k] = $data['datebod'];
$annee[k] = $data['annee'];
$mois[k] = $data['mois'];
$numclassement[k] = data['numclassement'];
$k++;
}

// Si au moins un enregistrement à afficher
if ($nb_total != 0)
{
// Affichage des liens de pagination
echo "<CENTER>";
// Pagination arriere
if ($page>0)
{
$precedent=$page-1;

echo "<FORM NAME=FORM10 ACTION=Cette_Page.php?page=$precedent METHOD=POST>";
echo "<input type=hidden name=fonction value='BROWSE'>";
echo "<INPUT TYPE=SUBMIT VALUE='<< Page Precedente'>";
echo "</FORM>";
}
// Pagination avant
$i=0;
$j=1;
if($nb_total>$limit)
{
while($i<($nb_total/$limit))
{
if($i!=$page)
{
echo "<FORM NAME=FORM11 ACTION=Cette_Page.php?page=$i METHOD=POST>";
echo "<input type=hidden name=fonction value='BROWSE'>";
echo "</FORM>";
}
else
{
echo " <B>$j</B> ";
}
$i++;$j++;
}
}

if($debut+$limit < $nb_total)
{
$suivant=$page+1;
echo "<FORM NAME=FORM12 ACTION=Cette_Page.php?page=$suivant METHOD=POST>";
echo "<input type=hidden name=fonction value='BROWSE'>";
echo "<INPUT TYPE=SUBMIT VALUE='Page Suivante >>'>";
echo "</FORM>";
}
echo '</CENTER>';

// Mise en forme entete du tableau d'affichage
echo "<table border=1 cellspacing=0 class=style_tab2><tr class=entete_tab><td><b>N° Texte</b></td><td><b>Description</b>< /td><td><b>Date</b></td><td><b>N° Classement</b></td><td><b>PDF</b></td></tr> ";
// Parcours du tableau de stockage et affichage des enregistrements stockés
for ($i=0; $i <= $nb_enr_page; $i++)
{
// Affichage enregistrement
echo "<tr style='cursor:pointer;' onmouseover='ListOver(this);' onmouseout='ListOut_1(this);'> <a href=fileadmin/ download.php?Fichier_a_telecharger=".$nomPDF[i]].".pdf&chemin=BOD/".$nomDossier[i]]."/ />";
echo '<td>'.$numtext[i].'</td>';
echo '<td>'.$objet[i].'</td>';
echo '<td>'.$datebod[i].'</td>';
echo '<td>'.$annee[i].'</td>';
echo '<td>'.$mois[i].'</td>';
echo '<td>'.$numclassement[i].'</td>';
echo '<td><a href=fileadmin/download.php?Fichier_a_telecharger='.$nomPDF[i].'.pdf&chemin=BOD/'.$nomDossier[i]].'/ /><img src=uploads/acrobat.gif width=16 height=16 border=0 /></a></td></a></tr>';
}
echo "</table>";
}
// Table MySql vide
else
{
echo "<CENTER><H4><FONT COLOR='RED'> pas de donnees a afficher !! </FONT></H4></CENTER>";
}
}
// Accés incorrect à cette page
else
{
echo '<CENTER><H4><FONT COLOR="RED"> Vous devez reposter vos criteres de recherche</FONT></H4><CENTER>';
echo "<FORM NAME=FORM1 ACTION='Retour_Page_Du_Post.php' METHOD=POST>";
echo '<CENTER><INPUT TYPE=SUBMIT VALUE="Retour"></CENTER>';
echo '</FORM>';
}
?>
0