Petit problème php et requete sql

Résolu/Fermé
zemzoum89 Messages postés 543 Date d'inscription mercredi 3 décembre 2008 Statut Membre Dernière intervention 11 novembre 2012 - 20 mai 2010 à 00:29
zemzoum89 Messages postés 543 Date d'inscription mercredi 3 décembre 2008 Statut Membre Dernière intervention 11 novembre 2012 - 25 mai 2010 à 19:22
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

zemzoum89 Messages postés 543 Date d'inscription mercredi 3 décembre 2008 Statut Membre Dernière intervention 11 novembre 2012 18
20 mai 2010 à 00:31
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 jeudi 6 novembre 2008 Statut Membre Dernière intervention 18 janvier 2013 1
20 mai 2010 à 10:26
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 mercredi 3 décembre 2008 Statut Membre Dernière intervention 11 novembre 2012 18
20 mai 2010 à 18:49
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 jeudi 6 novembre 2008 Statut Membre Dernière intervention 18 janvier 2013 1
21 mai 2010 à 09:11
c'est une erreur de ma part ^^
il faut le remplacer par : $nb_etoiles[$j]
0
zemzoum89 Messages postés 543 Date d'inscription mercredi 3 décembre 2008 Statut Membre Dernière intervention 11 novembre 2012 18
24 mai 2010 à 21:33
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 jeudi 6 novembre 2008 Statut Membre Dernière intervention 18 janvier 2013 1
25 mai 2010 à 10:18
non, ce sera en fonction des cases qui seront cochées
0
zemzoum89 Messages postés 543 Date d'inscription mercredi 3 décembre 2008 Statut Membre Dernière intervention 11 novembre 2012 18
25 mai 2010 à 12:00
oui et si trois cases sont cochées ???? ce code génèrera-il trois requêtes?
0
Alain_42 Messages postés 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
25 mai 2010 à 14:24
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 mercredi 3 décembre 2008 Statut Membre Dernière intervention 11 novembre 2012 18
25 mai 2010 à 15:24
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 5358 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 902
25 mai 2010 à 18:13
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 mercredi 3 décembre 2008 Statut Membre Dernière intervention 11 novembre 2012 18
25 mai 2010 à 19:22
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