spacemarmotte 0 Signaler ce message Posté(e) 25 octobre 2010 Bonsoir à tous, je sèche sur un truc... je dois faire un SELECT * FROM mabase WHERE var1='$var1' AND var2='$var2' AND var3='$var3' AND ... ... mais les variables ne sont pas forcément envoyé par POST (en fait, il y en a plus que 3 !!) ! comment faire ma requête sur les variables disponibles tout en ne tenant pas compte des variables non envoyées ? je ne pense pas pouvoir utiliser if car un internaute peut envoyer la variable 1, ou la 2, ou la 1 ET la 3 ou la 3 tout seul etc etc... ça ferait beaucoup de if/elseif !! y a t'il une fonction php qui permet de dire: "tient compte de la condition si elle existe" ?? merci de vos lumières Eric Partager ce message Lien à poster Partager sur d’autres sites Partagez cette page :
Tompascal 3 Signaler ce message Posté(e) 25 octobre 2010 Salut spacemarmotte :) y a t'il une fonction php qui permet de dire: "tient compte de la condition si elle existe" Ben, le "si" que tu utilises, c'est un "if" donc pas le choix :) Tu peux construire petit à petit ta requête avant de l'exécuter ensuite, par exemple : $tab_vars=array('var1','var2','var3',...); $req='SELECT * FROM mabase WHERE 1'; foreach($tab_vars as $var){ if(isset($_REQUEST[$var]) && $_REQUEST[$var]!=''){ $req.=' AND '.$var.'="'.mysql_real_escape_string($_REQUEST[$var]).'"'; } } $result = mysql_query($req); ... En espérant que cela t'aide :) Partager ce message Lien à poster Partager sur d’autres sites Partagez cette page :
spacemarmotte 0 Signaler ce message Posté(e) 26 octobre 2010 Merci Pascal, je comprends l'idée générale mais... (forcément, il y a un "mais") les $var font référence à des champs différents de la base. Ce n'est pas id=$var1 AND id=$var2... c'est plutôt une requête croisée sur plusieurs champs de la bdd: if id=$var1 AND nom=$var2 AND region=$var3 ... j'avoue ne pas comprendre, dans la structure de la requête, comment placer les conditions.. Eric Partager ce message Lien à poster Partager sur d’autres sites Partagez cette page :
HimSelf 5 Signaler ce message Posté(e) 26 octobre 2010 si tu n'as pas de variable & qu'il ne faut donc pas la sélectionner tu met la condition dans ta requête SQL. mysql_query("SELECT * FROM matable WHERE '. if(isset($var1)) { id=$var1 AND } .' '. if(isset($var2)) { title=$var2 AND } .' etc... ! Partager ce message Lien à poster Partager sur d’autres sites Partagez cette page :
spacemarmotte 0 Signaler ce message Posté(e) 26 octobre 2010 (modifié) Merci Him.. j'avoue mieux comprendre cette syntaxe... même si je n'arrive pas a la mettre en pratique ! ça bug ! les variables sont bien reconnues et prennent bien les valeurs par $_POST (ou rien si je ne sélectionne rien !) mais on dirait que la requête ne donne aucun résultat ! j'ai pourtant ciblé sur des éléments présents dans la base ! a quoi servent les .' '. dans la requête ? c'est une concaténation ? Modifié 28 octobre 2010 par spacemarmotte Partager ce message Lien à poster Partager sur d’autres sites Partagez cette page :
spacemarmotte 0 Signaler ce message Posté(e) 28 octobre 2010 Apparemment, il n'est pas possible de mettre des if dans un SELECT !! j'ai lu ça sur quelques fora et tutos et comme je n'ai pas réussi à le mettre en place, je ne peux pas prouver le contraire !! J'y suis parvenu autrement. Si ça intéresse qqun: //on vérifie l'existence des variables S_POST $rq1 = NULL; if (isset($_POST["id"])) { $rq1 = " AND id='$id'"; } if(empty($_POST["id"])) { $rq1 = ''; } $rq2 = NULL; if (isset($_POST["nom"])) { $rq2 = " AND nom='$nom'"; } if(empty($_POST["nom"])) { $rq2 = ''; } etc etc.. pour toutes les variables a contrôler //le select: $requete = "SELECT * FROM mabase WHERE 1=1 $rq1 $rq2 .. autant de $rqX .. ORDER BY.. "; c'est un peu lourd, il existe peut-être plus simple... mais je n'ai pas trouvé ! et là, ça fonctionne ! Merci quand même pour le coup de main les copains ;-) Partager ce message Lien à poster Partager sur d’autres sites Partagez cette page :