Moteur de recherche/sql

magicjim Messages postés 116 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 septembre 2005 - 4 févr. 2005 à 13:46
magicjim Messages postés 116 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 septembre 2005 - 6 févr. 2005 à 18:05
Bonjour, je cherche a faire un moteur de recherche qui me permetterai de cherchait dans ma table membres et d'afficher les resultats sur une est mm page :

par exemple je tape dans le moteur de recherche JIMMY,
et la il m'affiche tout les resultats sur la page

a savoir que j'ai plusieurs champs : nom, prenom, speudo, region

je voudrait que le moteur recherche dans ces quatres champs merci

Codialement jimmy

13 réponses

malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
4 févr. 2005 à 13:58
Salut,



pour les moteurs de recherche, on utilise generalement des expressions regulieres. Tu peux aller voir sur ce site :

http://www.expreg.com/



Puis reviens avec un debut de code pour qu'on t'aide :-)

Sinon il doit y avoir plein de scripts pour ca sur ce site.
0
nico1214 Messages postés 37 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 6 mai 2009
4 févr. 2005 à 14:44
Je suis pas sûr qu'il va te tomber tout cuit dans la bouche ton moteur de recherche...

Sinon oui le plus dur c'est pas la BDD mais la gestion des mots entrés et pour ce faire, comme l'a très justement remarqué malalam, il faut utiliser les expressions régulières.

Bon courage
0
magicjim Messages postés 116 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 septembre 2005
4 févr. 2005 à 16:43
je me doute bien qu'il ne va pas me tomber tout cru dans le bec lol,
j'y travaille en ce moment pour essayer dit arriver, j'aurai juste bien voulu un exemple concret pour pouvoir réaliser le mien et a mon gout,
J'ai déja mon formulaire de près :
<form method= "post" action="resultat.php">

Recherche :


</form>
maintenant je travaille sur le résultat :
<?php
// Parametres de connexion à la base de données
include "includes/functions.inc.php";
@mysql_pconnect($BD_serveur, $BD_utilisateur, $BD_motDePasse)
or die("Impossible de se connecter au serveur de bases de données.");
@mysql_select_db($BD_base)
or die("Impossible de se connecter à la base de données.");
// la requette
$sql = "SELECT pseudo,nom,prenom,region FROM table_membres WHERE pseudo AND nom AND prenom AND region LIKE '%$recherche%'";
$result = mysql_query($sql);
while($data = mysql_fetch_array($result))
{
echo "$data['pseudo']
";
echo "$data['nom']
";
echo "$data['prenom']
";
echo "$data['region']
";
}
}
?>
voila je cherche encore
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
4 févr. 2005 à 17:19
re,



ben il faut vraiment que tu traites la valeur saisie dans ton
formulaire avec des expressions regulieres si tu veux un moteur un
minimum performant. Cela va te permettre par exemple, si quelqu'un tape
"Robart", de trouver "Robert", avec un peu de chance ;-)



La tu commances doucement, mais surement, je pense que tu es sur la bonne voie.



Je n'ai pas d'exemple sous la main desole, mais ca doit se trouver sur ce site je pense.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
magicjim Messages postés 116 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 septembre 2005
4 févr. 2005 à 17:25
merci c sympa je cherche , je vais finir pas y arriver apres je le perfectionnerai avec les expression...
0
nico1214 Messages postés 37 Date d'inscription mardi 17 juin 2003 Statut Membre Dernière intervention 6 mai 2009
4 févr. 2005 à 17:28
Ben déjà les champs "Nom" "Prénom" "Région" ne peuvent tous être égaux à $recherche.

Il faut mettre OR à la place des AND dans ta requête.

