Aller au contenu

Moteur de recherche php sur bdd


Sujets conseillés

Posté

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. :fou::fou:

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

Posté

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

Posté

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. :huh:

voila

Posté

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

Posté (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 :blink: Aucun résultat ne correspond aux termes de votre recherche.

Modifié par kevin
Posté

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

Posté

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

Posté

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é :)

Posté (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 :blush:

et qui se trouve dans ma bdd.

www.altivue.com/site/sanstitre.jpg

Modifié par kevin
Posté

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?

Posté (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

:gueule::gueule:

Cette requete fonctionne : SELECT * FROM `photo` WHERE mot1='coucou'

Celle la aussi : SELECT * FROM `photo` WHERE mot1 LIKE 'coucou'

Modifié par kevin
Posté

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

Posté (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 :fete:

le probleme venait de :`photo`

et de : 'mot1'

Ma page ne me renvoi plus aucun resultats mais : - :evil:

je vois le bout du tunnel

merci portekoi :thumbup:

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 B)

Modifié par kevin
Posté
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. :fou:  :fou:

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

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

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...