Problème requete mysql/php

[Résolu/Fermé]
Signaler
Messages postés
7
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
19 mars 2009
-
Messages postés
7
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
19 mars 2009
-
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.

11 réponses

Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
889
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']."'"); 
Messages postés
7
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
19 mars 2009

J'avais déjà essayé ce script et le formulaire ne renvoie rien c'est bizarre ^^
Je suis à cour d'idées
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
889
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 ?
Messages postés
7
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
19 mars 2009

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.
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
889
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
Messages postés
7
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
19 mars 2009

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
:(
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
889
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());
Messages postés
7
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
19 mars 2009

$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
Messages postés
5358
Date d'inscription
dimanche 3 février 2008
Statut
Membre
Dernière intervention
13 février 2017
889
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
Messages postés
7
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
19 mars 2009

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%");
Messages postés
7
Date d'inscription
mercredi 18 mars 2009
Statut
Membre
Dernière intervention
19 mars 2009

C'est bon j'ai trouvé la solution! ^^
Merci à toi Alain pour ton aide