problème moteur de recherche

Eléphanteau du PHP | 40 Messages

10 mars 2006, 17:24

Bonjour, :arrow: voila j'ai 1 souci avec mon moteur de recherche. En effet, il n'est pas performant du tout, je ne sais pas si c'est un probleme de code, de requete ou autre.

:arrow: En faite dans mon select (liste déroulante ) il m'affiche toute les fiches contenu de ma bdd, alors qu'il ne devrait afficher que celle correspondant a ma saisie et donc requete.

if(isset($search) && trim($search) != '') 
					{
					$search = str_replace('+', ' ', trim($search));
					$search = str_replace('\'', ' ', $search);
					$search = str_replace(',', ' ', $search);
					$search = str_replace(':', ' ', $search);
					$tabsearch = explode(' ' , $search );
					//on compte le nombre de mots
					$nbsearch = count($tabsearch);
					//on prépare la requête SQL.
					if(!empty($tabsearch[0]))
						{
						$sql = "select * 
								from fiches
								where numFiche ='".$tabsearch[0]."' 
								or nomFiche like %'".$tabsearch[0]."'%
								or datecreaFiche ='".$tabsearch[0]."'
								or loginF ='".$tabsearch[0]."'
								or descriptifFiche like %'".$tabsearch[0]."'%
								or resolutionFiche like %'".$tabsearch[0]."'%
								or nomProjet ='".$search."'
								or nbhresolution = '".$tabsearch[0]."'
								or enseigne = '".$tabsearch[0]."'
								or privee ='".$tabsearch[0]."'
								or emailF = '".$tabsearch[0]."'";
						}
							// on boucle pour integrer tous les mots dans la requête
							$sql = "select * from fiches where 1"; 
							for ($i = 0; $i < $nb; $i++)
								{ 
								if(!empty($tabsearch[$i]))
									{
									$sql .= " AND ( numFiche='".$tabsearch[$i]."'
									or nomFiche like %'".$tabsearch[$i]."'%
									or datecreaFiche ='".$tabsearch[$i]."'
									or loginF ='".$tabsearch[$i]."'
									or descriptifFiche like %'".$tabsearch[$i]."'%
									or resolutionFiche like %'".$tabsearch[$i]."'%
									or nomProjet '".$search."'
									or nbhresolution = '".$tabsearch[$i]."'
									or enseigne = '".$tabsearch[$i]."'
									or privee ='".$tabsearch[$i]."' 
									or emailF = '".$tabsearch[$i]."' )"; 
									}
								}
							// on execute la requête SQL.
							$result = mysql_query($sql);
							if ($result)
								{
								if (mysql_num_rows($result) == 0) 
									{
									// Si il n'y a pas de résultats
									echo '<script language=javascript> alert ("Pas de résultat");</script>';
									echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="accueil.php" </SCRIPT>';
									exit;
									}else{
										echo "<select name='searchselection'>";
										while($datafichiers = mysql_fetch_assoc($result)) 
											{ 
											 echo '<option>'.$datafichiers['nomFiche'].'</option>'; 
											 echo '<br>'; 
											}
									echo'</select>';
										}
								}
					mysql_free_result($result);
					}else{	
						echo '<script language=javascript> alert ("Indiquez un mot clé pour effectuer une recherche");</script>';
						echo '<SCRIPT LANGUAGE="JavaScript">document.location.href="accueil.php" </SCRIPT>';
						exit;
						}
					?>

Mammouth du PHP | 19672 Messages

10 mars 2006, 21:52

Simplement en alignant correctement ton script, tu noterais sans doute une erreur ou deux.

À la ligne 29, tu écrases la valeur de $sql : la création de la requête qui précède ne sert donc strictement à rien et n'est jamais exécutée;

Ensuite, tu fais des choses comme

Code : Tout sélectionner

... OR champ like %'". $variable ."'% ...
Au lieu de

Code : Tout sélectionner

... OR champ like '%". $variable ."%' ...
Et dans la seconde requête, dans la boucle, il manque aussi un "=".
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 40 Messages

14 mars 2006, 12:27

oui j'ai corrigé tout ca, par contre il m'affiche tout les champs dans ma liste déroulante :?
					$sql = "select * from fiches where 1" ;
					for ($i = 0; $i < $nbsearch; $i++) 
                        { 
                        if(!empty($tabsearch[$i])) 
                        { 
      				$sql .= " AND ( 
            		numFiche='".$tabsearch[$i]."' 
					or nomFiche like '%".$tabsearch[$i]."%' 
            		or datecreaFiche ='".$tabsearch[$i]."' 
					or loginF ='".$tabsearch[$i]."' 
                    or descriptifFiche like '%".$tabsearch[$i]."%' 
                    or resolutionFiche like '%".$tabsearch[$i]."%' 
                    or nomProjet ='".$tabsearch[$i]."' 
                    or nbhresolution = '".$tabsearch[$i]."' 
                    or enseigne = '".$tabsearch[$i]."' 
                    or privee ='".$tabsearch[$i]."' 
                    or emailF = '".$tabsearch[$i]."' )"; 
                        } 
					}