Requête MySQL avec conditions en fonction du formulaire envoyé
GrifOli
Messages postés
2111
Date d'inscription
Statut
Membre
Dernière intervention
-
cyril1982 Messages postés 110 Date d'inscription Statut Membre Dernière intervention -
cyril1982 Messages postés 110 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai conçu un formulaire assez simple qui permet à un utilisateur de faire une recherche dans une base de données MySQL. Il y a 2 champs avec une liste déroulante que l'utilisateur peut choisir, disons les champs A et B. Ce que je souhaite, c'est que si l'utilisateur choisi seulement le champ A, la requête cherche tous les résultats parmi le champ sélectionné. Même chose pour le champ B. Et si les deux champs sont laissés vides, la requête renvoie tous les résultats.
Pour l'instant, la seule façon que j'ai trouvée de faire, c'est de créer des conditions PHP pour chacune des possibilités (A et B choisis, A choisi, B choisi, aucun choisi) avec la requête MySQL appropriée pour chacune des possibilités... Voir le code ci-dessous:
Cela fonctionne, mais j'imagine qu'il doit y avoir une façon de créer une seule requête dans mon code et que les conditions soient en fonction de ce qui est choisi par l'utilisateur? Mais je n'y parviens pas. Si je veux avoir 4 champs différents éventuellement, cela fait 16 possibilités...
Merci pour votre aide!
J'ai conçu un formulaire assez simple qui permet à un utilisateur de faire une recherche dans une base de données MySQL. Il y a 2 champs avec une liste déroulante que l'utilisateur peut choisir, disons les champs A et B. Ce que je souhaite, c'est que si l'utilisateur choisi seulement le champ A, la requête cherche tous les résultats parmi le champ sélectionné. Même chose pour le champ B. Et si les deux champs sont laissés vides, la requête renvoie tous les résultats.
Pour l'instant, la seule façon que j'ai trouvée de faire, c'est de créer des conditions PHP pour chacune des possibilités (A et B choisis, A choisi, B choisi, aucun choisi) avec la requête MySQL appropriée pour chacune des possibilités... Voir le code ci-dessous:
if (($_POST['a']=='Tous') && ($_POST['b']=='Tous')) { $req = $bdd_stats->prepare('SELECT * FROM stats'); $req->execute(array()) or die(print_r($bdd_stats->errorInfo())); ... } elseif (($_POST['a']=='Tous')) { $req = $bdd_stats->prepare('SELECT * FROM stats WHERE b = :b'); $req->execute(array('b' => $_POST['b'])) or die(print_r($bdd_stats->errorInfo())); ... } elseif (($_POST['b']=='Tous')) { $req = $bdd_stats->prepare('SELECT * FROM stats WHERE a = :a'); $req->execute(array('a' => $_POST['a'])) or die(print_r($bdd_stats->errorInfo())); ... } else { $req = $bdd_stats->prepare('SELECT * FROM stats WHERE a = :a AND b = :b'); $req->execute(array('a' => $_POST['a'], 'b' => $_POST['b'])) or die(print_r($bdd_stats->errorInfo())); ... }
Cela fonctionne, mais j'imagine qu'il doit y avoir une façon de créer une seule requête dans mon code et que les conditions soient en fonction de ce qui est choisi par l'utilisateur? Mais je n'y parviens pas. Si je veux avoir 4 champs différents éventuellement, cela fait 16 possibilités...
Merci pour votre aide!
A voir également:
- Requête MySQL avec conditions en fonction du formulaire envoyé
- Whatsapp formulaire opposition - Guide
- Fonction si et - Guide
- Formulaire de réclamation facebook - Guide
- Formulaire de reclamation instagram - Guide
- Message non envoyé - Forum Mobile
1 réponse
Bonjour,
Tu pourrais reformater ton code de cette façon :
Ou encore :
Tu pourrais reformater ton code de cette façon :
$where = ''; if ($_POST['a']!='Tous') { if ($where == '') $where .= ' where a = :a '; else $where .= ' and a = :a '; } if ($_POST['b']!='Tous') { if ($where == '') $where .= ' where b = :b '; else $where .= ' and b = :b '; } $req = $bdd_stats->prepare('SELECT * FROM stats'.$where); $req->execute(array('a' => $_POST['a'], 'b' => $_POST['b'])) or die(print_r($bdd_stats->errorInfo()));
Ou encore :
$where = ''; $params = array('a', 'b'); $paramValues = array(); foreach ($params as $param) { if ($_POST[$param]!='Tous') { if ($where == '') $where .= ' where '.$param.' = :'.$param.' '; else $where .= ' and '.$param.' = :'.$param.' '; $paramValues[$param] = $_POST[$param]; } } $req = $bdd_stats->prepare('SELECT * FROM stats'.$where); $req->execute($paramValues) or die(print_r($bdd_stats->errorInfo()));