Recherche interne 2 mots

cdurlephp -  
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 :

<!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

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

Bonne continuation.
0
Dalida Messages postés 6728 Date d'inscription   Statut Contributeur Dernière intervention   922
 
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
cdurlephp
 
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   Statut Contributeur Dernière intervention   922
 
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
cdurlephp
 
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   Statut Contributeur Dernière intervention   922
 
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