Ensuite, tu peux par exemple supprimer les mots inférieurs à trois lettres du champ de recherche (imagine : quelqu'un tape une seule lettre, le "e" par exemple, le nombre de résultats que tu vas avoir !!!)

Tu dois gérer aussi les majuscules/minuscules...

Etc...
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 9
4 févr. 2005 à 19:06
Salut,



heu pourquoi les expressions régulières ? les indexs fulltext en mysql sont très performants aussi.



Bon perso voilà une partie du code du moteur de recherche de mon site :



if (isset($_POST['recherche']))

{

$recherche= trim(addslashes($_POST['recherche']));

//$recherche=htmlspecialchars($recherche);



$requete_finale='';

$tab_requete=array();




$tab_requete[0][0]='SELECT
titre,url,MATCH(texte) AGAINST(\''.$recherche.'\') AS pertinence FROM
article WHERE MATCH(texte) AGAINST(\''.$recherche.'\'';

$tab_requete[0][1]='titre,url';



$nb2=count($tab_requete);

//-------------------------------------------------------

//SI COUNT() EST EGAL A UN IL NE FAUT PAS LE DECREMENTER

//-------------------------------------------------------

if($nb2-1==0)

{

$nb=1;

}

else

{

$nb=$nb2-1;

}



//--------------------------------------------------------

//ACTIVE LES OPERATEURS BOOLEENS


//$_POST['bool'] est la valeur (à ON si cochée) d'une checkbox pour
activer les opérateurs booléens

//--------------------------------------------------------

if(isset($_POST['bool']) AND $_POST['bool']=='ON')

{

for($i=0;$i<$nb2;$i++)

{



$tab_requete[$i][0].=' IN BOOLEAN MODE) ORDER BY pertinence DESC';

}

}

//$_POST['limite'] correspond au nombre de résultats à retourner

if(is_numeric($_POST['limite']))

{

for($i=0;$i<$nb2;$i++)

{

$tab_requete[$i][0].=' LIMIT '.$_POST['limite'];

}

}

$mysql->connect('');

for($i=0;$i<$nb2;$i++)

{

$requete=$tab_requete[$i][0];

$mysql->requete($requete,$i);

}

$mysql->deconnect();

//----------------------------------------------------------

//TRAITE LES DONNEES ET AFFICHE LES RESULTATS

//----------------------------------------------------------

for($i=0;$i<$nb2;$i++)

{

//SEPARE LES CHAMPS A GARDER DE LA REQUETE

$champs_a_garder=$tab_requete[$i][1];

$tab_champs=explode(',',$champs_a_garder);



//AFFICHAGE DES RESULTATS DES ARTICLES

if($tab_champs[0]=='titre' AND $tab_champs[1]=='url')

{


echo ' Articles :

';

while($r =$mysql->fetch_array($i))

{



echo '<li>[',$r['url'],'.php ',stripslashes($r['titre']),']</li>';

}

echo '';

}

}

}



après il faut l'adapter pour les différents champs de ta base de données.



a +




Vulgarisation informatique : Entraide, dépannage et vulgarisation informatique

Forum d'entraide informatique (14 catégories)
0
malalam Messages postés 10839 Date d'inscription lundi 24 février 2003 Statut Membre Dernière intervention 2 mars 2010 25
5 févr. 2005 à 10:35
Oui oui, je dis pas que les index fulltext de mysql ne sont pas performants. Disons juste que les regexp permettent un grand controle sur les donnees entrees par l'utilisateur. Mais effectivement, c'est tres faisable en utilisant uniquement du sql, comme pour ton moteur.
0
magicjim Messages postés 116 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 septembre 2005
5 févr. 2005 à 16:43
merci pour vos reponses je continue a chercher tout cela va surment me faire avancer un peu plus vite encore merci a tous.@++
0
magicjim Messages postés 116 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 septembre 2005
5 févr. 2005 à 18:14
Sa y est je viens de reussir mais bon maintenant va falloir que je l'ameliore comme dit nico1214, bon je vous balancerai le code surment demain car la il faut que j'aille travailler encore merci @ tous...
0
magicjim Messages postés 116 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 septembre 2005
6 févr. 2005 à 17:52
Voila le code maintenant ma faudrait limiter a la saisie du mot a rechercher à trois caracteres minimum :
$recherche = $_POST["recherche"];



// la requette
$requete = "SELECT * FROM table_membres WHERE id LIKE '%$recherche%'";
$result = mysql_query($requete);
while($enreg = mysql_fetch_array($result))
{
echo "".$enreg['nom].",

----

,

----

".$enreg['region']."
";


}



voila maintenant va falloir que je lameliore merci @ tous
0
cs_Anthomicro Messages postés 9433 Date d'inscription mardi 9 octobre 2001 Statut Membre Dernière intervention 13 avril 2007 9
6 févr. 2005 à 18:02
Heu tu pourrais rechercher un minimum quand même...



if(strlen($_POST['recherche'])<3)

{

//châine trop petite

}

Vulgarisation informatique : Entraide, dépannage et vulgarisation informatique

Forum d'entraide informatique (14 catégories)
0
magicjim Messages postés 116 Date d'inscription vendredi 6 août 2004 Statut Membre Dernière intervention 22 septembre 2005
6 févr. 2005 à 18:05
salut, je ne t'est pas demander de me donner la reponse, j'informait juste toute les personnes qui m'ont aider mais merci, c'est sympa de ta part bon allez @++
0