Recherche interne 2 mots

Fermé
cdurlephp - 31 mars 2008 à 10:27
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 - 12 avril 2008 à 12:59
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 :

<!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&eacute;sultat &agrave; 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&eacute;sultat(s) &agrave; 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&eacute;l&eacute;phone</b></td><td><b>Ville</b></td><td><b>Fax</b></td></tr>";
			$cpt4++;
		 }
		  $cpt2++;
		  $cpt3++;

		  echo "<tr><td>".$cont['Lien']."&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</td><td>".htmlentities($cont['Rue'])."&nbsp;</td><td>".$cont['Telephone']."&nbsp;</td><td>".$cont['Ville']."&nbsp;</td><td>".$cont['Fax']."&nbsp;</td></tr>";
		  if ($cpt2 == $rpp || $cpt3 == $cpt) {

			 echo "</table></div>";
			$cpt2 = 0;
			}


	}
}
printf ('<br />');printf ('<br />');
?>

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<button onclick="pagePrecedente()">Page pr&eacute;c&eacute;dente</button>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<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:

6 réponses

Un petit up au cas où car pb toujours non-résolu
0
salut, dernier up sinon tant pis je ferai autrement...

Bonne continuation.
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
11 avril 2008 à 11:07
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 ?
0
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.
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
11 avril 2008 à 18:44
re,

si tu as une erreur du serveur Apache, idem avec la ligne de code incriminée plus la ligne avant et la ligne après.

si c'est une 'PARSE ERROR' ce n'est pas MySQL mais Apache, surement avant d'envoyer la requête.

à plus.
0

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.
0
Dalida Messages postés 6728 Date d'inscription mardi 14 mai 2002 Statut Contributeur Dernière intervention 11 janvier 2016 921
12 avril 2008 à 12:59
salut,

ah !!!

il faut utiliser la bonne syntaxe MySQL. à priori, il doit falloir mettre tes termes entre guillemets pour qu'il recherche la phrase au lieu des mots.

je ne retrouve pas ce que je veux dans le manuel…
0