Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

$_POST zappe un champ ?


Sujet :

Langage PHP

  1. #1
    Modérateur

    $_POST zappe un champ ?
    Bonjour,

    Je me retrouve avec l'erreur suivante à l'envoi du formulaire :
    Notice: Undefined index: niveau in [mon chemin]/Ajouter.php on line 478
    La ligne 478 en question, pour info :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    $this->traiterDiplomeSuperieur($objEtudiant, intval($_POST['dernDipl']['id']), intval($_POST['dernDipl']['type']), 3,
    					intval($_POST['dernDipl']['niveau']), trim($_POST['dernDipl']['nom']), intval($_POST['dernDipl']['annee']),
    					intval($_POST['dernDipl']['idVille']), intval($_POST['dernDipl']['mention']));


    Un coup d'oeil au formulaire dans le navigateur :
    Code HTML :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <select id="dernDipl[niveau]" name="dernDipl[niveau]" class="hidden selectLong">
    											<option value="">
    							I - Sans niveau ou niveau inconnu						</option>
    											<option value="">
    							1 - Niveau I (3ème cycle, supérieur à maîtrise)						</option>
    											<option value="">
    							2 - Niveau II (licence ou maîtrise)						</option>
    											<option value="">
    							3 - Niveau III (DUT, BTS, 1er cycle de l'ens.sup.)						</option>
    											<option value="">
    							4 - Niveau IV (BP, BT, bac, bac pro, bac techno)						</option>
    											<option value="">
    							5 - Niveau V (BEP, CAP, 1er degré CFPA, Diplôme national des brevets)						</option>
    											<option value="">
    							0 - SANS DIPLOME						</option>
    										</select>


    Bon... je me dis que c'est peut-être parce le champ est "hidden" ?

    Je print_r($_POST) et l'indice niveau est effectivement absent :
    [dernDipl] => Array
    (
    [type] => 12
    [nom] => Licence AES
    [id] => 215
    [annee] => 2018
    [nomVille] => Inconnue
    [idVille] =>
    [mention] => 0
    [estPlusHaut] => 1
    )
    Sauf que juste après, pour le plus haut diplôme, l'indice niveau est bien présent :
    [plusHautDipl] => Array
    (
    [type] => 0
    [niveau] =>
    [nom] =>
    [id] => 0
    [annee] =>
    [pays] => 0
    [nomVille] =>
    [idVille] => 0
    [mention] => 0
    )
    Ainsi d'ailleurs que pour les deux autres rubriques de diplôme !

    Pourtant, les 4 rubriques de diplôme supérieurs sont faits de la même manière. Exemple avec le niveau du plus haut diplôme :
    Code HTML :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <select id="plusHautDipl[niveau]" name="plusHautDipl[niveau]" class="hidden selectLong">
    											<option value="">
    							I - Sans niveau ou niveau inconnu						</option>
    											<option value="">
    							1 - Niveau I (3ème cycle, supérieur à maîtrise)						</option>
    											<option value="">
    							2 - Niveau II (licence ou maîtrise)						</option>
    											<option value="">
    							3 - Niveau III (DUT, BTS, 1er cycle de l'ens.sup.)						</option>
    											<option value="">
    							4 - Niveau IV (BP, BT, bac, bac pro, bac techno)						</option>
    											<option value="">
    							5 - Niveau V (BEP, CAP, 1er degré CFPA, Diplôme national des brevets)						</option>
    											<option value="">
    							0 - SANS DIPLOME						</option>
    										</select>


    Je ne comprends pas pourquoi le niveau du dernier diplôme est absent et pas celui des autres diplômes !

    La seule différence que je vois est que le dernier diplôme dans le formulaire est renseigné (donc la partie de $_POST est valorisée) et pas les autres.
    Ceci expliquerait-il cela ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  2. #2
    Rédacteur/Modérateur

    Bonjour,

    1-
    Citation Envoyé par CinePhil Voir le message
    ...c'est peut-être parce le champ est "hidden" ?...
    Attention de ne pas confondre "champs de type="hidden""* et "élément masqué" (avec display:none; ou visibility:hidden !

    Comment est définie la classe "hidden" ?

    * il n'y a pas de type="hidden" pour les <select>.

    2- Qu'espères-tu récupérer avec ce <select> "masqué" ?
    D'autant que : <option value=""> : toutes les value sont vide...
    "Si tu suis le chemin qui s'appelle « plus tard », tu arriveras à la place qui s'appelle « jamais »."
    François Camille Prévot (1910-1996), instituteur puis Directeur d'école et... mon grand-père.
    "Pose ta question, tu seras idiot une seconde. Ne la pose pas, tu seras idiot toute ta vie."
    Albert Einstein (1879-1955).
    Mes tutos DVP
    Gestion-Affichage de Nouvelles
    Affichage en tableau HTML
    Fonctions de redimensionnement d'images

  3. #3
    Modérateur

    D'autant que : <option value=""> : toutes les value sont vide
    Bien vu !
    Je ne sais pas si le problème était dû à ça mais en l'ayant corrigé, mon niveau du dernier diplôme est bien apparu dans $_POST et je n'ai plus l'erreur.
    Merci.

    2- Qu'espères-tu récupérer avec ce <select> "masqué" ?
    Si le diplôme est un diplôme français, on choisit un type dans une liste et le niveau est connu automatiquement. Mais comme je n'ai pas de référence de tous les diplômes mondiaux, si le type choisi est un diplôme étranger, alors on doit indiquer de quel niveau est le diplôme, donc apparition automatique de la liste de sélection du niveau dans ce cas, grâce à Javascript.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !