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 multicritéres


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Points : 13
    Points
    13
    Par défaut Recherche multicritéres
    bonjour à tous. j'ai fais un formulaire de recherche multicritères dans une base de donnée. mais le problème c'est que le code ne prend en compte que le premier champs pour faire la recherche. je m'explique lorsque le premier champs du formulaire est renseigné et que les autres sont laissé vide, le code me renvoi les résultats de la recherche. mais si j'ajoute à la recherche un autre champs, rien ne s'affiche. il en va de même si au lieu de remplir le premier champs du formulaire je remplis le deuxième ou le troisième.
    je joint le formulaire et le code php en espèrant trouver de l'aide comme d'habitude sur ce site. merci d'avance

    formulaire
    Code html : 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
    <form method="post" action="recherche.php">
        <p>Type d'opération : <br />
            <select name="type_ope" value="Choisissez">
                <option value="" selected="selected"></option>
                <option>vente</option>
                <option>location</option>
            </select><br />
            type de bien : <br />
            <select name="type_bien">
                <option value="" selected="selected"></option>
                <option value="1">Villa</option>
          <option value="2">appartement</option>
          <option value="3">terrain</option>
          <option value="4">chambre</option>
          <option value="5">magasin</option>
          <option value="6">immeuble</option>
          <option value="7">studio</option>
          <option value="8">bureaux</option>
          <option value="9">entrepot</option>
            </select><br />
            prix : <br />
            <select name="prix">
                <option value="" selected="selected"></option>
                <option value="1"> Moins de 200 000</option>
          <option value="2"> Entre 200 000 et 300 000</option>
          <option value="3"> Entre 300 000 et 400 000</option>
          <option value="4"> Entre 400 000 et 600 000</option>
          <option value="5"> Entre 600 000 et 800 000</option>
          <option value="6"> Entre 800 000 et 1 000 000</option>
          <option value="7"> Entre 1 000 000 et 1 500 000</option>
          <option value="8"> Entre 1 500 000 et 2 000 000</option>
          <option value="9"> Plus de 2 000 000</option>
            </select><br />
            <input type="submit" value="Valider" /><br />

    traitement
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    // connexion
    $cnx = mysql_connect($host,$user,$pass) or die("Impossible de se connecter");
    $db = mysql_select_db("$bdd") or die("Impossible de se connecter");
    if (mysql_connect ($host,$user,$pass))
    {
        echo 'Connexion réussie'; echo '<br>';
    }
    else
    {
        echo 'Connexion impossible...'.mysql_error(); echo '<br>';
    }
    // on récupère les critères sélectionnés
    extract($_POST);
    $i = 0;
    // 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($type_ope))
    {
        $choix[] = "type_ope = '$type_ope'";
        $i++;
    }
    if(!empty($type_bien))
    {
        $choix[] = "type_bien = '$type_bien'";
        $i++;
    }
    if(!empty($prix))
    {
       $choix[] = "prix = '$prix'";
       $i++;
    }
    // on insère les éléments remplis dans une variable $critere, en commençant par la première occurrence, puis on boucle
    $critere = implode(" and ", $choix);
    // 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 = "SELECT * FROM annonce WHERE $critere ";
        $requete = mysql_query( $sql, $cnx ) or die( "ERREUR MYSQL numéro: ".mysql_errno()."<br>Type de cette erreur: ".mysql_error()."<br>\n" );
    }
    // 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 = "SELECT * FROM annonce WHERE $critere ";
    }
    //récupération avec mysql_fetch_array(), et affichage de nos résultats :
    echo( "<table border=\"1\" cellpadding=\"1\" cellspacing=\"1\" align=\"center\">\n" );
    echo( "<tr>
        <td><div align=\"center\">Nom du fichier</div></td>
        <td><div align=\"center\">Type de materiel</div></td>
        <td><div align=\"center\">Systeme/OS</div></td>
        <td><div align=\"center\">Lieu</div></td>
        <td><div align=\"center\">Operationnel/Secours</div></td>
    </tr>" );
    while( $result = mysql_fetch_array( $requete ) )
    {
        echo( "<tr>\n" );
        echo( "<td><div align=\"center\">".$result["type_ope"]."</div></td>\n" );
        echo( "<td><div align=\"center\">".$result["type_bien"]."</div></td>\n" );
        echo( "<td><div align=\"center\">".$result["ville"]."</div></td>\n" );
        echo( "<td><div align=\"center\">".$result["quartier"]."</div></td>\n" );
        echo( "<td><div align=\"center\">".$result["prix"]."</div></td>\n" );
        /*echo( "<td><div align=\"center\"><form method='post' action='telechargement.php'><input type='submit' value='Telechargement'/></form></div></td>\n" );*/
        echo( "</tr>\n" );
    }
    echo( "</table><br>\n" );
    j'ai oublié de préciser que si je renseigne aucun champs j'ai des erreurs

    Undefined variable: choix

    implode() [function.implode]: Invalid arguments passed

    Undefined variable: requete in

    mysql_fetch_array() expects parameter 1 to be resource, null given in

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Ton principe est bon (en dehors de quelques points que je te corrige en dessous) et devrait fonctionner.

    Tu remarqueras que tu as la même requête en ligne 41 et 48 sauf que tu as oublié le mysql_query sur la deuxième.

    Le même code sans le extract() qui est dangereux et le $i qui n'est pas utile et avec protection contre les injections SQL :

    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
    $cnx = mysql_connect($host,$user,$pass) or die("Impossible de se connecter");
    $db = mysql_select_db($bdd) or die("Impossible de se connecter");
     
    if(!empty($_POST['type_ope']))   {
       $choix[] = 'type_ope = "' . mysql_real_escape_string($_POST['type_ope']) . '"';
    }
    if(!empty(($_POST['type_bien'])   {
       $choix[] = 'type_bien = "' . mysql_real_escape_string($_POST['type_bien']) . '"';
    }
    if(!empty($_POST['prix'])   {
        $choix[] = 'prix = "' . mysql_real_escape_string($_POST['prix']) . '"';
    }
     
    $sql = "SELECT * FROM annonce";
    if (isset($choix)) {
        $sql .= ' WHERE ' . implode(" AND ", $choix);
    }
     
    $requete = mysql_query( $sql, $cnx )
     
    echo $sql;
    J'ai ajouté un simple echo à la fin qui te permettra de mieux comprendre pourquoi ta requête ne donne pas de résultat.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Points : 13
    Points
    13
    Par défaut
    au risque de me faire taper sur les doigts je reviens d'abord pour te remercier Sabotage et aussi pour poser un problème.
    voila j'ai bien regardé le code et j'ai aussi corrigé quelque erreur que tu as sans doute exprès d'insérer pour voir si je suis mais voila echo $sql me renvoi que je fais bien la requête sur la table annonce et prend bien en compte les valeurs entrées dans les champs du formulaire. mais le problème c'est que les echo que je fais ne me retourne pas d'erreur mais rien ne s'affiche. j'ai une page blanche. j'ai essayé plusieurs truc différent mais j'y arrive pas. pourtant j'arrive bien à afficher sur une autre page les résultats d'une requete mais cette fois si elle est plus simple sans choix multiple ni formulaire et voila ce que j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     // On récupère tout le contenu de la table annonce
       $reponse = $bdd->query("SELECT * FROM annonce WHERE type_ope LIKE 'location' ");
     
        // On affiche chaque entrée une à une
        while ($donnees = $reponse->fetch())
    voici le code de la recherche multicritère et les echos
    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
           <?php          $cnx = mysql_connect($host,$user,$pass) or die("Impossible de se connecter");
    $db = mysql_select_db($bdd) or die("Impossible de se connecter");
     
    if(!empty($_POST['type_ope']))   {
       $choix[] = 'type_ope = "' . mysql_real_escape_string($_POST['type_ope']) . '"';
    }
    if(!empty($_POST['type_bien']))   {
       $choix[] = 'type_bien = "' . mysql_real_escape_string($_POST['type_bien']) . '"';
    }
    if(!empty($_POST['prix']))   {
        $choix[] = 'prix = "' . mysql_real_escape_string($_POST['prix']) . '"';
    }
     
    $sql = "SELECT * FROM annonce ";
    if (isset($choix)) {
        $sql .= ' WHERE ' . implode(" AND ", $choix);
    }
     
     
     
     // On affiche chaque entrée une à une
        while( $result = mysql_fetch_array( $requete ) )
        {
    		echo $result['type_bien'];
    		echo $result['type_ope'];
    		echo $result['prix'];
    	}
                    ?>

Discussions similaires

  1. faire un état d'après recherche multicritère
    Par bilouk dans le forum Access
    Réponses: 4
    Dernier message: 12/01/2006, 18h30
  2. Formulaire Recherche MultiCritère et RunTime
    Par fbu78 dans le forum Runtime
    Réponses: 9
    Dernier message: 06/01/2006, 17h52
  3. Recherche multicritère
    Par Darlay Jean_Louis dans le forum Access
    Réponses: 2
    Dernier message: 26/10/2005, 09h54
  4. Réponses: 2
    Dernier message: 01/10/2005, 18h42
  5. recherche multicritères
    Par onlineduel dans le forum Débuter
    Réponses: 3
    Dernier message: 30/03/2004, 16h15

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