recherche par approche...!

Eléphant du PHP | 450 Messages

03 juin 2005, 16:52

Bonjour vous tous , j'ais un petit probleme qui me fai m'arrachez les cheveux
et j'aurais eu besoin de votre aide..

Je vais vous expliquer par un exemple quel est mon probleme(trop de mal a l'expliquer par ecrit )

voila
lorsque je recherche une formule d'un produit par exemple C3CL6 j'ais tout les resultat contenant C3CL6 exemple : C3CL6H9 , C3CL6O3 etc...

hors ce que j'aimerais faire c'est que si je marque dans ma barre de recherche : "C3 O3" je puisse obtenir le resultat C3CL6O3.
hors je n'y arrive pas ...

je vous copie mon code de formulaire

Code : Tout sélectionner

<center><table width="50%"> <!-- On declare le formulaire --> <form method="POST" action='truc4.php' <!-- Le champs à remplir par le visiteur --> <tr><td><input type="text" name="motsclef"></td> <td><select name="methode"> <option value="nom">Par nom</option> <option value="reference">Par reference</option> <option value="formule">Par forumule brute</option> <option value="numero_cass">Par numero de CAS</option> </select> </td></tr> <tr><td><input type="submit" value="Rechercher"></td></tr> </form></table></center>
et ici ma requete

Code : Tout sélectionner

$motsclef=$_POST['motsclef']; $methode = $_POST['methode']; $motsclef = explode(" ",$motsclef); $nbr_mots = count($motsclef); $var1 = 'nom'; $var2 = 'reference'; $var3 = 'formule'; $var4 = 'numero_cass'; $select = 'SELECT count(nom) FROM produit2'; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); $row = mysql_fetch_row($result); $total = $row[0]; $select="SELECT nom,formule,reference,disponibilite,localisation,quantite,numero_cass FROM produit2"; if (isset($_POST['methode']) && $_POST['methode'] == $var1){ $select .= " WHERE ".$_POST['methode']." LIKE '%".$_POST['motsclef']."%'"; } if (isset($_POST['methode']) && $_POST['methode'] == $var3){ $select .= " WHERE ".$_POST['methode']." LIKE '%".$_POST['motsclef']."%'"; } if (isset($_POST['methode']) && $_POST['methode'] == $var2){ $select .= " WHERE ".$_POST['methode']." = ".$_POST['motsclef'].""; } if (isset($_POST['methode']) && $_POST['methode'] == $var4){ $select .= " WHERE ".$_POST['methode']." = ".$_POST['motsclef'].""; } $select .= " ORDER BY nom"; $select .= " ASC limit ".$limite.','.$nombre; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
si quelqu'un a une idée je susi preneur merci

Mammouth du PHP | 19672 Messages

03 juin 2005, 17:19

Dans ce cas, il faut construire dynamiquement ta requête avec plusieurs clauses WHERE possible s'il y a plusieurs mots clés de saisis.

Tu as déjà un tableau fait avec explode(). Tu peux maintenant construire ta requête comme ceci:
    $select2 .= " WHERE ";
    for($i=0; $i < $nbr_mots; $i++)
    {
        if($i < ($nbr_mots - 1))
        {
            $select2 .= $methode." LIKE '%".$motsclefs[$i]."%' OR ";
        }
        else
        {
            $select2 .= $methode." LIKE '%".$motsclefs[$i]."%'";
        }
    }
Attention cependant: tu vas peut-être remarquer que j'utilise $motsclefs au lieu de motsclef C'est voulu et j'ai un peu modifié le schéma en renommant cette variable pour garder l'originale disponible dans son état.

Mais l'idée générale reste la même.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 450 Messages

03 juin 2005, 17:30

daccord merci j'essaille de suite :)

Eléphant du PHP | 450 Messages

06 juin 2005, 09:35

Apres moult essais .. sa marche pas!!
pouquoi dois je construire une seconde requete?? je ne peu pas imbliqué la nouvelle condition if dans la premiere??

Code : Tout sélectionner

$motsclef=$_POST['motsclef']; $methode = $_POST['methode']; $motsclef = explode(" ",$motsclef); $nbr_mots = count($motsclef); $var1 = 'nom'; $var2 = 'reference'; $var3 = 'formule'; $var4 = 'numero_cass'; $select = 'SELECT count(nom) FROM produit2'; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); $row = mysql_fetch_row($result); $total = $row[0]; $select="SELECT nom,formule,reference,disponibilite,localisation,quantite,numero_cass FROM produit2"; if (isset($_POST['methode']) && $_POST['methode'] == $var1){ $select .= " WHERE ".$_POST['methode']." LIKE '%".$_POST['motsclef']."%'"; } if (isset($_POST['methode']) && $_POST['methode'] == $var3){ $select .= " WHERE ".$_POST['methode']." LIKE '%".$_POST['motsclef']."%'"; } if (isset($_POST['methode']) && $_POST['methode'] == $var2){ $select .= " WHERE ".$_POST['methode']." = ".$_POST['motsclef'].""; } if (isset($_POST['methode']) && $_POST['methode'] == $var4){ $select .= " WHERE ".$_POST['methode']." = ".$_POST['motsclef'].""; } $select .= " ORDER BY nom"; $select .= " ASC limit ".$limite.','.$nombre; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() ); $str_requete = "SELECT * FROM produit2 ASC limit ".$limite.','.$nombre; $result = mysql_query($select,$link) or die ('Erreur2 : '.mysql_error() ); $nb = mysql_num_rows($result); echo "nombre de produit sur page =>".$nb; $select2 .= " WHERE "; for($i=0; $i < $nbr_mots; $i++) { if($i < ($nbr_mots - 1)) { $select2 .= $methode." LIKE '%".$motsclef[$i]."%' OR "; } else { $select2 .= $methode." LIKE '%".$motsclef[$i]."%'"; } }

Eléphant du PHP | 450 Messages

06 juin 2005, 10:33

C'est bon sa fonctionne
merci a cyrano ;)

Code : Tout sélectionner

$select="SELECT nom,formule,reference,disponibilite,localisation,quantite,numero_cass FROM produit2"; if (isset($_POST['methode']) && $_POST['methode'] == $var1){ $select .= " WHERE ".$_POST['methode']." LIKE '%".$_POST['motsclef']."%'"; } if (isset($_POST['methode']) && $_POST['methode'] == $var3){ $select .= " WHERE "; for($i=0; $i < $nbr_mots; $i++) { if($i < ($nbr_mots - 1)) { $select .= $methode." LIKE '%".$motsclef[$i]."%' AND "; } else { $select .= $methode." LIKE '%".$motsclef[$i]."%'"; } } } if (isset($_POST['methode']) && $_POST['methode'] == $var2){ $select .= " WHERE ".$_POST['methode']." = ".$_POST['motsclef'].""; } if (isset($_POST['methode']) && $_POST['methode'] == $var4){ $select .= " WHERE ".$_POST['methode']." = ".$_POST['motsclef'].""; } $select .= " ORDER BY nom"; $select .= " ASC limit ".$limite.','.$nombre; $result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );