Petit problème php et requete sql

Résolu
Bonjour,

je construit un mini site de réservation juste pour me familiariser avec php/mysql
, j'ai trois case a cocher qui représente la catégorie de l'hôtel que le client veut rechercher ( 1étoile, 2 étoile et 3 étoiles), dans ma requête sql pour la recherche, je dois étudier les 9 cas possible et donc y' aura 9 requêtes ou bien il y'a un autre moyen plus optimal

merci de bien vouloir m'aider

5 réponses

  1. Humm pas très logique

    - quelque soit le nombre de cases cohées si le name des chexkbox est name= "nb_etoiles[]" , avec des crochets[]
    tu as dans tous les cas un array

    ex: si 3 etoiles seule est cochée tu aura $_POST['nb_etoiles'][0]= 3

    - ensuite si tu as 1 étoile et 3 étoiles cochées

    la première des tes requettes (celles sans WHERE) te sortira tous les enr donc 1 , 2 ,3 étoiles

    - ensuite au lieu de
    if ($_POST['nb_etoiles'] === array()) je ferait plutôt
    if (is_array($_POST['nb_etoiles']))
    1. j'ai travaillé avec if ($_POST['nb_etoiles'] == array())
      et ca marche tres bien car si je coche 3 et 5 il ne me sortira pas les hotels de catégorie 4... Merci beaucoup pour votre remarque...
  2. Merci beaucoup d'avoir essayé de m'aider,
    j'ai trouvé cette solution

    if ($_POST['nb_etoiles'] === array())
    // la requête sans WHERE
    $req = 'SELECT cols FROM tables ;

    else
    // la requête avec WHERE
    $req = 'SELECT cols FROM tables WHERE nb_etoiles IN ('.$etoiles.')';
    1. seules les cases cochées sont postées, donc une autre solution:

      <?php
      
      echo"
      <form action=\"recup.php\" method=\"post\">
      1 étoiles <input type=\"checkbox\" name=\"nb_etoiles[]\" value=\"1\" />
      2 étoiles <input type=\"checkbox\" name=\"nb_etoiles[]\" value=\"2\" />
      3 étoiles <input type=\"checkbox\" name=\"nb_etoiles[]\" value=\"3\" />
      <input name=\"submit\" type=\"submit\" value=\"Valider\" />
      </form>
      ";
      
      ?>
      
      
      //Ton recup.php
      <?php
      
      $nb_etoiles=$_POST['nb_etoiles']; //tu récupère les valeurs des cases cochées sous forme d'un array
      
      for ($j=0;$j<sizeof($nb_etoiles);$j++)
      {
      //ainsi on ne fait que les requettes correspondantes au nombre de cases cochées
      $req = "SELECT cols FROM tables WHERE nb_etoiles='$nb_etoiles[$j]'";
      $res=mysql_query($res);
      if(!$res)
      {
      $message = 'Requete req invalide : ' . mysql_error() . "\n";
      $message .= 'Requete complete : ' . $query;
      die($message);
      
      }else{
      	//affichage des resultats
      }
      }
      
      1. Tiens essayes ça :

        // ton formulaire
        <?php
        for ($i=0;$i<3;$i++)
        {
        echo"
        <form action=\"recup.php\" method=\"post\">
        1 étoiles <input type=\"checkbox\" name=\"nb_etoiles[$i]\" value=\"1\" />
        2 étoiles <input type=\"checkbox\" name=\"nb_etoiles[$i]\" value=\"2\" />
        3 étoiles <input type=\"checkbox\" name=\"nb_etoiles[$i]\" value=\"3\" />
        <input type=\"submit\" value=\"Valider\" />
        </form>
        ";
        }
        ?>

        //Ton recup.php
        <?php

        $nb_etoiles=$_POST['nb_etoiles']; //tu récupère les valeurs des cases cochées

        for ($j=0;$j<3;$j++)
        {
        if (isset($menu[$j]) )
        {
        $req = "SELECT cols FROM tables WHERE nb_etoiles='$nb_etoiles[$j]'";
        $res=mysql_query($res);
        if(!$res)
        {
        $message = 'Requete req invalide : ' . mysql_error() . "\n";
        $message .= 'Requete complete : ' . $query;
        die($message);
        }
        }
        }
        ?>
        1. Bonsoioir,

          $menu[$j] c'est quoi cette variable au juste vous ne l'avez mentionnée nul part a part dans le if(isset ($menu[$j]))... Merci de m'éclaircir les idées...
        2. c'est une erreur de ma part ^^
          il faut le remplacer par : $nb_etoiles[$j]
        3. Merci pour votre aide mais dans ce cas la il va me sortir trois requetes non ?? merci beaucoup de m'aider....
        4. non, ce sera en fonction des cases qui seront cochées
        5. oui et si trois cases sont cochées ???? ce code génèrera-il trois requêtes?
      2. on ma proposé cette solution mais elle n'a pas fonctionné:

        <form action="" method="post">
            <input type="checkbox" name="nb_etoiles[]" value="1" />1 étoiles
            <input type="checkbox" name="nb_etoiles[]" value="2" />2 étoiles
            <input type="checkbox" name="nb_etoiles[]" value="3" />3 étoiles
            <input type="submit" />
        </form>
        


        <?php
        foreach($_POST['nb_etoiles'] AS $val)
            if (ctype_digit($val))
                exit($val.' n\'est pas un entier valide');
        
        $etoiles = implode(',', $_POST['nb_etoiles']);
        $req = 'SELECT cols FROM tables WHERE nb_etoiles IN ('.$etoiles.')';
        


        tout en sachant que le champ nb_etoiles est un entier...