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. 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...
    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. 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. 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. 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...