Fonction de recherche en PHP

Fonction de recherche en PHP - PHP - Programmation

Marsh Posté le 01-05-2006 à 16:12:16    

Bonjours :
J’ai rencontré un petit problème lors de la création de mon site sur la Formule 1 en fait j’aimerais intégrer une fonction de recherche sur mon site.  :heink:  
Recherche qui s’effectuerait dans une base de donnée qui contient les news. La recherche serait faite à partir de l’entrée des mots de l’utilisateur dans un champ texte d’un formulaire. J’aimerais donc créer un petit programme qui va chercher dans la base de donnée (ou jeu d’enregistrement) tous les titres des news qui contiennent un ou plusieurs mots rentrés par l’utilisateur. La variable du champ de recherche et en mode GET pour précision. Si quelqu’un connaît un script de recherche facile pour php merci de m’aider. Ou alors si vous êtes bons en langage PHP car je vois bien l’idée des moteurs de recherche dans une base de donnée php mais je ne sais pas écrire le script.
Merci d’avance pour les connaisseurs de php mysql qui pourrait m’aider dans la création d’un moteur de recherche pour mon site.
 
Petite précision le classement des news se ferait non pas par pertinence (trop complexe) mais par date de création des news les plus récente devant donc. :)

Message cité 1 fois
Message édité par otagun le 01-05-2006 à 17:02:22
Reply

Marsh Posté le 01-05-2006 à 16:12:16   

Reply

Marsh Posté le 01-05-2006 à 18:21:50    

otagun a écrit :

Bonjours :
J’ai rencontré un petit problème lors de la création de mon site sur la Formule 1 en fait j’aimerais intégrer une fonction de recherche sur mon site.  :heink:  
Recherche qui s’effectuerait dans une base de donnée qui contient les news. La recherche serait faite à partir de l’entrée des mots de l’utilisateur dans un champ texte d’un formulaire. J’aimerais donc créer un petit programme qui va chercher dans la base de donnée (ou jeu d’enregistrement) tous les titres des news qui contiennent un ou plusieurs mots rentrés par l’utilisateur. La variable du champ de recherche et en mode GET pour précision. Si quelqu’un connaît un script de recherche facile pour php merci de m’aider. Ou alors si vous êtes bons en langage PHP car je vois bien l’idée des moteurs de recherche dans une base de donnée php mais je ne sais pas écrire le script.
Merci d’avance pour les connaisseurs de php mysql qui pourrait m’aider dans la création d’un moteur de recherche pour mon site.
 
