Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
916 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  where et and = "tous" ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

where et and = "tous" ?

n°2062359
jamaica sk​a
Posté le 10-03-2011 à 17:50:35  profilanswer
 

Bonjour,  
 
J'ai une question toute conne, mais j'arrive pas à trouver la solution  :fou: .
 
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
mood
Publicité
Posté le 10-03-2011 à 17:50:35  profilanswer
 

n°2062377
antac
..
Posté le 10-03-2011 à 20:16:58  profilanswer
 

tu peux construire ta requête en PHP en fonction de ce que tu as en variables POST aussi

n°2062383
jamaica sk​a
Posté le 10-03-2011 à 21:02:05  profilanswer
 

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.

n°2062401
mrbebert
Posté le 10-03-2011 à 23:15:35  profilanswer
 

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"  :)


Message édité par mrbebert le 10-03-2011 à 23:16:38

---------------
Doucement le matin, pas trop vite le soir.
n°2062510
MEI
|DarthPingoo(tm)|
Posté le 11-03-2011 à 11:53:05  profilanswer
 

Le mieux c'est aussi d'utiliser un bind de variables SQL aussi... :o
 
Non parce que vive les bugs à construire les requêtes comme ça quoi... :'(


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2062583
esox_ch
Posté le 11-03-2011 à 14:55:59  profilanswer
 

MEI a écrit :

Le mieux c'est aussi d'utiliser un bind de variables SQL aussi... :o
 
Non parce que vive les bugs à construire les requêtes comme ça quoi... :'(


 
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 :heink:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
n°2062590
MEI
|DarthPingoo(tm)|
Posté le 11-03-2011 à 15:04:21  profilanswer
 

esox_ch a écrit :


 
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 :heink:


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. :o
 
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... :spamafote:


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2062644
mrbebert
Posté le 11-03-2011 à 16:48:17  profilanswer
 

Eh oh, on se calme :o  
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 [:cerveau manust]  
 
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 [:figti]


---------------
Doucement le matin, pas trop vite le soir.
n°2062649
MEI
|DarthPingoo(tm)|
Posté le 11-03-2011 à 16:57:47  profilanswer
 

En gros :

Code :
  1. $params = array();
  2. $sql = "... where 1=1";
  3. if ($toto) {
  4.     $sql . = " and toto = ?";
  5.     $params[] = $toto;
  6. }
  7. if ($tata) {
  8.     $sql . = " and tata = ?";
  9.     $params[] = $tata;
  10. }
  11. $stmt = mysqli_prepare($link, $sql);
  12. foreach ($params as $param) {
  13.     mysqli_stmt_bind_param($stmt, 's', $param);
  14. }



---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
n°2062775
keusty78
Posté le 11-03-2011 à 22:33:37  profilanswer
 


si  j'ai bien compris alor tu fais comme ce si:

Code :
  1. if ($choi==1){
  2. $choi= 'val1 = '."choixval1 1";
  3. }
  4. else{
  5. $choi='val1 ='. "choixval1 1".' AND val2 ='."blabla";
  6. }
  7. SELECT val1, val2
  8. FROM table
  9. WHERE $choi


Message édité par keusty78 le 12-03-2011 à 14:14:38
mood
Publicité
Posté le 11-03-2011 à 22:33:37  profilanswer
 

n°2062836
mrbebert
Posté le 12-03-2011 à 13:27:21  profilanswer
 

MEI a écrit :

En gros :

Code :
  1. $params = array();
  2. $sql = "... where 1=1";
  3. if ($toto) {
  4.     $sql . = " and toto = ?";
  5.     $params[] = $toto;
  6. }
  7. if ($tata) {
  8.     $sql . = " and tata = ?";
  9.     $params[] = $tata;
  10. }
  11. $stmt = mysqli_prepare($link, $sql);
  12. foreach ($params as $param) {
  13.     mysqli_stmt_bind_param($stmt, 's', $param);
  14. }



Utiliser une requête préparée pour éviter les injections SQL, ça, d'accord [:cosmoschtroumpf]  
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.


---------------
Doucement le matin, pas trop vite le soir.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  where et and = "tous" ?

 

Sujets relatifs
[MDX] Condition WHERE sur une hiérarchie[Transac-SQL] clause WHERE NOT IN dans un trigger
UPDATE avec JOIN, WHERE, LIMIT, ORDER BYpasser une variable dans la clause where ... besoin d'aide
Where case between […]Requête Where SQL
Clause WHERE dans PHPcomment créer une requête de type SELECT...WHERE avec vba
[MySQL]Regex dans un whereclause where
Plus de sujets relatifs à : where et and = "tous" ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR