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 ?
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
-
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 :
Notice: Undefined offset: 1 in C:\Applications\wamp64\www\portail\models\Incident.class.php on line 1383Et une autre quand je ne sélectionne rien :
Notice: Undefined index: etat in C:\Applications\wamp64\www\portail\controllers\IncidentController.php on line 364Pcq j'utilise ma fonction pour filtrer dans une fonction de mon controller :
$donneesEtat = $this->incident->mapFilter($_POST['etat']);
Sinon ce que je récupère est bon, code :
$etat = isset($_POST['etat']) ? $_POST['etat'] : NULL; if(!empty($_POST['etat'])) { if($_POST['etat'][0] == "encours" && $_POST['etat'][1] == "clos") { $clos = " "; } else if($_POST['etat'][0] == "encours") { $clos = "clos = 0 AND "; } else if($_POST['etat'][0] == "clos") { $clos = "clos = 1 AND "; } } else { echo "c'est vide"; $etat = null; $clos = ""; },
-
-
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 1407Si 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 1400Quand 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 1385Y 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 1400Quand je sélectionne les 2 :
Notice: Undefined variable: etat in C:\Applications\wamp64\www\portail\controllers\IncidentController.php on line 364Les infos dans les var_dump des $_POST sont cohérentes, je vois pas ou est le problème
-