Problème - page recherche sur plusieurs pages

Fermé
termi-zzz Messages postés 63 Date d'inscription mardi 18 décembre 2007 Statut Membre Dernière intervention 12 mai 2009 - 20 déc. 2007 à 11:37
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 24 déc. 2007 à 17:24
Bonjour,

je viens de créer un mini-moteur de recherche sur mon site (depuis une table/base de données) et je rencontre un petit problème pour afficher les résultats sur plusieurs pages...

Déjà, avec tous les " if " et " else " présent au sein du moteur, pas facile de trouver les bons endroits où placer les " limites ". Mais le principal problème, c'est qu'avec tous ces " if " et " else " quand je clique sur pages suivantes, il affiche la page avec le GET " ?page=$suivant " sauf que là, la page " recherche.php " se réactualise et du coup il recommence la recherche avec un formulaire vide donc tout foire littéralement dès qu'il y a une page supplémentaire dans la recherche. Un autre problème, c'est pour rajouter les " limites " à l'intérieur de certaine requête aussi bien surchargée. J'ai mis des // avec des explications, je vous laisse voire le code ci-dessous pour mieux comprendre...


Ma page actuelle (qui fonctionne) :

//si pas de mots-clés supérieurs à 3 chiffres on demande une nouvelle recherche
// problème avec les plusieurs pages quand ça réactualise
if (($_POST["text"] == "")||($_POST["text"] == "%")||(strlen($_POST["text"])<=3)) {
echo '<font class="mini"><font class="gris">Recherche - Il y a 0 résultat pour : '.$_POST["text"].'</font></font><br><hr><br>';
echo '<font class="letter">V</font>euillez reformuler votre recherche plus clairement s\'il vous plaît, pas assez précis pour trouver un truc !<br><br>';
}

//sinon on commence la requête
else {
$req = mysql_query("SELECT * from recherche where recherche_motscles LIKE '%$_POST[text]%' ORDER BY recherche_priority ASC ")
or die ("erreur req ".mysql_error());
$res= mysql_num_rows($req);

//si les résultats sont supérieurs à 27 on demande une nouvelle recherche
if ($res>27) {
echo '<font class="mini"><font class="gris">Recherche - Il y a '.$res.' résultats pour : '.$_POST["text"].'</font></font><br><hr><br>';
echo '<font class="letter">V</font>euillez reformuler votre recherche plus clairement s\'il vous plaît, trop de résultats !<br><br>';
}

//sinon
else {

//si les résultats sont supérieurs à 0 on affiche la recherche
if ($res>0) {
echo '<font class="mini"><font class="gris">Recherche - Il y a '.$res.' résultat(s) pour : '.$_POST["text"].'</font></font><br><hr><br>';

$result = mysql_query("SELECT * from recherche where recherche_motscles LIKE '%$_POST[text]%' ORDER BY recherche_priority ASC");
while( $sortie = mysql_fetch_array($result))
{
echo '<font class="titre"><a href="'.$sortie['recherche_url'].'">'.$sortie['recherche_titre'].'</a></font><br / >';
echo $sortie['recherche_description'].'<br /><br />';
echo '<b><a href="'.$sortie['recherche_url'].'"><img src="images/picto-noir.gif"> Voire la page'.'</b></a><br /><hr>';
}
}

//sinon si aucun résultat on affiche la recherche avec d'autres critères plus softs
else {

$array_chaine=explode(" ",$_POST[text]);

//problème ici pour gérer les limites
$query="SELECT * FROM recherche WHERE ";
for($i=0;$i<sizeof($array_chaine);$i++){
if(strlen($array_chaine[$i])>3){
if($i>0){$query.=" OR ";}
$query.="recherche_motscles LIKE '%$array_chaine[$i]%'";
}
}
$query.= " ORDER BY recherche_priority ASC ";

$reqx = mysql_query($query)
or die ("erreur req ".mysql_error());

$res= mysql_num_rows($reqx);

echo '<font class="mini"><font class="gris">Recherche - Il y a '.$res.' résultat(s) pour : '.$_POST["text"].'</font></font><br><hr><br>';

while( $sortie = mysql_fetch_array($reqx))
{
echo '<font class="titre"><a href="'.$sortie['recherche_url'].'">'.$sortie['recherche_titre'].'</a></font><br / >';
echo $sortie['recherche_description'].'<br /><br />';
echo '<b><a href="'.$sortie['recherche_url'].'"><img src="images/picto-noir.gif"> Voire la page'.'</b></a><br /><hr>';
}
}
}
}



Les données limites à rajouter dans cette page :

//au début des requêtes
$page = isset($_GET['page']) ? $_GET['page'] : '';

$limit=7;
if($debut==""){$debut=0;}
$debut=$page*$limit;
// Compte du nombre de champs
$nb_total=mysql_num_rows($ret);
// Requête
$limite=mysql_query("$requete limit $debut,$limit");

//avant les requêtes principales
$limit_str = "LIMIT ". $page * $limit .",$limit";

$limit_str


echo '<br \>Pages : ';
if ($page>0) {
$precedent=$page-1;
echo "<b><a href=\"$PHP_SELF?page=$precedent\">Précèdente</a></b> ";
}

$a=0;
$j=1;

if($nb_total>$limit) {
while($a<($nb_total/$limit)) {
if($a!=$page){echo " <a href=\"$PHP_SELF?page=$a\">$j</a> | ";}
else { echo "<b>$j |</b>";}
$a++;$j++;
}
}

if($debut+$limit<$nb_total) {
$suivant=$page+1;
echo " <b><a href=\"$PHP_SELF?page=$suivant\">Suivante</a></b>";
}




Est-ce que quelqu'un pourrait m'aider ? Et jeter un coup d'oeil à tous ces scripts pour me conseiller quelques changements ? Où placer les " limites " ? Comment gérer les " if " ? Comment éviter les bugs à la réactualisation de la page ? Comment gérer la seconde requête avec les limites ?

Merci de votre aide ! a+

1 réponse

Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
24 déc. 2007 à 17:24
salut,

un petit tuto chez developpez.com.
0