Recherche interne 2 mots
cdurlephp
-
Dalida Messages postés 6728 Date d'inscription Statut Contributeur Dernière intervention -
Dalida Messages postés 6728 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
j'ai crée avec l'aide de Dalida(sur le forum pas la vraie ;-)) un moteur de recherche interne à mon site que j'ai un peu étoffé maintenant.
Voici le code de ma page :
Ma recherche se fait en fulltext.
J'utilise le mode booléen dans ma requête SQL seulement problème cette recherche ne s'effectue que sur un seul mot.
J'ai lu dans la doc sql qu'on pouvait utiliser WITH QUERY EXPANSION mais je n'arrive pas à l'inclure à mon code, je dois faire une erreur de syntaxe quelque part.
Je fais :
comme dans l'exemple mais ça ne marche pas.
Query failed s'affiche.
Les deux mots sont bien transmis quand je fais un echo mais l'erreur vient de ma requête.
Quelqu'un aurait-il une idée pour ça?
Merci d'avance.
j'ai crée avec l'aide de Dalida(sur le forum pas la vraie ;-)) un moteur de recherche interne à mon site que j'ai un peu étoffé maintenant.
Voici le code de ma page :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <?php require("libs/dbconnect.php"); ?> <script type="text/javascript"> var page_courante=1; var nb_pages=1; function pagePrecedente() { if (page_courante==1) { alert("Vous êtes déjà sur la première page !"); } else { affichePage(page_courante-1); } } function pageSuivante() { if (page_courante==nbpages) { alert("Vous êtes déjà sur la dernière page !"); } else { affichePage(page_courante+1); } } function affichePage (page){ document.getElementById("page"+page_courante).style.display = "none"; document.getElementById("lienpage"+page_courante).style.fontWeight = "normal"; document.getElementById("page"+page).style.display = "block"; document.getElementById("lienpage"+page).style.fontWeight = "bold"; page_courante=page; } </script> <script type="text/javascript"> function focus(searching,valeur) { document.forms[searching].elements[valeur].focus(); } </script> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" /> <title>Rechercher sur le portail</title> <link href="css/text.css" rel="stylesheet" type="text/css" /> </head> <body onload="javascript:focus('frm','valeur');"> <div id="titre_index"><h2>Recherche</h2></div> <div id="categorie"> <form action="#formulaire" method="post" name="searching" id="frm"> <div class="input1"> <input name="valeur" type="text" /> </div> <div class="input2"><input type="submit" name="submit" value="Envoyer"/></div> </form> </div> <div style="position:absolute; left: 242px; top: 669px; "><a href="contact.html"> <img src="img/spacer.gif" width="80px" height="19px" border="0"/></a></div> <div style="position:absolute; left: 330px; top: 669px;"><a href="mention.html"><img src="img/spacer.gif" width="161px" height="20px" border="0"/></a></div> <br /><br /><br /><br /> <div name="formulaire" style="position:absolute; left:220px; width:600px; line-height:20px;"> <?PHP $valeur = ( $_POST['valeur'] ); $replace = mysql_escape_string ( $valeur ); if ($valeur=="edf" || $valeur=="edf/gdf" || $valeur=="gdf"|| $valeur=="edf gdf" || $valeur=="edf-gdf"){ $valeur="edfedf"; } if ($valeur=="dde"){ $valeur="ddedde"; } if ($valeur=="axa"){ $valeur="axaaxa"; } if ($valeur=="agf"){ $valeur="agfagf"; } if ($valeur=="tir"){ $valeur="tirtir"; } if ($valeur=="thé" || $valeur=="the"){ $valeur="théthé"; } if ($valeur=="bar"){ $valeur="barbar"; } $sql = "SELECT * FROM commerces WHERE MATCH (Nom,Rue,Ville,Telephone,Activites) AGAINST ('%$valeur%' IN BOOLEAN MODE) ORDER BY Lien" ; $page_text_query = mysql_query($sql) or die('Query failed'); $cpt = mysql_num_rows($page_text_query); $rpp = 3; $nbpages = ceil($cpt / $rpp); $cpt2 = 0; $cpt3 = 0; $cpt4 = 1; printf ('<br />'); printf ('<br />'); if (strlen($valeur)==0 && $cpt == 0 ) { print ("Veuillez entrer un terme de recherche"); } else if(strlen($valeur)<=3 && $cpt == 0 ) { print ("<p>Il y a $cpt résultat à votre demande</p>"); printf ('<div style="position:absolute; left="500px">'); printf ('Vos termes de recherche doivent contenir:'); printf ('<br />'); printf ('- Au moins 4 lettres '); printf ('</div>'); } else { print ("Vous avez cherché $replace"); print ("<p>Il y a $cpt résultat(s) à votre demande</p>" ); if ($nbpages > 1) { echo "<p>Page :"; $stylelien1=" style=\"font-weight: bold;\""; for ($i=1; $i<=$nbpages; $i++) { echo " <a href=\"#\" id=\"lienpage".$i."\" ".$stylelien1."onClick=\"Javascript:affichePage(".$i.")\">".$i."</a>"; $stylelien1=""; } echo "</p>"; } while ($cont = mysql_fetch_array($page_text_query)) { if ($cpt2 == 0) { if ($cpt4 == 1) { echo "<div id=\"page1\" style=\"display: inline;\">"; } else { echo "<div id=\"page".$cpt4."\" style=\"display: none;\">"; } echo "<table border=\"0\"><tr><td><b>Nom</b></td><td><b>Adresse</b></td><td><b>Téléphone</b></td><td><b>Ville</b></td><td><b>Fax</b></td></tr>"; $cpt4++; } $cpt2++; $cpt3++; echo "<tr><td>".$cont['Lien']." </td><td>".htmlentities($cont['Rue'])." </td><td>".$cont['Telephone']." </td><td>".$cont['Ville']." </td><td>".$cont['Fax']." </td></tr>"; if ($cpt2 == $rpp || $cpt3 == $cpt) { echo "</table></div>"; $cpt2 = 0; } } } printf ('<br />');printf ('<br />'); ?> <button onclick="pagePrecedente()">Page précédente</button> <button onclick="pageSuivante()">Page suivante</button> <script type="text/javascript"> var nbpages = <?PHP echo $nbpages; ?> </script> </div> </body> </html>
Ma recherche se fait en fulltext.
J'utilise le mode booléen dans ma requête SQL seulement problème cette recherche ne s'effectue que sur un seul mot.
J'ai lu dans la doc sql qu'on pouvait utiliser WITH QUERY EXPANSION mais je n'arrive pas à l'inclure à mon code, je dois faire une erreur de syntaxe quelque part.
Je fais :
$sql = "SELECT * FROM commerces WHERE MATCH (Nom,Rue,Ville,Telephone,Activites) AGAINST ('%$valeur%' IN BOOLEAN MODE | WITH QUERY EXPANSION) ORDER BY Lien" ;
comme dans l'exemple mais ça ne marche pas.
Query failed s'affiche.
Les deux mots sont bien transmis quand je fais un echo mais l'erreur vient de ma requête.
Quelqu'un aurait-il une idée pour ça?
Merci d'avance.
A voir également:
- Recherche interne 2 mots
- Supercopier 2 - Télécharger - Gestion de fichiers
- Recherche automatique des chaînes ne fonctionne pas - Guide
- 2 ecran pc - Guide
- Recherche photo - Guide
- Retrouver un film avec des mots - Télécharger - Divers TV & Vidéo
6 réponses
salut,
l'aide de Dalida(sur le forum pas la vraie ;-))
MAIS JE SUIS LA VRAIE DALIDA !!!
nanmého !
-:oD
quelle est l'erreur exacte dans PHPMyAdmin ?
l'aide de Dalida(sur le forum pas la vraie ;-))
MAIS JE SUIS LA VRAIE DALIDA !!!
nanmého !
-:oD
quelle est l'erreur exacte dans PHPMyAdmin ?
Hola, désolé je sais que tu es la vraie mais tlm te croit morte, et orlando qui en profite...
Sincères excuses.
Et merci bcp d'avoir répondu car je sais que c'est pas facile de trouver le temps.
Promis je t'offrirai un bouquet de chrysantèmes...
Je t'avouerai que je n'ai pas pensé à copier ma requête dans phpmyadmin, ne mettant pas en application le conseil que tu m'avais donné précedemment (mea culpa).
Car query failed, c'est une erreur générale non ? ça plante en fait sinon il donne toujours la ligne et qqch du genre parse error blabla...
Je vais regarder dans phpmyadmin et dire QUOI.
Sur ce .... buenas noches y a la manana por la manana.
Sincères excuses.
Et merci bcp d'avoir répondu car je sais que c'est pas facile de trouver le temps.
Promis je t'offrirai un bouquet de chrysantèmes...
Je t'avouerai que je n'ai pas pensé à copier ma requête dans phpmyadmin, ne mettant pas en application le conseil que tu m'avais donné précedemment (mea culpa).
Car query failed, c'est une erreur générale non ? ça plante en fait sinon il donne toujours la ligne et qqch du genre parse error blabla...
Je vais regarder dans phpmyadmin et dire QUOI.
Sur ce .... buenas noches y a la manana por la manana.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
ben en fait je sais pas...
Je t'explique un peu plus en détail :
- Dans mon formulaire, j'envoie bien deux mots mais pas dans un array. Ce qui fait que quand le résultat apparait il comprend toutes les pages contenant les deux mots mais séparément.
Cela génère un nombre incalculable de résultats.
- Je voudrais qu'il cherche uniquement dans les résultats contenant les deux mots ensemble.
As-tu une piste ?
Il venait d'avoir 18 ans ...
Gracias.
ben en fait je sais pas...
Je t'explique un peu plus en détail :
- Dans mon formulaire, j'envoie bien deux mots mais pas dans un array. Ce qui fait que quand le résultat apparait il comprend toutes les pages contenant les deux mots mais séparément.
Cela génère un nombre incalculable de résultats.
- Je voudrais qu'il cherche uniquement dans les résultats contenant les deux mots ensemble.
As-tu une piste ?
Il venait d'avoir 18 ans ...
Gracias.