Valeur liste déroulante dans requete sql ?

Résolu/Fermé
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 - 26 nov. 2007 à 12:46
MaamuT Messages postés 174 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 20 décembre 2014 - 26 nov. 2007 à 17:36
Bonjour,

J'ai 1 ptit souci qui à première vue, ne sont pas bien compliqué :
Sur une meme page de mon site, j'ai une liste déroulante et une requete SQL.
Comment receuillir la valeur de ma liste déroulante dans ma requete SQL ?

liste réroulante :
<FORM method="post" action="ma_page.php">
<select onchange="submit()">
<option value="note_moyenne">Par note moyenne</option>
<option value="ville">Par commune</option>
<option value="nom">Par odre alphabétique</option>
</select>
</FORM>

requete : ...GROUP BY ma_table.value_ de_l_option_choisie


Merci à vous
Bon appétit

13 réponses

MaamuT Messages postés 174 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 20 décembre 2014 184
26 nov. 2007 à 14:15
Normalement, les variables de type $_POST[''] ou $_GET[''] ne sont pas utilisables directement dans une requête, il faut les récupérer dans une autre avant:

$maVariable = $_GET['maVariable'];
1
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
26 nov. 2007 à 14:29
d'accord, je ne savais pas...
en tout cas, sur mon serveur, ça marche...

merci pour l'info en tout cas
1
MaamuT Messages postés 174 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 20 décembre 2014 184
26 nov. 2007 à 15:24
La variable tri est affectée au formulaire lui même, ce n'est pas une variable utilisable, elle ne veut rien dire, d'ailleurs, elle ne doit rien valoir d'après moi…

Ensuite, dans ta requête sql, n'échappe pas tes variables, tu colle tout entre des guillemets doubles.

Pour vérifier, tu peut faire un echo de la requête pour vérifier qu'elle est bien construite.
1
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
26 nov. 2007 à 15:43
Jean : reprends ce que je t'ai dit au début, et mets le "name" pas sur le FORM mais sur le SELECT !
Comme dans mon premier post.


Et sinon, pour MaamuT, je suis désolé mais ton histoire de config de php qui interdit les POST dans un texte de requête ne tient pas debout, c'est même plutôt n'importe quoi... Une requête n'est, pour php, qu'une chaine de caractère comme une autre. On la concatène comme on veux, y a pas d'histoire de config là-dedans !
1

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

Posez votre question
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011
26 nov. 2007 à 12:58
Bonjour,

Il faut donner un nom ("name") à ton select, par exemple : <select onchange="submit()" name="tri">

Ensuite, dans ma_page.php, la variable $_POST["tri"] vaut le contenu de la liste.

Donc tu fais ta requête :
$requete = "...GROUP BY ma_table".$_POST["tri"]

Xavier
0
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
26 nov. 2007 à 13:19
il doit y avoir une petite erreur de syntaxe car là, ça ne marche pas, ma requete (je l'ai simplifiée) :

$reponse = mysql_query("SELECT ma_table.* FROM ma_table WHERE ma_table.numero_region='" . $_GET['numero_region'] . "' GROUP BY ma_table.là où je veux receuillir la value");

???
0
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
26 nov. 2007 à 14:01
actuellement, j'ai :
$reponse = mysql_query("SELECT ma_table.* FROM ma_table WHERE ma_table.numero_region='" . $_GET['numero_region'] . "' GROUP BY ma_table.'" . $_POST['tri']"'");
et ça ne marche pas...
par contre, quand je met je met ville (l'un des critères de tri) à la place de .'" . $_POST['tri']"' là ça marche
quelkqu'un pour m'aider ?
0
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
26 nov. 2007 à 14:17
non non, le $_GET fonctionne bien ça c'est sur
(testé avant)
0
MaamuT Messages postés 174 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 20 décembre 2014 184
26 nov. 2007 à 14:22
Pas sur tous les serveurs PHP, si le php.ini est bien fait, il ne les accepteras pas…

Ce n'est pas une constante, certains acceptent, d'autres non !!

En tous cas, je ne ferais pas l'économie sur ce point là…
0
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
26 nov. 2007 à 14:45
j'ai donc créé :
<?php
$numero_region = $_GET['numero_region'];
$tri = $_POST['tri'];
?>

et remplacé ma requete :
$reponse = mysql_query("SELECT ma_table.* FROM ma_table WHERE ma_table.numero_region='" . $_GET['numero_region'] . "'GROUP BY estaminet. '" . $tri "' ")

mon formulaire est le suivant :
<FORM name="tri" method="post" action="ma_page.php">
<select onchange="submit()">
<option value="note_moyenne">Par note moyenne</option>
<option value="ville">Par commune</option>
<option selected="selected" value="alpha">Par odre alphabétique</option>
</select>
</FORM>

Je signale que le formulaire recharge la page dans laquelle il se trouve.

mais ça ne marche pas !!!
0
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
26 nov. 2007 à 15:37
1/ alors comment puis-je faire pour récupérer la valeur choisie dans ma liste déroulante ?
2 / la requete commence par un guillement double. Si je met un guillemet double dans ma requete, ça va être interprété comme une fin de requete non ?

merci à toi
0
MaamuT Messages postés 174 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 20 décembre 2014 184
26 nov. 2007 à 16:09
1/ Bien renseigner le nom du select.

2/ Tu insère tes variable tel quel, sans les échaper ni sortir, sans concaténation, directement dedans:

$sql = "SELECT * FROM maTable WHERE nom = $nom and prenom = $prenom";

PS @ Reivax962: Pas la peine d'être agressif, mon serveur perso n'accepte pas ces variables et il est configuré pour afficher un max d'erreurs, E_ALL | E_NOTICE, ce doit être pour ça.
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 011 > MaamuT Messages postés 174 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 20 décembre 2014
26 nov. 2007 à 16:15
Je ne voulais pas être aggressif, désolé.
Mais si ton serveur ne les accepte pas, à mon avis c'est surtout parce que tu ne les concatènes pas, mais tente de les insérer directement dans la chaîne de caractère, ce qui n'est pas correctement compris par l'interpréteur php !

Dis-moi si je me trompe, mais tu essaies de faire :
$variable = "untexte $_POST['chose']";
au lieu de
$variable = "untexte ".$_POST['chose'];

Non ?
0
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
26 nov. 2007 à 15:46
donc c'était ça...
la vieille erreur...

merci, je teste
0
Jean_2 Messages postés 245 Date d'inscription lundi 24 septembre 2007 Statut Membre Dernière intervention 13 septembre 2013 12
26 nov. 2007 à 17:22
c'est bon, vos 2 méthodes fonctionnent. merci
0
MaamuT Messages postés 174 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 20 décembre 2014 184
26 nov. 2007 à 17:36
Super, voilà une bonne chose de faite ;)
0