Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1165 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Fonction de recherche en PHP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Fonction de recherche en PHP

n°1357223
otagun
http://www.go-f1.com Formule 1
Posté le 01-05-2006 à 16:12:16  profilanswer
 

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
mood
Publicité
Posté le 01-05-2006 à 16:12:16  profilanswer
 

n°1357279
Sve@r
Posté le 01-05-2006 à 18:21:50  profilanswer
 

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.
n°1357314
otagun
http://www.go-f1.com Formule 1
Posté le 01-05-2006 à 19:26:12  profilanswer
 

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.

n°1357339
Sve@r
Posté le 01-05-2006 à 20:06:39  profilanswer
 

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.
n°1357367
benamoubea​ch
tivuplai
Posté le 01-05-2006 à 20:31:20  profilanswer
 

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

n°1358031
otagun
http://www.go-f1.com Formule 1
Posté le 02-05-2006 à 19:06:22  profilanswer
 

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 ?

n°1358099
Sve@r
Posté le 02-05-2006 à 20:53:04  profilanswer
 

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.
n°1358731
otagun
http://www.go-f1.com Formule 1
Posté le 03-05-2006 à 15:42:58  profilanswer
 

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
n°1360911
otagun
http://www.go-f1.com Formule 1
Posté le 06-05-2006 à 15:41:48  profilanswer
 

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

n°1361036
energiez
Posté le 06-05-2006 à 22:27:40  profilanswer
 

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

mood
Publicité
Posté le 06-05-2006 à 22:27:40  profilanswer
 

n°1361242
Sve@r
Posté le 07-05-2006 à 13:14:11  profilanswer
 

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.
n°1371607
otagun
http://www.go-f1.com Formule 1
Posté le 21-05-2006 à 16:32:04  profilanswer
 

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

n°1371640
cinocks
Posté le 21-05-2006 à 18:42:39  profilanswer
 

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


---------------
MZP est de retour
n°1419977
otagun
http://www.go-f1.com Formule 1
Posté le 04-08-2006 à 19:08:04  profilanswer
 

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 .


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Fonction de recherche en PHP

 

Sujets relatifs
fonction hypot ( ) retourne systématiquement 1 !!!!!commande PHP pas bien !!
[PHP]Tableau à 2 dimensionsPhP et Mysql5
Récupération des données de formulaires via PHPSomme champs via fonction DECALER
problème de recherche sur une tableFonction faire resortir valeur
[PHP]Problème avec fonction de recherche[PHP] Crée une fonction de recherche sur une base MySQL
Plus de sujets relatifs à : Fonction de recherche en PHP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR