recherche par approche...!

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : recherche par approche...!

par castelli » 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() );

par castelli » 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]."%'"; } }

par castelli » 03 juin 2005, 17:30

daccord merci j'essaille de suite :)

par Cyrano » 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.

recherche par approche...!

par castelli » 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