Besoin d'aide avec la claude LIKE

Eléphant du PHP | 331 Messages

21 août 2009, 17:52

Bonjour,

j'ai besoin de votre aide pour une requete de recherche

Je dois faire un petit formulaire sur le site dune entreprise d'autobus scolaire

Les parents des élèves y inscriront dans un champ le nom de l'élève et en cliquant envoyer la requete affichera l'heure et le lieu d'embarquement de l'élève

Les donnée proviennent de la direction scolaire dans un fichier excel que jai importer

mon problème est que ma requete fonctionne que si jinscrie le nom de l'élève comme il est dans la bd

1- voici ma requete:

Code : Tout sélectionner

$sql=mysql_query("select * from horaire_bus where nom_eleve LIKE '%".$_POST["nom_eleve"]."%' ") or die("Impossible d'ouvrir la table"); while ($category=mysql_fetch_array($sql)) { echo "<P>".$category["nom_eleve"]."</P>"; }
dans la bd le nom et le prénom sont dans le même champ ... séparé par une virgule

example;

Code : Tout sélectionner

Duval, Mireille Duval, Jean-Michel Duchesne, Sindy Dallaire Yohan Larochelle, Laurence Boutin, Jérémie
Comment puis-je faire en sorte que peu importe que l'utilisateur tape: Duval, Mireille ou Duval Mireille ou duval mireille ou Mireille Duval ou mireille duval

Merci!

ViPHP
ViPHP | 1136 Messages

21 août 2009, 18:09

Salut ,

Peux tu modifier le moteur de stockage de ta table ?

si oui , je te conseille de regarder du coté de FULL TEXT comme présenté ici .

Sinon , il te faut découper la chaine entré par l'utilisateur , et concaténer plusieurs like %..% avec OR sur les champs concerné .. c'est assez lourds mais ca fonctionne bien .

Good luck ,

Ch.

Eléphant du PHP | 331 Messages

21 août 2009, 22:41

J'ai fais se que tu mas suggéré

avec fulltext et mach sa fonctionne au niveau du champ nom_eleve ..... sauf que si je recherche laurie gagnon .... sa me sort aussi tout les autres personne qui ont le nom gagnon

jai donc mis un filtre WHERE en utilisant le numéro de téléphone

J'ai maintenant un résultat unique

Maintenant, jai besoin d'aide pour finaliser .cela dans le sens que ....

au Québec la conventionpour écrire les numéro de téléphone est comme ceci 275-5874

la requete fonctionne avec 275-5874 ou 275 5874

maintenant, il est clait pour moi que plusieurs personnes prendront le racourci d'écrire tout ça collé comme 2755874

Comment puis-je réglé ça?

Voici mon code:

Code : Tout sélectionner

$sql=mysql_query("SELECT * FROM horaire_bus2 WHERE MATCH (nom_eleve) AGAINST ('".$_POST["nom_eleve"]."') AND MATCH (telephone) AGAINST ('".$_POST["telephone"]."')");
Merci

ViPHP
ViPHP | 1136 Messages

22 août 2009, 08:47

Il te faut donc vérifier les numéros saisies , pour uniformiser tes données ,

voici un exemple :
$num = "222566545";

//recherche si le num comporte un - ou un espace
if(!preg_match("/[-]|\s/",$num)){

    //pas de séparateur trouvé , on scinde la chaine
    $num_split  =   array();
    $num_split  =   (preg_split ( "/(^[0-9]{3})/" , $num , -1 ,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY));
    $num    =   implode("-", $num_split);

}else{

    //au cas ou c'est un espace , on le remplace
    $num    =   str_replace(" ", "-", $num);

}
//affiche le numéro normaliser "222-566545"
echo $num;

ViPHP
AB
ViPHP | 5818 Messages

22 août 2009, 14:34

ça me rappelle un vieux proverbe : "comme on fait son lit, on se couche" :)