Petit problème php et requete sql

Résolu
zemzoum89 Messages postés 543 Date d'inscription   Statut Membre Dernière intervention   -  
zemzoum89 Messages postés 543 Date d'inscription   Statut Membre Dernière intervention   -
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




A voir également:

5 réponses

zemzoum89 Messages postés 543 Date d'inscription   Statut Membre Dernière intervention   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
josh64 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   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
zemzoum89 Messages postés 543 Date d'inscription   Statut Membre Dernière intervention   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
josh64 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   1
 
c'est une erreur de ma part ^^
il faut le remplacer par : $nb_etoiles[$j]
0
zemzoum89 Messages postés 543 Date d'inscription   Statut Membre Dernière intervention   18
 
Merci pour votre aide mais dans ce cas la il va me sortir trois requetes non ?? merci beaucoup de m'aider....
0
josh64 Messages postés 56 Date d'inscription   Statut Membre Dernière intervention   1
 
non, ce sera en fonction des cases qui seront cochées
0
zemzoum89 Messages postés 543 Date d'inscription   Statut Membre Dernière intervention   18
 
oui et si trois cases sont cochées ???? ce code génèrera-il trois requêtes?
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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
zemzoum89 Messages postés 543 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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
zemzoum89 Messages postés 543 Date d'inscription   Statut Membre Dernière intervention   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