kevin Posté 1 Septembre 2005 Posté 1 Septembre 2005 Salut, J'ai besoin d'un petit coup de main pour la création d'un moteur de recherche sur une base de donnée, mon objectif etant d'obtenir un champ de recherche qui permettrait l'affichage de photos stockées ,avec des mots clé, dans la bdd. Voici mon code : <?php $Host="localhost"; $Login="******"; $Password="******"; $Base="******"; mysql_connect($Host,$Login,$Password) or die("<p align='justify' class='bodytext'><font size='2' face='Verdana, Arial, Helvetica, sans-serif'><strong>Connexion Au Serveur Impossible : Le serveur est surchargé veuillez revenir plus tard.</strong></font></p>"); mysql_select_db($Base); $Recherche = $_POST['Recherche']; if($Recherche=="") { echo "Vous devez taper une recherche."; exit; } $requete = mysql_query("SELECT chemin FROM photo WHERE 'mot1' LIKE '%$Recherche%' OR 'mot2' LIKE '%$Recherche%'"); if(!$requete) die('Une erreur s\'est produite lors de l\'exécution de la requête MySQL...'); if(mysql_num_rows($requete) == 0){ echo 'Aucun résultat ne correspond aux termes de votre recherche.'; } while($B = mysql_fetch_array($requete)){ echo "$B[mot1] - $B[mot2]"; } mysql_close(); ?> Et nous arrivons au probleme : J'ai toujours : "Aucun résultat ne correspond aux termes de votre recherche" comme resultat. Les photos sont stockées dans la table photo et je selectionne "chemin" pour avoir l'affichage de la photo. Merci de votre aide j'espere avoir été clair
Portekoi Posté 1 Septembre 2005 Posté 1 Septembre 2005 Bonjour, As tu affiché la requête? Si oui, lors de son exécution dans phpmyadmin, fonctionne t elle? Que contient la variable $recherche? N'a t elle pas un espace? Portekoi
kevin Posté 1 Septembre 2005 Auteur Posté 1 Septembre 2005 J'ai effectué la requete dans phpmyadmin et j'obtient : Votre requête SQL a été exécutée avec succès requête SQL : SELECT chemin FROM photo WHERE 'mot1' LIKE '%$Recherche%' OR 'mot2' LIKE '%$Recherche%' LIMIT 0, 30 La variable $Recherche contient le champ Recherche rempli lors de la saisi du critère de recherche. voila
Portekoi Posté 1 Septembre 2005 Posté 1 Septembre 2005 Nan ce n'est pas bon. Tu n'as aucun résultat car pour mysql, $recherche n'est pas une variable mais une valeur. C'est à dire qu'il va chercher tout ce qui contient '$recherche' textuellement. Essaie ceci et dis moi ce que ca donne : SELECT chemin FROM photo WHERE 'mot1' LIKE '%a%' OR 'mot2' LIKE '%a%' LIMIT 0, 30 En dessous de ceci dans ton code : $requete = mysql_query("SELECT chemin FROM photo WHERE 'mot1' LIKE '%$Recherche%' OR 'mot2' LIKE '%$Recherche%'"); rajoute ceci : echo $requete et fais un copier/coller pour voir Portekoi
kevin Posté 1 Septembre 2005 Auteur Posté 1 Septembre 2005 (modifié) Donc ca doit faire ca comme code ? $requete = mysql_query("SELECT chemin FROM photo WHERE 'mot1' LIKE '%a%' OR 'mot2' LIKE '%a%' LIMIT 0, 30'"); echo $requete if(!$requete) die('Une erreur s\'est produite lors de l\'exécution de la requête MySQL...'); if(mysql_num_rows($requete) == 0) echo 'Aucun résultat ne correspond aux termes de votre recherche.'; while($B = mysql_fetch_array($requete)){ echo "$B[mot1] - $B[mot2]"; } mysql_close(); ?> merci de ton aide j'obtient Resource id #5 Aucun résultat ne correspond aux termes de votre recherche. Modifié 1 Septembre 2005 par kevin
Portekoi Posté 1 Septembre 2005 Posté 1 Septembre 2005 Non non non. Je recommence Dans phpmyadmin, tu cliques sur 'SQL'. Là tu mets cette requete : SELECT chemin FROM photo WHERE 'mot1' LIKE '%a%' OR 'mot2' LIKE '%a%' LIMIT 0, 30' et tu me dis s'il retourne des résultats. ---------------------------------------------------------------------------------------- Dans ton code tu laisse la requete comme elle était, c'est à dire : $requete = mysql_query("SELECT chemin FROM photo WHERE 'mot1' LIKE '%$Recherche%' OR 'mot2' LIKE '%$Recherche%'"); Et en dessous tu mets : echo $requete; Vala vala
kevin Posté 1 Septembre 2005 Auteur Posté 1 Septembre 2005 Dans phpmyadmin, j'obtient la meme chose que tout a l heure."la requete SQL a été exécutée avec succès" Et le echo m'affiche "ressource id#5" Merci pour ta patience
Portekoi Posté 1 Septembre 2005 Posté 1 Septembre 2005 Ok, à la place de echo $requete; Tu mets ceci : Echo "SELECT chemin FROM photo WHERE 'mot1' LIKE '%$Recherche%' OR 'mot2' LIKE '%$Recherche%'"; Et tu me fais un copier/coller de ce qui est affiché
kevin Posté 1 Septembre 2005 Auteur Posté 1 Septembre 2005 (modifié) SELECT chemin FROM photo WHERE 'mot1' LIKE '%coucou%' OR 'mot2' LIKE '%coucou%'Aucun résultat ne correspond aux termes de votre recherche. coucou etant le mot que je tape en recherche et qui se trouve dans ma bdd. www.altivue.com/site/sanstitre.jpg Modifié 1 Septembre 2005 par kevin
Portekoi Posté 1 Septembre 2005 Posté 1 Septembre 2005 Donc tu a bien, dans ton champs mot1, une valeur 'coucou'? Essaie cette requête dans mysql : SELECT chemin FROM photo WHERE 'mot1' LIKE '%coucou%' OR 'mot2' LIKE '%coucou%' Y a t il un résultat?
kevin Posté 1 Septembre 2005 Auteur Posté 1 Septembre 2005 (modifié) Toujours pareil, requete effectué avec succes mais rien qui s'affiche, le prob vient peut etre de ma bdd? Dans le mess que j ai edité il y a l'url d'une photo, avec coucou dans mot1. J'ai testé avec cette requete : SELECT chemin FROM photo WHERE 'mot1' LIKE 'coucou' et tjs pas de reponse alors que select * from photo me renvoi mes enregistrements Cette requete fonctionne : SELECT * FROM `photo` WHERE mot1='coucou' Celle la aussi : SELECT * FROM `photo` WHERE mot1 LIKE 'coucou' Modifié 1 Septembre 2005 par kevin
Portekoi Posté 1 Septembre 2005 Posté 1 Septembre 2005 Si celle ci fonctionne : SELECT * FROM `photo` WHERE mot1 LIKE 'coucou' Celle la fonctionne obligatoirement : SELECT * FROM `photo` WHERE mot1 LIKE '%coucou%' Re-essaie, sinon, tu as un problème sur ta table....
kevin Posté 1 Septembre 2005 Auteur Posté 1 Septembre 2005 (modifié) Alors y a du nouveau : SELECT chemin FROM `photo` WHERE mot1 LIKE '%coucou%' OR mot2 LIKE '%coucou%' cette requete me renvoi le bon resultat dans phpmyadmin le probleme venait de :`photo` et de : 'mot1' Ma page ne me renvoi plus aucun resultats mais : - je vois le bout du tunnel merci portekoi Par contre dernier petit truc, je voudrais donc afficher simplement les images que j 'obtient dans $requete sur ma page. Et la ce serai parfait Modifié 1 Septembre 2005 par kevin
Portekoi Posté 1 Septembre 2005 Posté 1 Septembre 2005 <img src="<?=$chemin?>" alt="texte" /> Il faut $chemin contiennet le chemin ET le nom de la photo bien évidement
loufoque Posté 1 Septembre 2005 Posté 1 Septembre 2005 Utiliser LIKE pour faire de la recherche c'est vraiment nul. Utilise plutôt les recherches en texte entier, pourquoi pas booléennes si tu veux une syntaxe à la google.
Verticrawl Posté 1 Septembre 2005 Posté 1 Septembre 2005 Salut, J'ai besoin d'un petit coup de main pour la création d'un moteur de recherche sur une base de donnée, mon objectif etant d'obtenir un champ de recherche qui permettrait l'affichage de photos stockées ,avec des mots clé, dans la bdd. Voici mon code : <?php $Host="localhost"; $Login="******"; $Password="******"; $Base="******"; mysql_connect($Host,$Login,$Password) or die("<p align='justify' class='bodytext'><font size='2' face='Verdana, Arial, Helvetica, sans-serif'><strong>Connexion Au Serveur Impossible : Le serveur est surchargé veuillez revenir plus tard.</strong></font></p>"); mysql_select_db($Base); $Recherche = $_POST['Recherche']; if($Recherche=="") { echo "Vous devez taper une recherche."; exit; } $requete = mysql_query("SELECT chemin FROM photo WHERE 'mot1' LIKE '%$Recherche%' OR 'mot2' LIKE '%$Recherche%'"); if(!$requete) die('Une erreur s\'est produite lors de l\'exécution de la requête MySQL...'); if(mysql_num_rows($requete) == 0){ echo 'Aucun résultat ne correspond aux termes de votre recherche.'; } while($B = mysql_fetch_array($requete)){ echo "$B[mot1] - $B[mot2]"; } mysql_close(); ?> Et nous arrivons au probleme : J'ai toujours : "Aucun résultat ne correspond aux termes de votre recherche" comme resultat. Les photos sont stockées dans la table photo et je selectionne "chemin" pour avoir l'affichage de la photo. Merci de votre aide j'espere avoir été clair <{POST_SNAPBACK}> ------------ Bonjour, Vous venez de toucher du doigt le probleme principal de l'indexation et des moteurs de recherche : exemple : recherche sur le mot "transport" dans votre base vous obtiendrez - tranports - transporteur - transporter vous utilisez le jocker (%)...ce qui rend la chose non pertinente... La bonne solution (pour obtenir qque chose d'a peu pret correct) : 1 table contenant vos images nomme [iMAGE] 1 table contenant le nro image + le mot [KEYWORDS] 2 requetes : - select nro image from KEYWORDS group by nro image where mot="transport" qui me donne X,Y,Z nro image (uniques)... - select from IMAGE where nro image in (X,Y,Z) Bref : Pour obtenir un minimum de pertinence vous allez de voir ajouter le ranking (table KEYWORDS) et spliter vos phrases en X mots...la belle affaire. Bravo, vous êtes entrée dans l'indexation plein texte...Il vous reste 5 ans pour obtenir le niveau des moteurs actuels...mais pour une utilisation perso cela reste tres satisfaisant Si vous cherchez de l'info sur l'indexation documentaire et les moteurs de recherche (full-text, taxinomie, troncarue et autre moteur ... rendez vous http://www.verticrawl.com , le moteur de recherche en mode application service provider pour web, intranet, groupware .. Bon courage
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant