IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

recherche avec plusieurs critéres [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 128
    Points : 79
    Points
    79
    Par défaut recherche avec plusieurs critéres
    Salut
    Je voudrais faire une formulaire du recherche qui contient plusieurs champs : textes et listes déroulantes. Le problème est si un visiteur rempli tous les champs ca ne fait aucun souci dans la requête, mais le visiteur peut ne pas remplir tous les champs et comme sa je pense qu'il me faut plusieurs conditions.
    Savez-vous une méthode pour bien réaliser ce moteur de recherche compliqué ?
    Merci d'avance

  2. #2
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 128
    Points : 79
    Points
    79
    Par défaut Ajouter un LIKE dans la requête
    J'ai réussi a faire comme ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    / on récupère les critères sélectionnés
                     extract($_POST);
     
                    $i = 0;
               			$sujet = $_POST['sujet'];
               			$specialite = $_POST['specialite'];
    					$struc = $_POST['struc'] ;
                    // si la variable est présente, on lui affecte une place dans le tableau 'choix[]', qui nous servira ensuite à construire le WHERE de la requête.
                     if(!empty($sujet)) { $choix[$i++] = "titre = '$sujet'"; }
                     if(!empty($specialite)) { $choix[$i++] = "specialite = '$specialite'"; }
                     if(!empty($struc)) { $choix[$i++] = "struc = '$struc'"; }
                     // etc... tu fais pareil pour chaque critère
     
                    // on insère les éléments remplis dans une variable $critere, en commençant par la première occurrence, puis on boucle
                     $critere = $choix[0]." ";
     
                    for($j=1;$j<$i;$j++)
                    {
                             $critere .= " AND ".$choix[$j]." ";
                     }
     
                    // enfin on fait la requête si $i >0, ça veut dire qu'il y a des critères
                     if($i > 0)
                    {
                             // requete de selection
                             $sql = mysql_query("SELECT * FROM masteres WHERE $critere ORDER BY id") or die(mysql_error());
                     }
     
                    // si $i = 0, alors l'utilisateur n'a pas saisi de critère, là soit on fait la même requete mais sans "WHERE $critere", soit on lui demande de saisir au moins un critère.
                     else
                    {
                             $sql = mysql_query( "SELECT * FROM masteres ORDER BY id") or die(mysql_error());
                     }
    Il marche bien sauf que je voudrais ajouter un LIKE dans la requête mais j'ai pas réussi à faire.
    Pouvez vous m'aider SVP ?

  3. #3
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Bonjour,

    Pour le like il te suffit de faire ainsi :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = mysql_query("SELECT * FROM masteres WHERE $critere  AND monChamp LIKE '%recherche%' ORDER BY id") or die(mysql_error());

    Il te suffit ensuite de remplacer monChamp par le champ correspondant et rechercher par le mot à rechercher.

  4. #4
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 128
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par humitake Voir le message
    Bonjour,

    Pour le like il te suffit de faire ainsi :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = mysql_query("SELECT * FROM masteres WHERE $critere  AND monChamp LIKE '%recherche%' ORDER BY id") or die(mysql_error());

    Il te suffit ensuite de remplacer monChamp par le champ correspondant et rechercher par le mot à rechercher.
    $critere est un tableau qui contient les noms des champs donc je peux pas les répéter

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 128
    Points : 79
    Points
    79
    Par défaut
    j'ai essayé comme ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = mysql_query("SELECT * FROM masteres WHERE $critere LIKE '%$critere%' ORDER BY id") or die(mysql_error());
    mais un erreur s'affiche:
    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 'fssfs' %' ORDER BY id' at line 1

  6. #6
    Membre confirmé Avatar de humitake
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2010
    Messages
    399
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2010
    Messages : 399
    Points : 578
    Points
    578
    Par défaut
    Ah !

    Je crois avoir compris, en fait tout tes champs que tu récupère en $_POST sont les champs que tu souhaite rechercher grâce à LIKE ?

    Dans ce cas je m'excuse mais ce n'est pas ainsi qu'il faut procéder. Tu as d’ailleurs commencé mais c'est incomplet.

    Je prend par exemple cette ligne :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!empty($sujet)) { $choix[$i++] = "titre = '$sujet'"; }
    Il faut en fait la remplacer par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!empty($sujet)) { $choix[$i++] = "titre LIKE '%$sujet%'"; }

    Tu fait ensuite la même chose pour les autres et tu utilise la requête que tu avait avant :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = mysql_query("SELECT * FROM masteres WHERE $critere ORDER BY id") or die(mysql_error());

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2008
    Messages
    128
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 128
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par humitake Voir le message
    Ah !

    Je crois avoir compris, en fait tout tes champs que tu récupère en $_POST sont les champs que tu souhaite rechercher grâce à LIKE ?

    Dans ce cas je m'excuse mais ce n'est pas ainsi qu'il faut procéder. Tu as d’ailleurs commencé mais c'est incomplet.

    Je prend par exemple cette ligne :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!empty($sujet)) { $choix[$i++] = "titre = '$sujet'"; }
    Il faut en fait la remplacer par :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    if(!empty($sujet)) { $choix[$i++] = "titre LIKE '%$sujet%'"; }

    Tu fait ensuite la même chose pour les autres et tu utilise la requête que tu avait avant :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = mysql_query("SELECT * FROM masteres WHERE $critere ORDER BY id") or die(mysql_error());
    Merci beaucoup il marche bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Recherche avec plusieurs critères
    Par Eco dans le forum Excel
    Réponses: 12
    Dernier message: 20/07/2016, 18h07
  2. Recherche avec plusieurs critères
    Par vins86 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 02/05/2013, 20h52
  3. Recherche avec plusieurs critères et mise à jour automatique
    Par emowpya dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/02/2013, 17h36
  4. Réponses: 1
    Dernier message: 18/09/2010, 02h40
  5. VBA-E Comment réaliser une recherche avec plusieurs critères ?
    Par Larsen21 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 14/12/2006, 13h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo