Pagination, un problème sans solution ?

Résolu
cs_BenPourquoi Messages postés 5 Date d'inscription mardi 2 novembre 2010 Statut Membre Dernière intervention 8 novembre 2010 - 3 nov. 2010 à 09:41
cs_BenPourquoi Messages postés 5 Date d'inscription mardi 2 novembre 2010 Statut Membre Dernière intervention 8 novembre 2010 - 8 nov. 2010 à 16:54
Bonjour,
Je constate après quelque(sssss) recherches que je ne suis pas le seul à bloquer sur la pagination des résultats d'une requête avec des conditions suite à un formulaire de type POST.
Je fais appel à ceux qui maitrise le PHP mieux que le modeste débutant que je suis pour nous apporter une solution fiable .

Descrition :
La requête s'effectue correctement et la réponse s'affiche sur une seule page. Si je veux répartir mes réponses sur plusieurs pages, la détermination du nombre de page et la réalisation des liens fonctionnent. Le problème intervient lorsque je clique sur un lien. La nouvelle page s'ouvre mais elle n'affiche pas la suite de ma requête. Le LIMIT n'est pas pris en compte.

Je précise que si je fais une requête sans formulaire et sans condition WHERE cela ne pose aucune difficulté.

Le script est semblable à ceux que l'on voit régulièrement pour ce type de .

Doit-on procéder autrement ?
Ou est l'erreur ?
Qui relèvera le challenge ?

/* le n° de la page actuelle est contenu dans la variable $_GET['page']
(sous la forme index.php?page=[n° de la page]). */
if(isset($_GET['page'])) // Si la variable $_GET['page'] existe...
{
     $pageActuelle=intval($_GET['page']);
     
     if($pageActuelle>$nombreDePages) // Si la valeur de $pageActuelle (le numéro de la page) est plus grande que $nombreDePages...
     {
          $pageActuelle=$nombreDePages;
     }
}
else // Sinon
{
     $pageActuelle=1; // La page actuelle est la n°1    
}

// l'élément name n'est pas vide, la requête s'exécute.
$requete = "SELECT * 
FROM
index_lampyris
WHERE
nip='$e'
OR
nom REGEXP '([[:space:]]|[_-]|^)$e([[:space:]]|[_-]|$)'
OR
cas='$e'
";

// je récupère le contenu de la requête dans $retour.
$retour = mysql_query($requete) or die($requete."
\n".mysql_error());

// je calcule le nombre total de réponses pour le placer dans la variable $numrow.
$numrow = mysql_num_rows($retour);
echo 'nbr de réponses '.$numrow.'
';

//La recherche est créée mais sans résultat.
if($numrow == "") 
{
  echo '
"Votre recherche ne renvoie aucun résultat"

Les recherches sont effectuées sans tenir compte de la casse des caractères.

Vous ne pouvez pas taper plusieurs mots ou numéros.
'; 
exit;
  }
  
// je met dans la variable $reponseParPage le nombre de réponses souhaitées par page.
$reponseParPage = 10; // Affiche 20 réponses par page.

// je place le nombre total de pages dans la variable $nombreDePages.
$nombreDePages=ceil($numrow/$reponseParPage); // La fonction ceil permet d'avoir le nombre entier supérieur.
echo 'Nombre de page '.$nombreDePages.'';
/ Sur la page 1, l'index de départ est (de 0 à n, n = pageActuelle - 1) en paramètre d'url.
$premiereEntree=($pageActuelle-1)*$reponseParPage; // première entrée à lire
// le premier argument indique le décalage du premier enregistrement à retourner et le second donne le nombre maximum d'enregistrement à retourner.
$requete .= "LIMIT ".$reponseParPage." OFFSET ".$premiereEntree.";";
//$requete .= ' limit '.$premiereEntree.', '.$reponseParPage.'';
$resultat = mysql_query($requete); // Nouveau résultat de la requête
// Je fais une boucle pour afficher la liste des pages avec un lien pointant vers chacune d'elles.
//si c'est supérieur à 0 on affiche un lien "page précédente", si c'est inférieur à pageActuelle - 1 cela affiche un lien "page suivante".
echo 'Page : '; // Je centre l'affichage de la liste des pages
for($i=1; $i<=$nombreDePages; $i++) // Je prend pour départ la variable $i=1, je l'incrémente de 1 à chaque passage jusqu'à ce que $i=$nombreDePages.
{
if($i==$pageActuelle) // S'il s'agit de la page actuelle, elle est encadrée par [ ].
{
echo ' [ '.$i.' ] ';
}
else // Sinon...
{
echo ' [index.php?page='.$i.' '.$i.'] ';
}
}
echo '

';


mysql_close(); // Je ferme ma connexion MySQL.

 


Je vous remercie pour l'attention que vous porterez à ma demande.
Ne cherche qu'à grandir

4 réponses

cod57 Messages postés 1653 Date d'inscription dimanche 7 septembre 2008 Statut Membre Dernière intervention 11 septembre 2013 19
3 nov. 2010 à 11:02
Salut

à première vue ton problème vient de

$requete .= "LIMIT ".$reponseParPage." OFFSET ".$premiereEntree.";";

enfin le code est touffu je regarde ...

http://www.goodphptutorials.com/article/show/simple-php-mysql-pagination/2

http://www.codediesel.com/php/simple-pagination-in-php/

une simple class facilite bien les choses
3
cs_BenPourquoi Messages postés 5 Date d'inscription mardi 2 novembre 2010 Statut Membre Dernière intervention 8 novembre 2010
8 nov. 2010 à 16:43
Bonjour,
Après quelques essais, je vous fais part de ma solution.

Dans le formulaire, il faut préciser method="get"

<form class="form" name="form1" method="get" action="<?php echo $PHP_SELF ?>">
<label>



</label>
</form>


Pour la pagination avec la prise en compte des premières entrées et du nombres de lignes, il faut inclure dans le lien la variable de recherche (dans l'exemple ci-dessous $e) :
<?php 
for($i=1; $i<=$nombreDePages; $i++) // Je prend pour départ la variable $i=1, je l'incrémente de 1 à chaque passage jusqu'à ce que $i=$nombreDePages.
{
if($i==$pageActuelle) // S'il s'agit de la page actuelle, elle est encadrée par [ ].
{
echo ' [ '.$i.' ] ';
}
else // Sinon...
{
echo " $i \n";
}
}
echo '

';
?>


C'est une méthode qui fonctionne avec mon code. J'espère que cette proposition permettra à ceux qui sont dans l'impasse de voir le bout du tunel.

Ne cherche qu'à grandir
3
cs_BenPourquoi Messages postés 5 Date d'inscription mardi 2 novembre 2010 Statut Membre Dernière intervention 8 novembre 2010
3 nov. 2010 à 11:14
Bonjour cod57, Je m'aperçois en effet que j'ai affiché des lignes de teste pour trouver une solution .
Je regarde tes liens.
Merci pour ta réponse.
Ne cherche qu'à grandir
0
cs_BenPourquoi Messages postés 5 Date d'inscription mardi 2 novembre 2010 Statut Membre Dernière intervention 8 novembre 2010
8 nov. 2010 à 16:54
Le problème est résolu .


Ne cherche qu'à grandir
0
Rejoignez-nous