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

 PHP Discussion :

[sf 1.4x] Pb de sauvegarde de données $form-->save() [1.x]


Sujet :

PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut [sf 1.4x] Pb de sauvegarde de données $form-->save()
    Bonjour,
    Je suis un débutant symfony (6 mois), je tiens à m'excuser d'avance si mes propos ne sont pas claires. Voila mon problème.

    J'ai créée un formulaire d'inscription. Il s'affiche correctement et il est correctement validé. Pour vérifier, je fais une sortie vers une page :
    $this->redirect('utilisateur/thankyou?'.http_build_query($this->form->getValues())); Je récupére tous les champs correctement formatés.

    Je lance mon formulaire d'inscription depuis ma page principale :
    fichier indexSuccess.php
    <a href="<?php echo url_for('@inscription'); ?>">Inscription</a>

    Mon fichier routing.yml contient :
    Code yaml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    inscription:
      url:   /:sf_culture/inscription.html
      #url:    /inscription.html
      param: { module: utilisateur, action: new }
      requirements:
          sf_culture: (?:fr|en)

    Le fichier action.class.php du module utilisateur contient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     public function executeNew(sfWebRequest $request)
      {
        $this->form = new UsagerUtilisateurForm();
        if ($request->isMethod('post'))
        {$this->processForm($request, $this->form);}
        }
    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    protected function processForm(sfWebRequest $request, sfForm $form)
      {
       $this->forward404Unless($request->isMethod('post'));
       $form->bind($request->getParameter($form->getName()));
       if ($this->form->isValid())
        {
            $utilisateur = $form->save();
    	$utilisateur->setDateInscription(date('Y-m-d H:i:s'));
    	$utilisateur->setIpInscription($_SERVER['REMOTE_ADDR']);
            $utilisateur->save();
     
            //test :
    $this->redirect('utilisateur/thankyou?'.http_build_query($this->form->getValues()));
    }
    Le problème :
    1 - les données affichés sur le formulaire sont enregistrés en base (commande insert) sauf si j'utilise un setPostValidator,
    2 - la fonction $utilisateur->save (commande update) ne met pas à jour l'enregistrement courrant avec les données setDateInscription et setIpInscription, dans la requête :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE usager_utilisateur SET date_inscription = ?, ip_inscription = ? WHERE id = ? AND usager_theme_id = ? AND usager_logo_id = ? AND usager_logo_usager_theme_id_theme = ? AND usager_timezone_id = ? AND usager_nga_id = ? - (2011-02-09 14:54:05, 127.0.0.1, , , , , , )

    Il me semble que le problème soit lié à l'id qui n'est pas repris dans la requête.

    Cela fait 5 jours que je cherche, je n'ai pas trouvé de solution pour régler mon problème.

    Pour contourner le problème, je vais passer ces deux champs en hidden, c'est pas propre mais je pense que cela va marcher.

    Si quelqu'un peu m'aider je serais très content

    merci d'avance.

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    C'est re-moi, le contournement fonctionne (POINT 1)

    J'ai ajouté les champs en hidden :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $this->setWidgets(array(
         'date_inscription'     => new sfWidgetFormInputHidden(), 
         'ip_inscription'        => new sfWidgetFormInputHidden(),
    puis je les ai initialisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
          $date_inscription = date('Y-m-d H:i:s');
          $ip_inscription = $_SERVER['REMOTE_ADDR'];
          $this->setDefault ('date_inscription', $date_inscription);
          $this->setDefault ('ip_inscription', $ip_inscription);
    Et j'ai déclaré les validateurs qui vont bien (datetime + regex)

    Et ça marche. Tous mes champs sont sauvegardés dans ma babase.

    Il me reste à comprendre pourquoi quand j'active le code ci-dessous je n'ai rien en base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    $this->validatorSchema->setPostValidator(
           new sfValidatorAnd(
              array(
                    new sfValidatorSchemaCompare(
                        'mot_de_passe',  sfValidatorSchemaCompare::EQUAL, 'confirmation',
                         array(),
                         array('invalid' => "The user password and password confirmation are different.")
                              ),
                     new sfValidatorCallback(array('callback'=> array($this, 'checkUserAvailability'))),
                     new sfValidatorCallback(array('callback'=> array($this, 'checkWeakPassword')))
                  ))
                );
    Quand je valide mon formulaire, au moment de l'enregistrement en base, juste avant la requête INSERT, j'ai :
    Feb 09 17:01:00 symfony [warning] {sfWebDebugLogger} Warning at D:\wamp\symfony-1.4.8\lib\plugins\sfDoctrinePlugin\lib\form\sfFormDoctrine.class.php on line 169 (Invalid argument supplied for foreach())
    Feb 09 17:01:00 symfony [err] {sfWebDebugLogger} Error at D:\wamp\symfony-1.4.8\lib\plugins\sfDoctrinePlugin\lib\vendor\doctrine\Doctrine\Record.php on line 1970 (Argument 1 passed to Doctrine_Record::fromArray() must be an array, null given, called in D:\wamp\symfony-1.4.8\lib\plugins\sfDoctrinePlugin\lib\form\sfFormDoctrine.class.php on line 150 and defined)
    Quand je commente les deux fonctions, ça marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    new sfValidatorCallback(array('callback'=> array($this, 'checkUserAvailability'))),
    new sfValidatorCallback(array('callback'=> array($this, 'checkWeakPassword')))

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 6
    Par défaut
    J'ai résolu le problème du sfValidatorCallback :

    Pour que ça marche dans mon cas, il ne faut pas utiliser un sfValidatorAnd mais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $this->validatorSchema->setPostValidator(
                new sfValidatorSchemaCompare(
                    'mot_de_passe',  sfValidatorSchemaCompare::EQUAL, 'confirmation',
                     array(),
                     array('invalid' => "The user password and password confirmation are different.")
                   ));
     
          $this->validatorSchema->setPostValidator(
               new sfValidatorCallback(
                     array('callback'=> array($this,'checkUserAvailability')))
                  );
    Et la ça marche.

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

Discussions similaires

  1. [VB.NET] Comment sauvegarder des données ?
    Par Aspic dans le forum VB.NET
    Réponses: 14
    Dernier message: 15/07/2007, 15h47
  2. Sauvegarde de données dans fichier csv
    Par issou dans le forum C
    Réponses: 1
    Dernier message: 22/12/2005, 08h36
  3. [debutant][XML] sauvegarde de donnée provenant de textbox
    Par moust dans le forum XML/XSL et SOAP
    Réponses: 4
    Dernier message: 28/06/2005, 15h22
  4. sauvegarde des données des tables
    Par tomm dans le forum Bases de données
    Réponses: 18
    Dernier message: 27/04/2004, 21h29
  5. [Kylix] Sauvegarde de donnée utilisateur....
    Par Eclypse dans le forum EDI
    Réponses: 1
    Dernier message: 11/05/2002, 17h21

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