Problème requete mysql/php

Résolu/Fermé
otaku-sensei Messages postés 7 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 19 mars 2009 - 18 mars 2009 à 13:16
otaku-sensei Messages postés 7 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 19 mars 2009 - 19 mars 2009 à 18:36
Bonjour à tous,
Je débute en php/mysql.
Je suis en train de créer un formulaire dans lequel l'internaute pourra sélectionner plusieurs critères. Après avoir valider leur sélection ils arriveront sur une page résultat qui ira chercher des infos dans la base de données que j'ai créé.
Pour pouvoir afficher un résultat approprié en fonction des critères sélectionnés dans le formulaire je cherche à réaliser une requete mysql "SELECT", et en fait je cherche une façon de concaténer tout mes SELECT dans une seule requête. J'ai essayé de mettre "AND" ou "UNION" entre mes SELECT, sans succès.
Voici le code de ma requete :
$result1 = $db->sql_query("SELECT * FROM flers_locsal_salle WHERE dflers<='".$_POST['localisation']."' UNION ALL SELECT * FROM flers_locsal_salle WHERE capacite>='".$_POST['nbr_personne']."' UNION ALL SELECT * FROM flers_locsal_salle WHERE cuisine =='".$_POST['cuisine']."'");

Merci d'avance.
A voir également:

11 réponses

Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 mars 2009 à 13:30
Essayes comme ça:

$result1 = $db->sql_query("SELECT * FROM flers_locsal_salle WHERE dflers<=".$_POST['localisation']." 
AND capacite>=".$_POST['nbr_personne']." AND cuisine ='".$_POST['cuisine']."'"); 
1
otaku-sensei Messages postés 7 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 19 mars 2009
18 mars 2009 à 14:15
J'avais déjà essayé ce script et le formulaire ne renvoie rien c'est bizarre ^^
Je suis à cour d'idées
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 mars 2009 à 21:02
dflers<=".$_POST['localisation']."

dflers c'est bien un nombre qui est dans ce champ et bien en INT ?

et le champ localisation du formulaire te renvoie bien un nombre ?
0
otaku-sensei Messages postés 7 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 19 mars 2009
18 mars 2009 à 21:53
le champ dflers est bien composé de nombre en smallint et le champ localisation renvoie bien un nombre.
Lorsque je réalise que la requete WHERE dflers<=".$_POST['localisation']." , celle ci fonctionne correctement.
0

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

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 mars 2009 à 21:57
alors procedes par étapes en rajoutant d'abord AND capacite>=".$_POST['nbr_personne']."

à ta requette et ensuite si ça marche tu ajoutera:

AND cuisine ='".$_POST['cuisine']."'"

ainsi tu verra quelle est la condition qui coince
0
otaku-sensei Messages postés 7 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 19 mars 2009
18 mars 2009 à 22:02
dflers<=".$_POST['localisation']."
AND capacite>=".$_POST['nbr_personne']."
Dès que je fais cela ça ne marche plus, bizarre car quand je fais la requête capacite seule elle fonctionne
:(
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
18 mars 2009 à 22:21
essayes de mettre une trace d'erreur comme ça:

$result1 = $db->sql_query("SELECT * FROM flers_locsal_salle WHERE dflers<=".$_POST['localisation']." 
AND capacite>=".$_POST['nbr_personne']." AND cuisine ='".$_POST['cuisine']."'") or die ("Pb :".mysql_error());
0
otaku-sensei Messages postés 7 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 19 mars 2009
19 mars 2009 à 11:30
$result1 = $db->sql_query("SELECT * FROM flers_locsal_salle WHERE dflers<=".$_POST['localisation']."
AND capacite>=".$_POST['nbr_personne']."

Jusqu'à là ça marche correctement, donc apparemment c'est la requete AND cuisine ='".$_POST['cuisine']."' qui pose problème. Normalement le POST cuisine est récupéré par la sélection d'une check box

Encore plus étrange le fait de mettre "mysql_error" change le comportement: des résultats s'affichent à nouveau mais ne correspondent plus à la base de données :O

Merci pour ton aide
0
Alain_42 Messages postés 5361 Date d'inscription dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
19 mars 2009 à 15:05
ha donc

il faut passer par un décodage par php si coché => $cuisine= une valeur

si pas coché=> $cuisine=une autre valeur


bien sur en fonction de ce qui est dans ta BDD

et tu fais ta requette non plus avec $_POST[cuisine]

mais $cuisine
0
otaku-sensei Messages postés 7 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 19 mars 2009
19 mars 2009 à 16:59
Dans le coup j'ai réussi à faire marcher mes checkbox en fonctionnant autrement, voici le code:
$result = "SELECT * FROM flers_locsal_salle WHERE";
if(!empty( $_POST['cuisine'] ) ) $result .= " cuisine='".$_POST['cuisine']."' ";
if(!empty( $_POST['toilettes'] ) ) $result .= "AND toilettes='".$_POST['toilettes']."' ";
if(!empty( $_POST['acces_handi'] ) ) $result .= "AND handi='".$_POST['acces_handi']."' ";
if(!empty( $_POST['estrade'] ) ) $result .= "AND estrade='".$_POST['estrade']."' ";
if(!empty( $_POST['table_chaise'] ) ) $result .= "AND mobil='".$_POST['table_chaise']."' ";
if(!empty( $_POST['vaisselle'] ) ) $result .= "AND vaisselle='".$_POST['vaisselle']."' ";
if(!empty( $_POST['parking'] ) ) $result .= "AND parking='".$_POST['parking']."' ";
if(!empty( $_POST['piece_sup'] ) ) $result .= "AND piecesupp='".$_POST['piece_sup']."' ";
if(is_numeric( $_POST['localisation'] ) ) $result .= " AND dflers<='".$_POST['localisation']."' ";
if(is_numeric( $_POST['nbr_personne'] ) ) $result .= " AND capacite>='".$_POST['nbr_personne']."' ";
var_dump($result);
$result = $db->sql_query($result);

Le seul truc c'est que la checkbox cuisine doit forcement être validée pour que la validation du formulaire fonctionne.
Maintenant j'ai un autre souci ^^: J'ai un champ budget (en numérique) et je souhaite que le résultat renvoie tous ce qui est à + ou - 30% du budget sélectionné. Le champ, concerné, de ma base s'appelle prix
J'ai essayé ce code mais fonctionne pas:
$result .= " AND prix BETWEEN '".$_POST['budget_salle']."'+30% AND'".$_POST['budget_salle']."'-30%");
0
otaku-sensei Messages postés 7 Date d'inscription mercredi 18 mars 2009 Statut Membre Dernière intervention 19 mars 2009
19 mars 2009 à 18:36
C'est bon j'ai trouvé la solution! ^^
Merci à toi Alain pour ton aide
0