Données de formulaire "undefined" [Résolu]

Signaler
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
-
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
-
Salut à tous,

mon problème d'aujourd'hui n'est pas à proprement parlé du php, mais c'est lié et j'ai pas trouvé de htmlfrance.com ^^

alors voilà, j'ai fait un formulaire html, avec envoi type POST.
Lorsque je récupère mes données via un $_POST['toto'], aucun problème pour certaines valeurs.
Mais pour d'autres, ça me retourne un undefined.
Pourant les ids existent réellement (je m'en sers même dans du javascript juste avant la validation du formulaire.)
Je me suis aperçu que ça concernait des balises select que j'ai encapsulés dans des div.
Le problème pourrait-il venir de là ?
Si oui, ai-je d'autre solutions que de virer les div, ou, si je veux garder ma mise en page, de rediriger mes valeurs vers des input hidden ?

Merci pour vos réponses.

++

Loki

5 réponses

Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Re,

Je m'interroge quand même à propos des 'name' et 'id'. J'étais persuadé que c'était les 'id' qui importaient.
= > c'est toujours le name que l'on récupère en post, jamais le id.

D'ailleurs j'utilise très peu les name et le w3c validator m'a jeté sur
le test xhtml strict à cause d'un name. j'ai dû passer en transitional.
=> c'est sans doute que tu mets un name sur une balise qui n'en autorise pas, par exemple document.getElementById('...');" qui passent très bien.</italique>
=> oui, et heureusement. Mais là c'est du javascript, pas du PHP.

Et comme vous allez pouvoir le constater, les $_POST['...'] fonctionnent bien avec des 'id', du moins partiellement.
=> je n'ai pas regardé en détail ton script, mais non, tu ne peux pas les récupérer juste avec l'id.

Par exemple :
<select id='frm_tete_opt1' onchange='modif_visu("frm_tete_opt1")'>
=> tu ne le récupères pas avec $_POST['frm_tete_opt1'];

par contre :
<select id='frm_tete_opt1' name='frm_tete_opt1' onchange='modif_visu("frm_tete_opt1")'>
le récupère correctement.

Cordialement,

Kohntark -
Messages postés
1309
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
12
Salut,

Est-il possible de voir le html stp ? Juste comme ça, dans un html syntaxiquement correct ça ne pose aucun problème que de mettre des select dans des div.
Messages postés
3708
Date d'inscription
lundi 5 juillet 2004
Statut
Membre
Dernière intervention
27 avril 2012
30
Salut,

Comme le dit TychoBrahe un peu de code serait le bienvenue.

Pourant les ids existent réellement
=> j'imagine que c'est ce que tu voulais dire, mais c'est les name que tu récupères, pas les id

Cordialement,

Kohntark -
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
Salut,

merci pour vos réponses.
Je m'interroge quand même à propos des 'name' et 'id'. J'étais persuadé que c'était les 'id' qui importaient.
D'ailleurs j'utilise très peu les name et le w3c validator m'a jeté sur le test xhtml strict à cause d'un name. j'ai dû passer en transitional.
Dans mon code js, je fais des "document.getElementById('...');" qui passent très bien.
Et comme vous allez pouvoir le constater, les $_POST['...'] fonctionnent bien avec des 'id', du moins partiellement.

Voici donc mon code (allégé uniquement au niveau contenu texte, la partie code est intacte :
#####################################################################################
<form method= 'post' action='index.php?p=c&amp;step=2' name='frm_crea1'>

    <label for='projectname'>Pour commencer, choisissons un nom pour ce projet : </label>
   

...

...

    <fieldset>    <legend>Composants de page web</legend>
        S&eacute;lectionnez ci-dessous les composants que vous voulez voir para&icirc;tre sur votre site :

        
        En-t&ecirc;te

       
      
       
        Menu

       
      
       
    Corps

       
      
       
        Pied de page

       
  
       
test

      
       

           
Options de l'En-t&ecirc;te

                <select             id ='frm_tete_opt1'     onchange= 'modif_visu("frm_tete_opt1")'>
                    <option value='1' selected='selected'>1 seule partie</option>
                    <option value='2a'>2 parties, petite d'abord</option>
                    <option value='2b'>2 parties, grande d'abord</option>
                    <option value='3'>3 parties</option>
                </select>
           

           
Options du Menu

                <select             id ='frm_menu_opt1'     onchange= 'modif_visu("frm_menu_opt1")'>
                    <option value='g' selected='selected'>Menu &agrave; gauche</option>
                    <option value='h'>Menu en haut</option>
                    <option value='d'>Menu &agrave; droite</option>
                </select>
           

           
Options du Corps

                <select             id ='frm_corps_opt1'    onchange= 'modif_visu("frm_corps_opt1")'>
                    <option value='1' selected='selected'>Largeur finie</option>
                    <option value='0'>Largeur infinie</option>
                </select>
           

           
Options du Pied de page

                <select             id ='frm_pied_opt1'    onchange= 'modif_visu("frm_pied_opt1")'>
                    <option value='1' selected='selected'>1 seule partie</option>
                    <option value='2a'>2 parties, petite d'abord</option>
                    <option value='2b'>2 parties, grande d'abord</option>
                    <option value='3'>3 parties</option>
                </select>
           

           
Options g&eacute;n&eacute;rales

               
Largeur totale px

           

       

      
       

           
Lorem ipsum dolor sit amet
           

           
Lorem ipsum dolor sit amet
           

           

                Lorem ipsum dolor sit amet

                ...

           

           
Lorem ipsum dolor sit amet
           

       

       

            Forme g&eacute;n&eacute;rale de votre future page.

      
       

           
Continuer

       

    </fieldset>
</form>
#####################################################################################

Le code à la validation est le suivant (en php cette fois) :

#####################################################################################
       $bd = new BD(NOM,PASS,BASE,SERVEUR);
        $bd->execRequete("truncate table temp_form");
       
        if (isSet($_POST['projectname']))
            $bd->execRequete("insert into temp_form values('projectname','{$_POST['projectname']}')");
        if (isSet($_POST['frm_tete']))
        {
            $bd->execRequete("insert into temp_form values('frm_tete','{$_POST['frm_tete']}')");
            $bd->execRequete("insert into temp_form values('frm_tete_opt1','{$_POST['frm_tete_opt1']}')");
        }
        if (isSet($_POST['frm_menu']))
        {
            $bd->execRequete("insert into temp_form values('frm_menu','{$_POST['frm_menu']}')");
            $bd->execRequete("insert into temp_form values('frm_menu_opt1','{$_POST['frm_menu_opt1']}')");
        }
        if (isSet($_POST['frm_corps']))
        {
            $bd->execRequete("insert into temp_form values('frm_corps','{$_POST['frm_corps']}')");
            $bd->execRequete("insert into temp_form values('frm_corps_opt1','{$_POST['frm_corps_opt1']}')");
            if ($_POST['frm_corps_opt1'] = = '1')
                $bd->execRequete("insert into temp_form values('frm_gen_opt1','{$_POST['frm_gen_opt1']}')");
        }
        if (isSet($_POST['frm_pied']))
        {
            $bd->execRequete("insert into temp_form values('frm_pied','{$_POST['frm_pied']}')");
            $bd->execRequete("insert into temp_form values('frm_pied_opt1','{$_POST['frm_pied_opt1']}')");
        }

        // test
        $resultat = $bd->execRequete("select * from temp_form");
        while($ligne=$bd->objetSuivant($resultat))
        {
            echo "$ligne->nom = $ligne->valeur

";
        }
#####################################################################################

Le résultat est visuellement :

Notice : Undefined index: frm_tete_opt1 in ...
Notice: Undefined index: frm_menu_opt1 in ...
Notice: Undefined index: frm_corps_opt1 in ...
Notice: Undefined index: frm_corps_opt1 in ...
Notice: Undefined index: frm_pied_opt1 in ...
projectname = nom de projet

frm_tete = 1
frm_tete_opt1 frm_menu 1
frm_menu_opt1 frm_corps 1
frm_corps_opt1 frm_pied 1

frm_pied_opt1 =

Voili voilou.
Merci à vous si vous trouvez ce qui cloche dans ce bout de code.

Loki
Messages postés
286
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
27 décembre 2009
2
salut,

j'ai suivi ton conseil et en effet, ce sont bien les name qui servent pour le php.
j'avais toujours cru le contraire.

merci beaucoup !!

Loki