Pagination, un problème sans solution ? [Résolu]

Messages postés
5
Date d'inscription
mardi 2 novembre 2010
Dernière intervention
8 novembre 2010
- - Dernière réponse : cs_BenPourquoi
Messages postés
5
Date d'inscription
mardi 2 novembre 2010
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
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
1660
Date d'inscription
dimanche 7 septembre 2008
Dernière intervention
11 septembre 2013
12
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cod57
Messages postés
5
Date d'inscription
mardi 2 novembre 2010
Dernière intervention
8 novembre 2010
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 120 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_BenPourquoi
Messages postés
5
Date d'inscription
mardi 2 novembre 2010
Dernière intervention
8 novembre 2010
0
Merci
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
Commenter la réponse de cs_BenPourquoi
Messages postés
5
Date d'inscription
mardi 2 novembre 2010
Dernière intervention
8 novembre 2010
0
Merci
Le problème est résolu .


Ne cherche qu'à grandir
Commenter la réponse de cs_BenPourquoi

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.