Petite précision le classement des news se ferait non pas par pertinence (trop complexe) mais par date de création des news les plus récente devant donc. :)


 
Idée de base
- récupérer chaque mot de ton formulaire
- générer une requête "$requete" contenant "select * from news where titre like '%mot1%' or titre like '%mot2%' or ..." (autant qu'il y a de mots entrés). Tu peux finir ta requête avec "order by colX" pour trier tes résultats sur la colonne "colX"
- tu lances "$result=mysql_query($requete)" => ça te renvoie dans "$result" toutes les lignes de "news" dont le titre contient un des mots entrés
- tu boucles avec "while($lig=mysql_fetch_array($result))" => ca te donnera une boucle avec une ligne par itération
- il te suffit d'afficher $lig["col1"], $lig["col2"], $lig["col3"] pour avoir, pour chaque ligne, les infos prises dans leurs colonnes respectives ("col1" , "col2" et "col3" devant être remplacés par les vrais noms des colonnes de ta table "news" )
- en fin de boucle, tu libères l'espace alloué pour ta requête avec "mysql_free_result($result)


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 01-05-2006 à 19:26:12    

Merci pour tes idées le problémes c'est que je n'ai pas de notion php en fait par exemple je ne sais même pas récupérer les différents mots du formulaire comme tu dis.

Reply

Marsh Posté le 01-05-2006 à 20:06:39    

otagun a écrit :

Merci pour tes idées le problémes c'est que je n'ai pas de notion php en fait par exemple je ne sais même pas récupérer les différents mots du formulaire comme tu dis.


 
Evidemment...
Bon, tu écris une page "essai.html" contenant un formulaire fait ainsi
<HTML>
<HEAD></HEAD>
<BODY>
<FORM method="post" action="result.php">
<INPUT type="text" name="mots">
<INPUT type="submit" value="Envoyer">
</FORM>
</BODY>
</HTML>
 
Ensuite, tu écris ta page "result.php" ainsi
<HTML>
<HEAD></HEAD>
<BODY>
<SCRIPT language="php">
// Récupération des mots venus du formulaire en méthode "post" dans un tableau
$tabMot=explode(" ", $_POST["mots"]);
 
// Affichage de chaque mot
foreach ($tabMot as $mot)
     printf("mot=%s<BR>\n", $mot);
 
</SCRIPT>
</BODY>
</HTML>


---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 01-05-2006 à 20:31:20    

pour les recherches , mettre ton champs en FULLTEXT et utiliser MATCH AGAINST.

Reply

Marsh Posté le 02-05-2006 à 19:06:22    

Merci bon effectivement j'ai essayé comme ceci  d'aprés vos conseils (merci beaucoup) : :wahoo:  

Citation :

<?php
$colname_recherche = "-1";
if (isset($_POST['cherche'])) {
  $recherche=explode(" ", $_POST["cherche"]);
  foreach ($recherche as $colname_recherche);
}
mysql_select_db($database_actu_gof1, $actu_gof1);
$query_recherche = sprintf("SELECT * FROM actu_gof1 WHERE chapeau LIKE '%%%s%%' ORDER BY `timestamp` DESC", $colname_recherche);
$recherche = mysql_query($query_recherche, $actu_gof1) or die(mysql_error());
$row_recherche = mysql_fetch_assoc($recherche);
$totalRows_recherche = mysql_num_rows($recherche);
?>


 
Bon la cela ne fait que séparé les mots et ajouté % entre chacun au début et a la fin.
Le probléme c'est qu'il faut plus que rajouté un % entre les mots par exemple si le titre de la news est :   "Alonso en Forme".  
d'accord je tape "alonso forme" dans mon formulaire sa marche il me trouve la news si je tape :
"forme alonso" la cela ne marche pas .
En fait j'aimerais savoir comment faire pour sélectionner chaque mots indépendamment ?

Reply

Marsh Posté le 02-05-2006 à 20:53:04    

otagun a écrit :

Bon la cela ne fait que séparé les mots et ajouté % entre chacun au début et a la fin.
Le probléme c'est qu'il faut plus que rajouté un % entre les mots par exemple si le titre de la news est :   "Alonso en Forme".  
d'accord je tape "alonso forme" dans mon formulaire sa marche il me trouve la news si je tape :
"forme alonso" la cela ne marche pas .
En fait j'aimerais savoir comment faire pour sélectionner chaque mots indépendamment ?


 
Ben oui, faut générer une chaîne contenant
"chapeau like '%forme%' or chapeau like '%alonzo%'"
 
Ensuite, tu exécutes la requête "select * from actu_gof1 where ".$chaine." ORDER BY..."


<?php  
$colname_recherche = "-1";  
if (isset($_POST['cherche'])) {  
  $tabRecherche=explode(" ", $_POST["cherche"]);
  unset($or);  
  foreach ($tabRecherche as $mot)
  {
      $where.=sprintf("%s chapeau like '%%%s%%'", $or ?"or" :"", $mot);
      $or=true;
  }
 
   mysql_select_db($database_actu_gof1, $actu_gof1);  
   $query_recherche = sprintf("SELECT * FROM actu_gof1 WHERE %s ORDER BY `timestamp` DESC",  $where);  
   $recherche = mysql_query($query_recherche, $actu_gof1) or die(mysql_error());  
   $row_recherche = mysql_fetch_assoc($recherche);  
   $totalRows_recherche = mysql_num_rows($recherche);  
}
?>


Message édité par Sve@r le 02-05-2006 à 20:56:01

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 03-05-2006 à 15:42:58    

Merci Sve@r sa marche :
Je suis content de ton script mais j'aimerais un peu l'améliorer en laisant la possibilité au visiteurs de choisir entre une recherche dans les titres des actus OU une recherche dans les texte des actus. J'ai mis les boutons radio correspondant dans mon formulaire mais je ne sait pas comment traiter les donnés du formulaire pour choisir la categorie texte et non titre. Les boutons sont nommés bouton y'a à deux et il sélectionneront soit titre soit texte comme colonne de la base de donnée. A partir du script déja proposer qu'elle sont les choses à rajouter ? :heink:  
Merci merci beaucoup de votre aide.

Message cité 1 fois
Message édité par otagun le 03-05-2006 à 15:44:11
Reply

Marsh Posté le 06-05-2006 à 15:41:48    

Aucune réponse pourtant cela semble pas bien compliquer  :cry:  :cry:  :cry:

Reply

Marsh Posté le 06-05-2006 à 22:27:40    

Maintenant que tu as la base, tu peux essayer de comprendre le code et le faire évoluer toi meme ;)

Reply

Marsh Posté le 06-05-2006 à 22:27:40   

Reply

Marsh Posté le 07-05-2006 à 13:14:11    

otagun a écrit :

Merci Sve@r sa marche :
Je suis content de ton script mais j'aimerais un peu l'améliorer en laisant la possibilité au visiteurs de choisir entre une recherche dans les titres des actus OU une recherche dans les texte des actus. J'ai mis les boutons radio correspondant dans mon formulaire mais je ne sait pas comment traiter les donnés du formulaire pour choisir la categorie texte et non titre. Les boutons sont nommés bouton y'a à deux et il sélectionneront soit titre soit texte comme colonne de la base de donnée. A partir du script déja proposer qu'elle sont les choses à rajouter ? :heink:  
Merci merci beaucoup de votre aide.


Ben tu crées une variable "$column" contenant "chapeau" (colonne de titre) ou "texte" (colonne de texte) en fonction de la valeur de ton bouton et tu refais la boucle

foreach ($tabRecherche as $mot)  
{  
    $where.=sprintf("%s %s like '%%%s%%'", $column, $or ?"or" :"", $mot);  
    $or=true;
}


 

otagun a écrit :

Aucune réponse pourtant cela semble pas bien compliquer  :cry:  :cry:  :cry:


Euh, je suis pas H24 sur le forum à attendre qu'on me soumette un pb...
 

energiez a écrit :

Maintenant que tu as la base, tu peux essayer de comprendre le code et le faire évoluer toi meme ;)


C'est vrai que la meilleure personne capable de t'aider est toi-même. En analysant le code et en le comprenant, cela te permettra de le faire évoluer pour qu'il corresponde parfaitement à ton besoin...


Message édité par Sve@r le 07-05-2006 à 13:16:17

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Reply

Marsh Posté le 21-05-2006 à 16:32:04    

Petit probleme cela me dit :
[size=2]You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'like '%ferrari%' ORDER BY `timestamp` DESC' at line 1
[/size]  
Ben j'ai fait comme tu m'as dit apparement y'a une erreur et je voit pas ou

Reply

Marsh Posté le 21-05-2006 à 18:42:39    

C'est quoi ton timestamp? C'est un champs de ta table?


---------------
MZP est de retour
Reply

Marsh Posté le 04-08-2006 à 19:08:04    

Merci pour vos réponse maintenant j'ai résolu le probléme.
Merci a toutes les personnes qui m'ont aidés c'est trés sympa .

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed