where et and = "tous" ? - PHP - Programmation
Marsh Posté le 10-03-2011 à 20:16:58
tu peux construire ta requête en PHP en fonction de ce que tu as en variables POST aussi
Marsh Posté le 10-03-2011 à 21:02:05
Ouai mais en fait je voudrais que ça me sorte (si je précise pas la variable deux et que la variable 1 est choixval1 1) :
- La variable choisie est 1 (choixval1 1) et a (choixval2 1).
- La variable choisie est 1 (choixval1 1) et b (choixval2 2).
Donc en gros tous les couples possibles avec les variables.
Marsh Posté le 10-03-2011 à 23:15:35
Le mieux, c'est de construire la clause "WHERE" de ta requête en plusieurs fois, chaque menu ajoutant ou non un critère de sélection :
where="WHERE 1"
if ($choix1 <> "choixval1 0" ) where .= ' AND (val1="' . $choix2 . '" )'
if ($choix2 <> "choixval2 0" ) where .= ' AND (val2="' . $choix2 . '" )'
Qui te donne au final :
WHERE 1 AND (val1="$choix1" ) AND (val2="$choix2" )
Le "1" au début permet de ne pas se poser de question sur le fait de mettre ou non le "AND"
Marsh Posté le 11-03-2011 à 11:53:05
Le mieux c'est aussi d'utiliser un bind de variables SQL aussi...
Non parce que vive les bugs à construire les requêtes comme ça quoi...
Marsh Posté le 11-03-2011 à 14:55:59
MEI a écrit : Le mieux c'est aussi d'utiliser un bind de variables SQL aussi... |
Mais +1 quoi ... C'est horrible cette épidémie de gens nostalgiques des années 90 qui écrivent toutes leurs requêtes sans passer par PDO&co
Marsh Posté le 11-03-2011 à 15:04:21
esox_ch a écrit : |
Sans même faire du PDO où utiliser un ORM, écrire une requête spécifique MySQL ou Oracle avec du SQL pas normé, soit.
Mais au moins utilisé les bonnes pratiques et bindéer/échapper tout ça pour éviter que la première variable contenant un ' ou un " fasse péter l'application.
D'autant qu'autant mysqli que oci8 supportent ça...
C'est comme ceux qui veulent faire de l'UTF-8 mais qui ne lissent pas la doc. et font une requête SQL "set names ..." au lieu d'utiliser la fonction mysqli::set_charset...
Marsh Posté le 11-03-2011 à 16:48:17
Eh oh, on se calme
Je sais bien qu'il serait judicieux d'avoir vérifier les données au préalable mais le but n'était pas non plus de refaire la page entière, juste de montrer une façon différente de voir les choses
Ceci dit, ça m'intéresserait d'avoir un exemple de requête préparée pour ce type de cas où on ne sait pas exactement le nombre de critères qui seront utilisés
Marsh Posté le 11-03-2011 à 16:57:47
En gros :
Code :
|
Marsh Posté le 11-03-2011 à 22:33:37
si j'ai bien compris alor tu fais comme ce si:
Code :
|
Marsh Posté le 12-03-2011 à 13:27:21
MEI a écrit : En gros :
|
Utiliser une requête préparée pour éviter les injections SQL, ça, d'accord
Je pensais qu'il existait une astuce pour ce type de situation mais en fait, c'est le même principe de construction de la requête, au fur et à mesure du traitement des paramètres, que ce que j'indiquais.
Marsh Posté le 10-03-2011 à 17:50:35
Bonjour,
J'ai une question toute conne, mais j'arrive pas à trouver la solution .
Je vous expose mon casse tête, en faite j'ai deux balises select qui renvoient 2 résultats (par exemple) et j'aimerais pouvoir sélectionner un résultat qui renvoie toutes les valeurs possibles, quand on ne sélectionne pas une valeur précise.
Bon un exemple sera peut être plus explicite :
Donc on a en php :
SELECT val1, val2
FROM table
WHERE val1 = ? AND val2 = ?;
Si on prend deux choix précis :
<select name="choix1">
<option value="choixval1 0"></option>
<option value="choixval1 1">1</option>
<option value="choixval1 2">2</option>
</select>
<select name="choix2">
<option value="choixval2 0"></option>
<option value="choixval2 1">a</option>
<option value="choixval2 2">b</option>
</select>
SELECT val1, val2
FROM table
WHERE val1 = "choixval1 1" AND val2 = "choixval2 1";
Mais si on ne prend qu'un seul choix précis pour le choix 1, je mets quoi dans la deuxième possibilité pour afficher toutes les valeurs de 2 ? Donc dans value="choixval2 0" à la place de choixval2 0 ?
SELECT val1, val2
FROM table
WHERE val1 = "choixval1 1" AND val2 = "?????";
Message édité par jamaica ska le 10-03-2011 à 21:02:28