Rechercher : dans
Par :

Fonction de pagination en php

Dernière réponse le 21 mar 2009 à 08:31:20 nannousss, le 17 mar 2009 à 10:05:43 
 Signaler ce message aux modérateurs

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

Configuration: Windows XP
Firefox 2.0.0.20

Meilleures réponses pour « fonction de pagination en php » dans :
[PHP] Fonction mail() VoirLa fonction mail() est bloquée chez certains des hébergeurs gratuits pour des raisons de sécurité (afin d'éviter le spam notamment), l'adresse ip de la machine qui a demandé le script sera alors indiquée dans le header 'X-MM-Mail-From-IP'. renseignez...
PHP - Nettoyer une chaîne de caractères VoirVoici une fonction en PHP qui peut être assez pratique, surtout quand on fait de l'URL Rewriting. Cette fonction permet de transformer les caractères de n'importe quelle chaîne de caractères en chaîne non accentuée, en enlevant les caractères...
Warning: rmdir(..): Directory not empty VoirIntroduction Le code de la fonction (compatible PHP 5 ou supérieur) Mise en garde pour la sécurité Introduction Lorsque vous tentez d'effacer un dossier en PHP, il peut arriver que vous rencontriez l'erreur suivante: Warning: rmdir(..):...
PHP - Mail et fonctions réseau VoirPHP étant un langage consacré au Web, il possède bien évidemment des fonctions lui permettant de communiquer avec le "monde extérieur" à l'aide de fonctions standards. Le service le plus utilisé sur Internet étant la messagerie électronique, il est...
PHP - Les fonctions VoirLa notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du...
PHP - Affichage de texte sur le navigateur VoirLe but de PHP est de permettre la création de pages web dynamiques, ainsi son but premier est de pouvoir envoyer des données au navigateur. Les trois fonctions standards PHP fournit 3 fonctions permettant d'envoyer du texte au navigateur. Ces...

1

NonMaisOh !!, le 17 mar 2009 à 10:53:58

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.

Répondre à NonMaisOh !!

2

nannousss, le 17 mar 2009 à 12:19:28

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.

Répondre à nannousss

3

CéKoiDonc ??, le 17 mar 2009 à 12:48:34

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+.

Répondre à CéKoiDonc ??

4

nannousss, le 17 mar 2009 à 13:16:27

Merci CéKoiDonc,
j'ai besoin de votre aide parce que je suis bloqué à ce problème ...

Répondre à nannousss

5

CéKoiDonc ??, le 17 mar 2009 à 14:29:18

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

Répondre à CéKoiDonc ??

6

CéKoiDonc ??, le 17 mar 2009 à 14:55:37

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

Répondre à CéKoiDonc ??

7

nannousss, le 17 mar 2009 à 17:41:34

Merci une autre fois CéKoiDonc
ton code n'affiche rien cette fois et je n'arrive pas à détecter le problème...

Répondre à nannousss

8

 CéKoiDonc, le 21 mar 2009 à 08:31:20

Re,

Surement que tu a mal implémenté mon code car chez moi l'alogorithmie fonctionne (:>).
Il seurait bon peut etre, si tu est un débutant en PHP de te lancer vers des choses plus accessibles que des developpements en pagination.
Dans tous les cas, revoie bien le cours PHP sur les "fonctions" car il doit te manquer des bases fondamentales au vu de tes 1ers jets proposés.

Cordialement.

Répondre à CéKoiDonc
Collection CommentÇaMarche.net