Données de formulaire "undefined"

Résolu
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 - 12 avril 2009 à 01:04
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 - 13 avril 2009 à 17:34
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

kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
13 avril 2009 à 10:28
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 -
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
12 avril 2009 à 01:13
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.
kohntark Messages postés 3705 Date d'inscription lundi 5 juillet 2004 Statut Membre Dernière intervention 27 avril 2012 30
12 avril 2009 à 10:16
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 -
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
12 avril 2009 à 23:04
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Loki6 Messages postés 286 Date d'inscription dimanche 27 novembre 2005 Statut Membre Dernière intervention 27 décembre 2009 2
13 avril 2009 à 17:34
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
Rejoignez-nous