Acquisition des résultats d'un formulaire dans la pagination

shi
Invité n'ayant pas de compte PHPfrance

12 juil. 2005, 22:06

Donc

<form name="annuaire" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>">
<input type="text" name="critere" value="Votre recherche ici. <?php if(!$critere) echo stripslashes( $critere ); ?>" size="17" onFocus='document.forms["annuaire"].elements["critere"].value =""'/>
<input type="submit" name="envoyer" value="Traduire"/><input type="hidden" name="recherche" value="1"/></form>

et :

if($recherche == 1 && $critere != null)


alors... CA MARCHE ! CA MARCHE ! :agenouille:

foutu 0 aussi !

Juste un seul problème dans les liens

si le resultat est inférieur à la limite, il me met quand même le lien suivant !
Si je clique il m'affiche le lien précédent avec ce qui résulte :

R&eacute;sultat : <?php echo $total; ?>
Mot recherch&eacute; : <?php echo colorise_query( $critere,$critere,$critere); ?>

shi
Invité n'ayant pas de compte PHPfrance

12 juil. 2005, 22:11

J'AI TROUVE !

c'est tout bête : si le total > $na alors on affiche le bouton suivant !

Code : Tout sélectionner

if(isset($nb_pages) && $nb_pages > 0 && $page > 0) { ?> <a href="<?php echo($_SERVER['PHP_SELF']."?page=". ($page - 1))?>&crit=<?php echo($critere); ?>">Page précédente</a> <?php } if(isset($nb_pages) && $page < $nb_pages && $total > $na) { ?> <a href="<?php echo($_SERVER['PHP_SELF']."?page=". ($page + 1))?>&crit=<?php echo($critere); ?>">Page suivante</a> <?php

shi
Invité n'ayant pas de compte PHPfrance

12 juil. 2005, 22:17

ah mince chti problème mineur :

Si on a 15 résultats pour une limite de 4 à la dernière page affichant dont les résultats 12 à 15 (virtuellement 1), il affiche le bouton suivant quand même et envoie donc sur une page sans résultat mais avec le bouton précédent

Mammouth du PHP | 19672 Messages

12 juil. 2005, 22:25

Code : Tout sélectionner

if(isset($nb_pages) && $page < $nb_pages && $total >= $na)
Essaye en mettant >= au lieu de > tout court
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

shi
Invité n'ayant pas de compte PHPfrance

12 juil. 2005, 22:26

En tout cas, merci à toi Cyrano !

Le problème des liens est sûrement lié à

ceil($total/$na) non ?

shi
Invité n'ayant pas de compte PHPfrance

12 juil. 2005, 22:28

On s'est croisés dans les messages !

Non, le >= n'a rien changé

Mammouth du PHP | 19672 Messages

12 juil. 2005, 22:35

Vérifie en faisant éventuellement afficher tes variables si tu ne les vois pas directement dans la barre de statut de ton navigateur: si tu as 4 pages, tu ne devrais pas avoir de lien vers une page 5. Si c'est pourtant le cas, alors il y a une variable mal initialisée ou mal utilisée quelque part.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

shi
Invité n'ayant pas de compte PHPfrance

12 juil. 2005, 22:45

Hum, j'essaie de rajouter une variable pour voir !

Mammouth du PHP | 19672 Messages

12 juil. 2005, 22:46

Non, il y en a une qui doit être utilisée avec un décalage non calculé
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

shi
Invité n'ayant pas de compte PHPfrance

12 juil. 2005, 22:55

Bon, ca aurait été trop beau que cela continue dans la même veine lol !

En même temps, en regardant le code des liens, je vois pas pourquoi il affiche ce lien puisqu'on a si la page <nombre de pages on affiche le lien...

shi
Invité n'ayant pas de compte PHPfrance

12 juil. 2005, 23:01

hop TROUVE :

tu avais raison, il manque un décalage !

if(isset($nb_pages) && $page < ($nb_pages-1) && $total > $na)

Mammouth du PHP | 19672 Messages

12 juil. 2005, 23:02

Et si tu fais afficher la variable $nombre_pages ? tu as quoi ?
Or attention, $page a une valeur décallée de -1 puisque la première page correspont à $page = 0.

Donc en fait, c'Est peut-être même:
if(isset($nb_pages) && $page <= ($nb_pages - 1))
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

shi
Invité n'ayant pas de compte PHPfrance

12 juil. 2005, 23:12

Je poste le code en entier avec les parties importantes, ça pourra servir à d'autres :

Code : Tout sélectionner

<?php include( "mysql.inc.php" ); $page = isset($_GET['page']) ? $_GET['page'] : 0; ?> </head> //formulaire dans lequel on tape le mot cherché <body> <form name="annuaire" method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>"> <input type="text" name="critere" value="Votre recherche ici. <?php if(!$critere) echo stripslashes( $critere ); ?>" size="17" onFocus='document.forms["annuaire"].elements["critere"].value =""'/> <input type="submit" name="envoyer" value="Traduire"/><input type="hidden" name="recherche" value="0"/></form> </body> <?Php // determine la limite a afficher par page $na = 4; // on verifie qu'un mot a bien etait tape et on acquiere le mot $recherche = isset($_POST["recherche"]) ? $_POST["recherche"] : 0; $critere = (isset($_POST["critere"]) && !isset($_GET['crit'])) ? $_POST["critere"] : null; if($critere == null) { $critere = isset($_GET["crit"]) ? $_GET["crit"] : null; } // si le mot a ete tape, on effectue la premiere requete generale //dans une table if($recherche == 0 && $critere != null) { $requete = "SELECT * FROM japfr WHERE fr LIKE '%" . stripslashes( $critere ) . "%'"; $execution = mysql_query( $requete, $connection ) OR die( "Impossible d'executer la Requete !" ); $total = @mysql_num_rows( $execution ) ; // si la requete retourne un resultat if( $total> 0 ) { // divise le chiffre du resultat total par la limite pour obtenir le nombre //page $nb_pages = ceil($total/$na); $depart = $page * $na; // on effectue la meme recherche avec la limite $requete2 = "SELECT * FROM japfr WHERE fr LIKE '%" . stripslashes( $critere ) . "%' limit ".$depart.",".$na; $execution2 = mysql_query( $requete2, $connection ) OR die( "Impossible d'executer la Requete !" ); $totallimite = @mysql_num_rows( $execution2 ) ; ?> // on affiche le nombre de resultats au total et le mot cherche <br /> <div style="position: absolute; left: 16px; top:230px; width: 753px;background-color: #FFFFFF; layer-background-color: #FFFFFF; border: 1px none #000000;"> <p class="s11">R&eacute;sultat : <span class="b"><?php echo $total; ?></span><br /> Mot recherch&eacute; :<span class="b""color:#FF0000"> <?php echo colorise_query( $critere,$critere,$critere); ?></span></p> <br /> // on affiche les resultats de la requete <?php while( $un_mot = mysql_fetch_array( $execution2 )) { ?><ul><li><p class="style2"><strong><?php echo colorise_query( $un_mot["fr"], $critere,"stabylo" ); ?></strong></li></ul></p> <p class="style8"><?php echo $un_mot["jap"] . " " . $un_mot["pro"]; ?><br /></p> <p class="style5"><?php echo $un_mot["com"]; ?><br /> </p> <?php } mysql_free_result( $execution2 ); } // si la requete dans la 1ere table est nulle, on effectue le même //processus dans une autre table else { $requete = "SELECT * FROM japfr WHERE jap LIKE '%" . stripslashes( $critere ) . "%' OR pro LIKE '%". stripslashes( $critere ) . "%'"; $execution = mysql_query( $requete, $connection ) OR die( "Impossible d'executer la Requete !" ); $total = @mysql_num_rows( $execution ); if( $total > 0 ) { $nb_pages = ceil($total/$na); $depart = $page * $na; $requete2 = "SELECT * FROM japfr WHERE jap LIKE '%" . stripslashes( $critere ) . "%' OR pro LIKE '%". stripslashes( $critere ) . "%' limit ".$depart.",".$na; $execution2 = mysql_query( $requete2, $connection ) OR die( "Impossible d'executer la Requete !" ); $totallimite = @mysql_num_rows( $execution2 ) ; ?> <br /> <div style="position: absolute; left: 16px; top:230px; width: 753px;background-color: #FFFFFF; layer-background-color: #FFFFFF; border: 1px none #000000;"> <p class="s11">R&eacute;sultat : <span class="b"><?php echo $total; ?></span><br /> Mot recherch&eacute; :<span class="b""color:#FF0000"> <?php echo colorise_query( $critere,$critere,$critere ); ?></span></p> <br /> <?php while( $un_mot = mysql_fetch_array( $execution2 ) ) { ?><ul><li><p class="style4"><strong><?php echo colorise_query( $un_mot["jap"],$critere,"stabylo" );?></strong></li></p></ul> <p class="style8"><?php echo $un_mot["fr"]; ?><br /></p> <p class="style5"><?php echo $un_mot["com"]; ?><br /> </p> <?php } mysql_free_result( $execution2 ); } // si la 2eme requete est nulle, on affiche pas de resultat else echo "Aucune traduction disponible pour le moment.<br />\n"; } // on affiche les liens precedents et suivants if(isset($nb_pages) && $nb_pages > 0 && $page > 0) { ?> <a href="<?php echo($_SERVER['PHP_SELF']."?page=". ($page - 1))?>&crit=<?php echo($critere); ?>">Page précédente</a> <?php } if(isset($nb_pages) && $page < ($nb_pages-1) && $total > $na) { ?> <a href="<?php echo($_SERVER['PHP_SELF']."?page=". ($page + 1))?>&crit=<?php echo($critere); ?>">Page suivante</a> <?php } } ?> </body> </html> <?Php mysql_close(); ?>

shi
Invité n'ayant pas de compte PHPfrance

12 juil. 2005, 23:16

Justement, parce qu'elle est definie à 0, il faut la décaler de moins 1, je pense... (pas sûr)

Si je mets égal, ça ne marche pas, le lien réapparait à la dernière page.

Le -1 permet d'éviter qu'il aille à cette page.

Si j'affiche $nb_pages, il me marque le bon nombres de pages.

Par exemple : si j'ai 10 résultat, pour une limite de 4, il me met 3 pages

Mammouth du PHP | 19672 Messages

12 juil. 2005, 23:23

Bon et finalement, ça marche ? [Résolu] :?:
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: