Petit problème php et requete sql

Résolu
zemzoum89 Messages postés 583 Statut Membre -  
zemzoum89 Messages postés 583 Statut Membre -
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. zemzoum89 Messages postés 583 Statut Membre 18
     
    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...
    0
  2. josh64 Messages postés 58 Statut Membre 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);
    }
    }
    }
    ?>
    0
    1. zemzoum89 Messages postés 583 Statut Membre 18
       
      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...
      0
    2. josh64 Messages postés 58 Statut Membre 1
       
      c'est une erreur de ma part ^^
      il faut le remplacer par : $nb_etoiles[$j]
      0
    3. zemzoum89 Messages postés 583 Statut Membre 18
       
      Merci pour votre aide mais dans ce cas la il va me sortir trois requetes non ?? merci beaucoup de m'aider....
      0
    4. josh64 Messages postés 58 Statut Membre 1
       
      non, ce sera en fonction des cases qui seront cochées
      0
    5. zemzoum89 Messages postés 583 Statut Membre 18
       
      oui et si trois cases sont cochées ???? ce code génèrera-il trois requêtes?
      0
  3. Alain_42 Messages postés 5413 Statut Membre 904
     
    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
    }
    }
    
    0
  4. zemzoum89 Messages postés 583 Statut Membre 18
     
    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.')';
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Alain_42 Messages postés 5413 Statut Membre 904
     
    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']))
    0
    1. zemzoum89 Messages postés 583 Statut Membre 18
       
      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...
      0