Selectpicker gérer le select all PHP
Money -
Bonjour,
J'essaye de faire des champs pour faire un filtre et j'ai un petit problème qui se règle vite j'en suis sûr !
J'ai un champ de sélection (liste déroulante) à choix multiples :
<label for="etat">État</label> <select class="selectpicker" name="etat[]" multiple data-live-search="true" data-actions-box="true" id="etat" data-style="btn-white border" title=""> <option value="encours">En cours</option> <option value="clos">Clos</option> </select>
Avec donc 2 options soit en cours soit clos ce qui est traduit part 1 ou 0 dans ma bdd.
J'arrive à gérer lorsque l'utilisateur choisis une option ou l'autre mais quand il sélectionne les deux ça prend en compte seulement la première (encours).
Mon code :
if($_POST['etat'][0] == "encours") { $clos = " clos = 0 AND "; } else if($_POST['etat'][0] == "clos") { $clos = " clos = 1 AND "; } else if($_POST['etat'][0] == ["encours"] && $_POST['etat'][1] == ["clos"]) { $clos = " "; }
J'ai essayé pleins de trucs mais ça ne fonctionne pas, une idée ?
- Selectpicker gérer le select all PHP
- Winget upgrade --all - Guide
- Easy php - Télécharger - Divers Web & Internet
- Gerer stockage google - Guide
- Comment gérer les applications qui se lancent au démarrage - Guide
- Gerer les profils netflix - Guide
2 réponses
Bonjour,
Tu prends ton IF / ELSEIF / ELSE à l'envers.....
Forcément, si les deux sont cochés .. ta première condition est donc vraie .... et ton code ne va pas plus loin...
Il te faut donc tester en premier la présence des deux... puis chaque vérification individuelle.
Bien entendu, pour éviter d'éventuelles erreurs de code ( dans le cas ou un seul ou aucun élément ne serait cliqué ), il faut, avant de les utiliser, récupérer PROPREMENT les variables.
Je t'invite à appliquer ce qui est indiqué ici :
https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index
J'ai essayé comme ça :
$etat = isset($_POST['etat']) ? $_POST['etat'] : NULL; if(!empty($etat)) { if($etat == "encours" && $etat == "clos") { $clos = " "; } else if($etat == "encours") { $clos = "clos = 0 AND "; } else if($etat == "clos") { $clos = "clos = 1 AND "; } } else { echo "c'est vide"; $etat = null; $clos = ""; }
$donneesEtat = $this->incident->mapFilter($etat);
Une erreur à chaque résultat :
Que ça soit en cours, clos ou tout sélectionné :
Notice: Undefined variable: etat in C:\Applications\wamp64\www\portail\controllers\IncidentController..php on line 364
Notice: Undefined variable: clos in C:\Applications\wamp64\www\portail\models\Incident.class.php on line 1407
Si rien n'est sélectionné :
Notice: Undefined variable: etat in C:\Applications\wamp64\www\portail\controllers\IncidentController.php on line 364
$etat est une variable de type ARRAY qui contient 1 ou 2 valeurs
$etat[0] et/ou $etat[1]
ça reviendrait donc à écrire un truc du genre :
$etat = !empty($_POST['etat']) ? $_POST['etat'] : NULL; if($etat){ $etat_encours = !empty($etat[0]) ? true : false; $etat_clos = !empty($etat[1]) ? true : false; if($encours && $clos) { $clos = ""; } else if($etat_clos) { $clos = " clos = 1 AND "; } else if($encours) { $clos = " clos = 0 AND "; } // le reste de ton code }
J'ai repris ton code et remis $etat en paramètre de l'appel de ma fonction
Pour en cours, clos et rien :
Notice: Undefined variable: etat in C:\Applications\wamp64\www\portail\controllers\IncidentController.php on line 364
Notice: Undefined variable: encours in C:\Applications\wamp64\www\portail\models\Incident.class.php on line 1385
Notice: Undefined variable: encours in C:\Applications\wamp64\www\portail\models\Incident.class.php on line 1389
Notice: Undefined variable: clos in C:\Applications\wamp64\www\portail\models\Incident.class.php on line 1400
Quand c'est en cours et clos :
Notice: Undefined variable: etat in C:\Applications\wamp64\www\portail\controllers\IncidentController.php on line 364
Notice: Undefined variable: encours in C:\Applications\wamp64\www\portail\models\Incident.class.php on line 1385
Y a un truc qui cloche, en plus aucun des résultats n'est bon que ce soit en cour ou clos il me renvoi les 2 et quand je sélectionne les 2 il me renvoi seulement les clos, ça n'a aucun sens
Ma fonction de filtre :
public function mapFilter($etat) { $etat = !empty($_POST['etat']) ? $_POST['etat'] : NULL; $etat_encours = !empty($etat[0]) ? true : false; $etat_clos = !empty($etat[1]) ? true : false; if($etat_encours && $etat_clos) { $clos = ""; } else if($etat_clos) { $clos = " clos = 1 AND "; } else if($etat_encours) { $clos = " clos = 0 AND "; } $req = $this->getBdd()->prepare( "SELECT nom, lat, long, date, type, ref, clos FROM incidentville as iv LEFT JOIN ville as v ON iv.ville_id = v.id LEFT JOIN incident as i ON iv.incident_id = i.id WHERE ". $clos."lat IS NOT NULL" ); $req->execute(); $allVilleEtat = $req->fetchAll(PDO::FETCH_ASSOC); $req->closeCursor(); return $allVilleEtat; }
Mon appel à ma fonction
public function map() { $this->incident = new Incident; $donneesEtat = $this->incident->mapFilter($etat); require "views/incident/map.view.php"; }
Var_dump :
var_dump($_POST) quand j'arrive sur ma page me donne un tableau vide -> array(0) { }
Quand je sélectionne en cours -> array(2) { ["etat"]=> array(1) { [0]=> string(7) "encours" } ["filtremap"]=> string(0) "" }
filtremap et mon bouton pcq c'est au clique du bouton que ca s'affiche et c'est dans mon var dump de post pcq j'ai ça :
if(isset($_POST['filtremap'])) {
var_dump($_POST);
}
Un var dump de $_POST['etat] qaund je sélectionne en cours et clos par exemple :
array(2) { [0]=> string(7) "encours" [1]=> string(4) "clos" }
Quand je sélectionne clos :
array(1) { [0]=> string(4) "clos" }
Quand je sélectionne en cours :
array(1) { [0]=> string(4) "en cours" }
Ce que ça me retourne :
Ca c'est le var_dump de ma variable $donneesEtat :
array(27) { [0]=> array(7) { ["nom"]=> string(14) "nom d'une ville" ["latitude"]=> string(7) "49.3167"...
et c'est la que je vois si il me sort que des incidents clos, encours ou les deux avec :
[...]"clos"]=> string(1) "0"
Pour l'instant avec ce code, mes erreurs sont :
Quand je sélectionne encours, clos ou rien :
Notice: Undefined variable: etat in C:\Applications\wamp64\www\portail\controllers\IncidentController.php on line 364
Notice: Undefined variable: clos in C:\Applications\wamp64\www\portail\models\Incident.class.php on line 1400
Quand je sélectionne les 2 :
Notice: Undefined variable: etat in C:\Applications\wamp64\www\portail\controllers\IncidentController.php on line 364
Les infos dans les var_dump des $_POST sont cohérentes, je vois pas ou est le problème
Ok tout s'affiche bien mais j'ai quand même des erreurs comme tu dis "récupérer proprement les variables.
J'ai une erreur quand je chois en cours :
Et une autre quand je ne sélectionne rien :
Pcq j'utilise ma fonction pour filtrer dans une fonction de mon controller :
Sinon ce que je récupère est bon, code :
,
Si tu récupères proprement les variables avant de les utiliser ...... tu ne dois donc plus utiliser les $_POST dans le reste du code....