IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Symfony PHP Discussion :

Champ id de type hidden invalid [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 122
    Par défaut Champ id de type hidden invalid
    Bonjour,

    Voila j'ai un petit formulaire pour définir un nouveau mot de passe, il n'y a que deux champs.
    Et quand je clique sur le bouton enregistrer j'ai un message id:invalid... je ne comprend pas du tout pourquoi il me fait ça...

    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <form action="<?php echo url_for('user_user/savemdp') ?>" method="post" name="formpwd">
        <?php  echo $form->renderGlobalErrors();  ?>
        <?php  echo $form->renderHiddenFields(false);  ?>
     
    <table>
        <tr>
            <td colspan="2"><h4 style="width:100%">Modification du mot de passe</h4></td>
        </tr>
        <tr>
            <?php echo $form['mdp']->renderError(); ?>
            <?php echo $form['remdp']->renderError(); ?>
        </tr>
        <tr>
            <td><?php echo $form['mdp']->renderLabel(); ?><span style="color :#cc0000;font-weight: bold"> *</span></td>
            <td style="padding-left: 5px;"><?php echo $form['mdp'];  ?></td>
            <td style="vertical-align: middle; padding-top: 18px"></td>
        </tr>
        <tr>
            <td><?php echo $form['remdp']->renderLabel(); ?><span style="color :#cc0000;font-weight: bold"> *</span></td>
            <td style="padding-left: 5px;"><?php echo $form['remdp'];  ?></td>
            <td style="vertical-align: middle; padding-top: 18px"></td>
        </tr>
    </table>
    <div class="div_foot">
     
    <resp:button class="back_button" icon="back" id="id_back1" href="<?php echo url_for('user_user/show').'?id='.$form->getObject()->getId() ?>" >Annuler</resp:button>
     
    <resp:button class="back_button" icon="save" id="id_back2" href="javascript:document.formpwd.submit();" >Enregistrer</resp:button>
     
    </div>
     
    </form >
    L'action pour l'affichage du template

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public function executePassword(sfWebrequest $request){
            $this->form = new USER_UserForm(USER_User::find($request["id"]));
            $this->form->setPassword();
            $this->user = USER_User::find($request->getParameter('id'));
        }
    L'action pour la sauvegarde du template:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public function executeSavemdp(sfWebrequest $request){
     
            $this->form = new USER_UserForm();
            $this->form->setPassword();
     
            $this->user = USER_User::find($request['user_user']['id']);
            $a = $this->user;
     
            $this->form->bind(array('id'=>$request->getParameter('id'), 'mdp'=>$request->getParameter('mdp'),'remdp'=>$request->getParameter('remdp')));
            if ($this->form->isValid() ){
                $this->redirect('user_user/show').'id='.$request->getParameter('id');
            }else{
                $this->setTemplate('password');
            }
        }
    Si quelqu'un a une idée je suis preneur car la je sèche complètement.

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2009
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 321
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php  echo $form->renderHiddenFields(false);  ?>
    Ton champ id est bien de type hidden ?
    Si oui alors vu que tu ne passe pas les champs cachés au formulaire à cause de cette ligne il est normal de retrouver une erreur.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 122
    Par défaut
    Bon j'ai essayé de le passer à true, ça ne change rien. et de plus le champ caché est dans les deux cas dans mon formulaire...

  4. #4
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Bon, on va commencer par ce que je n'aime pas trop

    Le css dans le html... je verrais bien l'utilisation de feuille de style.

    La balise <resp:button> vasistas (je sais, ce n'est pas une petite fenêtre ronde !).

    Le plus beau pour la fin, le passage de l'id de l'utilisateur qui change de mot de passe dans le formulaire de changement de mot de passe et celui-ci qui ne demande même pas de confirmation de l'ancien mot de passe. Avec ce code, pour peu que j'ai une session ouverte, je te change le mot de passe de tous les utilisateurs.

    Justement, tu as une session ouverte, alors utilises là. Tu as certainement un objet sfUser en place pour ta session, il te suffit d'y inclure l'id de l'utilisateur et de le stocker dans la session. Donc plus d'id à récupérer (et plus d'erreur) et tu sécurise ton changement de mot de passe, d'une pierre, deux coups.

    Bon, cela implique des modifications un peu partout, dans ton code, mais je pense que cela en vaut largement la peine.

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2009
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2009
    Messages : 122
    Par défaut
    Citation Envoyé par Michel Rotta Voir le message
    Bon, on va commencer par ce que je n'aime pas trop

    Le css dans le html... je verrais bien l'utilisation de feuille de style.
    Je sais c'est juste pour mettre en rouge les astérix des champs obligatoires

    Citation Envoyé par Michel Rotta Voir le message
    La balise <resp:button> vasistas (je sais, ce n'est pas une petite fenêtre ronde !).
    Ha Ha, en fait il s'agit de composant pour netbeans qui facilite l'utilisation d'objet symfony et autres.

    Citation Envoyé par Michel Rotta Voir le message
    Le plus beau pour la fin, le passage de l'id de l'utilisateur qui change de mot de passe dans le formulaire de changement de mot de passe et celui-ci qui ne demande même pas de confirmation de l'ancien mot de passe. Avec ce code, pour peu que j'ai une session ouverte, je te change le mot de passe de tous les utilisateurs.

    Justement, tu as une session ouverte, alors utilises là. Tu as certainement un objet sfUser en place pour ta session, il te suffit d'y inclure l'id de l'utilisateur et de le stocker dans la session. Donc plus d'id à récupérer (et plus d'erreur) et tu sécurise ton changement de mot de passe, d'une pierre, deux coups.

    Bon, cela implique des modifications un peu partout, dans ton code, mais je pense que cela en vaut largement la peine.
    Je comprends à peu près ce que tu veux dire, c'est juste que symfony met automatiquement les id des tables en champs caché, donc c'est un peu pour ca que je cherche à les utiliser (en fait j'ai toujours fais comme ca... re )
    Et pour la saisie de l'ancien mot de passe je suis d'accord mais c'est le client qui veut ça, je sais c'est un peu bête mais comme on dis le client est roi....

    Sinon j'ai trouvé la solution à mon problème, quand je crée une nouvelle instance de mon formulaire, je lui ai passé l'objet user en paramètre comme ceci

    Code php : 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
    public function executeSavemdp(sfWebrequest $request){
     
            $this->form = new USER_UserForm(USER_User::find($request['user_user']['id']));
            $this->form->setPassword();
     
            $this->user = USER_User::find($request['user_user']['id']);
            $a = $this->user;
     
            $this->form->bind(array('id'=>$request->getParameter('id'), 'mdp'=>$request->getParameter('mdp'),'remdp'=>$request->getParameter('remdp')));
            if ($this->form->isValid() ){
                $this->redirect('user_user/show').'id='.$request->getParameter('id');
            }else{
                $this->setTemplate('password');
            }
        }

    Sinon pour la récupération de l'id avec la session je vois à peu près le principe, mais comment tu fais pour le "bind" ? Si j'ai compris son fonctionnement, il lie le formulaire avec les données, donc si il n'y a pas d'id il ne sais pas à quel objet de la table user_user se lier...

    Je vais quand même tester sans dès que j'aurais un peu de temps

    Merci encore pour tes explications

  6. #6
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Citation Envoyé par bedomon Voir le message
    Je sais c'est juste pour mettre en rouge les astérix des champs obligatoires
    Ceci n'empêche pas un <spam class="evidence01"> et une correspondance dans la feuille de style. Quoique, vu la localisation, un simple <spam> devrait suffire à repérer l'étoile. A voir si d'autres textes doivent être en rouge...

    Citation Envoyé par bedomon Voir le message
    Ha Ha, en fait il s'agit de composant pour netbeans qui facilite l'utilisation d'objet symfony et autres.
    Il faut que je creuse ça !

    Quoique, vu que tous mes correspondants ne travaillent pas nécessairement sous netbean...

    Citation Envoyé par bedomon Voir le message
    Je comprends à peu près ce que tu veux dire, c'est juste que symfony met automatiquement les id des tables en champs caché, donc c'est un peu pour ca que je cherche à les utiliser (en fait j'ai toujours fais comme ca... re )
    Et pour la saisie de l'ancien mot de passe je suis d'accord mais c'est le client qui veut ça, je sais c'est un peu bête mais comme on dis le client est roi....

    Sinon j'ai trouvé la solution à mon problème, quand je crée une nouvelle instance de mon formulaire, je lui ai passé l'objet user en paramètre comme ceci

    Code php : 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
    public function executeSavemdp(sfWebrequest $request){
     
            $this->form = new USER_UserForm(USER_User::find($request['user_user']['id']));
            $this->form->setPassword();
     
            $this->user = USER_User::find($request['user_user']['id']);
            $a = $this->user;
     
            $this->form->bind(array('id'=>$request->getParameter('id'), 'mdp'=>$request->getParameter('mdp'),'remdp'=>$request->getParameter('remdp')));
            if ($this->form->isValid() ){
                $this->redirect('user_user/show').'id='.$request->getParameter('id');
            }else{
                $this->setTemplate('password');
            }
        }
    Si cela marche, tant mieux, mais ça me fait un peu l'effet bricollage, sans compter le nombre de requêtes...

    Citation Envoyé par bedomon Voir le message
    Sinon pour la récupération de l'id avec la session je vois à peu près le principe, mais comment tu fais pour le "bind" ? Si j'ai compris son fonctionnement, il lie le formulaire avec les données, donc si il n'y a pas d'id il ne sais pas à quel objet de la table user_user se lier...
    Il le sait, vu que l'id du user est dans la session, il suffit donc, dans la requête qui récupère l'utilisateur d'utiliser l'id qui provient de la session et est sécurisé plutôt que celui qui provient du formulaire et n'est pas garanti.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] recuper valeur d'un champs de type hidden
    Par mbakatre dans le forum AJAX
    Réponses: 8
    Dernier message: 20/09/2011, 12h12
  2. [Formulaire] Longueur d'un champ type hidden
    Par jreeman dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 29/12/2006, 23h07
  3. créer un type hidden dans une fonction javascript
    Par amelhog dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/05/2005, 12h17
  4. [input type hidden] devient nul
    Par Nadine dans le forum ASP
    Réponses: 17
    Dernier message: 25/04/2005, 20h26
  5. Champs de mauvais type
    Par sebos63 dans le forum Bases de données
    Réponses: 2
    Dernier message: 17/06/2004, 16h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo