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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Acquisition des résultats d'un formulaire dans la pagination

par shi » 13 juil. 2005, 00:01

MINCE, j'ai pas mis le bon code juste en haut !! Un admin pour l'effacer ??? histoire de pas induire en erreur les gens ???

Voilà le bon code cette fois :
<?php
  echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
?>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<meta http-equiv="content-type" content="text/html" charset="UTF-8" />
<head>
<?php
 include( "mysql.inc.php" );
 require( "fonctions.inc.php" );
 $page = isset($_GET['page']) ? $_GET['page'] : 0; 
?>
</head>
<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="1"/></form>
</body>
<?Php
$na = 4; 
$recherche = isset($_POST["recherche"]) ? $_POST["recherche"] : 1; 
$critere   = (isset($_POST["critere"]) && !isset($_GET['crit'])) ? $_POST["critere"] : null; 
if($critere == null) 
{ 
    $critere   = isset($_GET["crit"]) ? $_GET["crit"] : null; 
} 
  if($recherche == 1 && $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 ) ;
    if( $total> 0 )
    {
	 $nb_pages = ceil($total/$na); 
     $depart = $page * $na;
	 $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 ) ;
?>
<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="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 );
    }
    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 );
      }
      else  
	echo "Aucune traduction disponible pour le moment.<br />\n";
    }
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();
?>

par shi » 12 juil. 2005, 23:26

OK, OK, je ferai un autre thread :lol:

Encore merci ! Tu me délivres de 3 jours de tourmentes !

par shi » 12 juil. 2005, 23:25

Pour résumer = TOUT EST OK !

Merci Cyrano !

Si je crée des pseudos frame et que je mets par exemple le formulaire dans index.php et tout le code php qui affiche et execute les requetes dans result.php, il suffit que je change

action="<?php echo $_SERVER["PHP_SELF"]; ?>">

par result.php dans le formulaire ?

Sinon, il faut que je vois du côté de la protection ou ça peut aller là?

par Cyrano » 12 juil. 2005, 23:23

Bon et finalement, ça marche ? [Résolu] :?:

par shi » 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

par shi » 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(); ?>

par Cyrano » 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))

par shi » 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)

par shi » 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...

par Cyrano » 12 juil. 2005, 22:46

Non, il y en a une qui doit être utilisée avec un décalage non calculé

par shi » 12 juil. 2005, 22:45

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

par Cyrano » 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.

par shi » 12 juil. 2005, 22:28

On s'est croisés dans les messages !

Non, le >= n'a rien changé

par shi » 12 juil. 2005, 22:26

En tout cas, merci à toi Cyrano !

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

ceil($total/$na) non ?

par Cyrano » 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