Créer un moteur de recherche

Eléphant du PHP | 287 Messages

16 avr. 2009, 09:50

Bonjour,
Je voudrais créer un moteur de recherche sur mon site qui est en PHP.
Il me semble qu'il faut utiliser la fonction
SELECT nom FROM la_table WHERE nom LIKE '%cequejecherche%'
Maintenant je pars de zéro
Quelqu'un peut-il m'aider ?
Merci d'avance

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

16 avr. 2009, 10:06

Ce que tu montres n'est pas une fonction, mais une requête SQL. ;)

il faut que tu exécutes cette requête sur ta base (en l'occurrence, sur la table "la_table")
en indiquant à la place du libellé cequejecherche la valeur demandée par l'utilisateur.
$recherche = 'Duval'; // ici, je mets le nom en dur, pour l'exemple
$req_01 = "SELECT nom FROM la_table WHERE nom = '".$recherche ."'";       // recherche exacte
$req_02 = "SELECT nom FROM la_table WHERE nom LIKE '%".$recherche ."%'";  // recherche approchante
// exécution de la requête, etc...
Selon le type de recherche que tu souhaites faire (exacte ou approchante),
les résultats seront plus ou moins étendus.

Résultats avec la requête 1 : Duval
Résultats avec la requête 2 : Duval, Duvallet, Duvallois, Ledormeur-Duval, Jaipris-Duvalium,...

ViPHP
ViPHP | 4039 Messages

16 avr. 2009, 10:38

Pour faire vraiment bien, je te conseille d'étudier les possibilités de recherche full-text de MySQL, c'est bien plus efficace et sérieux:
http://dev.mysql.com/doc/refman/5.0/fr/ ... earch.html
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

16 avr. 2009, 10:46

Pour faire vraiment bien, (...), c'est bien plus efficace et sérieux.
Berze, considère qu'on est fâchés. |(X

Eléphant du PHP | 287 Messages

16 avr. 2009, 10:51

Bon j'ai un résultat qui s'affiche, mais que sur une partie de ma requête
Je cherche dans 2 champs de ma table :
<html>
<form method="post" action=""> 
Recherche par mot clef : 
  <input type="text" name="recherche">
<input type="submit" value="Rechercher"> 
</form>
</html> <?php

// Récupère la variable
mysql_connect("localhost", "root", "");
mysql_select_db('voyagez_vol');
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';
// la requete mysql

$sql = mysql_query("SELECT ville,commentaire FROM webcam WHERE commentaire LIKE '%".$recherche ."%'") or die (mysql_error());

// affichage du résultat
while(list($commentaire)=mysql_fetch_array($sql)){
echo 'Resultat de la recherche: '.$commentaire.'  <br />';
}
?> 

nasdrovia70
Invité n'ayant pas de compte PHPfrance

16 avr. 2009, 10:53

Re bonjour, j'aimerai créé une recherche multicritère sur une table et que chaque champs ne sois pas obligatoire, est ce qu' une âme charitable pourrai me montrer un petit script simple de préfèrence car je ne suis pas un expert, sur 2 ou 3 critère que je l'adapte a ma table merci d'avance.

Eléphant du PHP | 287 Messages

16 avr. 2009, 11:20

A titre perso pour le moment je cherche pour fair une recherce sur une seule table. Après on verra sur toute les tables de ma bdd.

ViPHP
ViPHP | 4039 Messages

16 avr. 2009, 12:36

Pour faire vraiment bien, (...), c'est bien plus efficace et sérieux.
Berze, considère qu'on est fâchés. |(X
Mais.. je..
pour une fois que je prends le temps de répondre.. 40 minutes il m'a fallu..

Image
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Administrateur PHPfrance
Administrateur PHPfrance | 11457 Messages

16 avr. 2009, 13:55

Allez, je ne t'en veux pas.

Pour te le prouver, viens, je t'offre un verre... :twisted:

Image

ViPHP
ViPHP | 4039 Messages

16 avr. 2009, 14:22

M.err..ci.. csstunp.. peu ser... serré...

Image


Tout pardonné ?? Fête !!
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Eléphant du PHP | 254 Messages

16 avr. 2009, 14:27

mdr :p

Romuald pour vérifier ta requête affiche la a l'écran et exécute la sous myadmin, ca te permettra de vérifier déjà qu'elle est bien générée

Ensuite colle nous ta requête et explicite nous un peu ca
Bon j'ai un résultat qui s'affiche, mais que sur une partie de ma requête

Eléphant du PHP | 287 Messages

17 avr. 2009, 11:33

Mon problème est en partie résolu.
Mes résultats s'affichent, parce qu'au lieu de mettre AND j'ai mis OR
<html>
<form method="post" action=""> 
Recherche par mot clef : 
  <input type="text" name="recherche">
<input type="submit" value="Rechercher"> 
</form>
</html>
<br />
<?php

// Récupère la variable
mysql_connect("localhost", "root", "");
mysql_select_db('voyagez_vol');
$recherche = isset($_POST['recherche']) ? $_POST['recherche'] : '';
// la requete mysql

$sql = mysql_query("SELECT * FROM webcam WHERE ville LIKE '%".$recherche ."%' OR commentaire LIKE '%".$recherche ."%'") or die (mysql_error());

echo "Résultat(s) de votre recherche :<br />";

// affichage du résultat
while($row=mysql_fetch_array($sql)){
echo "".$row['ville']." - ".$row['commentaire']."<br />";
}

?>
Je voudrais rajouter 2 paramètres dans mon résultat :
- Le nombre de réponse correspondant à la recherche
- Trier les résultats par pertinence

Merci d votre aide

Mammouth du PHP | 693 Messages

17 avr. 2009, 11:53

Le nombre de résultat peut être facilement obtenu avec mysql_num_rows().

Quand à la pertinence, c'est un vaste problème. Il faut d'abord réféchir sur quels critère un résultat est jugé pertinent, puis ensuite les implémenter.