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 de vérification Captcha pour un formulaire [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par défaut Champ de vérification Captcha pour un formulaire
    Bonjour,

    Je suis actuellement en train de développer un site avec Symfony et j'aurais besoin d'aide en ce qui concerne le rajout d'un champ de vérification Captcha à la fin d'un formulaire de contact.

    Mon formulaire ContactForm est très simple, le voici :

    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
    33
    <?php
     
    class ContactForm extends sfForm
    {
    	public function configure()
    	{
    		$this->setWidgets(array(
    			'Nom' => new sfWidgetFormInput(),
    			'Prenom' => new sfWidgetFormInput(),
    			'Email' => new sfWidgetFormInput(),
    			'Message' => new sfWidgetFormTextarea(),
    			));
     
    		$this->widgetSchema->setNameFormat('contact[%s]');
     
    		$this->setValidators(array(
    			'Nom' => new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 50),
    				array('required' => 'Nom obligatoire', 'min_length' => 'Champ trop court', 'max_length' => 'Champ trop long')),
    			'Prenom' => new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 50),
    				array('required' => 'Prenom obligatoire', 'min_length' => 'Champ trop court', 'max_length' => 'Champ trop long')),
    			'Email' => new sfValidatorEmail(array('required'=>true), 
    				array('required' => 'Email obligatoire', 'invalid' => 'Adresse email invalide')),
    			'Message' => new sfValidatorString(array('required'=>true, 'min_length' => 4), 
    				array('required' => 'Message obligatoire','min_length' => 'Le message est trop court'))
    			));
     
     
     
     
    	}
    }
     
    ?>
    J'ai entendu parler de sfCaptchaPlugin mais je ne sais pas du tout comment l'installer et comment l'utiliser. Si quelqu'un pouvait me fournir quelques indications à ce niveau-là, je lui en serais très reconnaissant.

    Merci d'avance pour votre aide !

  2. #2
    Membre éclairé

    Profil pro
    Développeur Web
    Inscrit en
    Mai 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2007
    Messages : 51
    Par défaut
    Perso, je te conseille : sfCryptoCaptcha, simple à installer, qui fonctionne même en local avec Wamp pour le tester !

    Une fois installé, il faut juste ajouter dans ton formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $this->setWidgets(array(
    'Nom' => new sfWidgetFormInput(),
    'Prenom' => new sfWidgetFormInput(),
    'Email' => new sfWidgetFormInput(),
    'Message' => new sfWidgetFormTextarea(),
    'captcha'       => new sfWidgetFormInput(),
    ));
    plus

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    $this->setValidators(array(
    'Nom' => new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 50),
    array('required' => 'Nom obligatoire', 'min_length' => 'Champ trop court', 'max_length' => 'Champ trop long')),
    'Prenom' => new sfValidatorString(array('required' => true, 'min_length' => 3, 'max_length' => 50),
    array('required' => 'Prenom obligatoire', 'min_length' => 'Champ trop court', 'max_length' => 'Champ trop long')),
    'Email' => new sfValidatorEmail(array('required'=>true),
    array('required' => 'Email obligatoire', 'invalid' => 'Adresse email invalide')),
    'Message' => new sfValidatorString(array('required'=>true, 'min_length' => 4),
    array('required' => 'Message obligatoire','min_length' => 'Le message est trop court')),
    'captcha' => new sfValidatorSfCryptoCaptcha(array('required' => true, 'trim' => true),
                                                       array('wrong_captcha' => 'Le code que vous avez copier n\'est pas valide.',
                                                             'required' => 'Vous n\'avez pas copier le code de sécurité.')),
    ));
    et aussi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->errorSchema = new sfValidatorErrorSchema($this->validatorSchema);
    et après le template "newSuccess" ou autres qui appel le formulaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    // in the head of your template, call the helper
    use_helper('sfCryptoCaptcha');
    //the helper functions
    captcha_image();
    captcha_reload_button();
    ?>
    et après ton template "_form" dont la mise en forme est en liste pour moi, je rajoute manuellement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     <li><span><label for="votreavis_captcha_code"><?php echo captcha_reload_button();?></label></span><?php echo captcha_image(); ?></li>
    Et après c'est nickel, pas de service externe, comme avec sfReCaptchaPlugin et une personnalisation facile dans ton fichier app.yml !

    Après c'est à toi de faire un choix, moi je l'ai fait avec sfCryptoCaptchaPlugin

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par défaut
    Merci beaucoup pour ta réponse rapide et détaillée !

    J'ai bien suivi toutes les étapes de ta démarche mais j'ai encore un problème...
    Lorsque j'essaie d'afficher mon formulaire, j'obtiens un message d'erreur "Widget "Captcha" does not exist."

    Visiblement, le problème se situerait à la ligne 50 de mon template (je l'indique en gras) :

    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    <?php
    // in the head of your template, call the helper
    use_helper('sfCryptoCaptcha');
    
    //the helper functions
    captcha_image();
    captcha_reload_button();
    ?>
    
    <h1>Envoyer un message</h1>
    <form action="<?php echo url_for('contact/index') ?>" method="POST">
      <table>
        <tr>
            <th>
            <?php echo $form['Nom']->renderLabel(); ?>
            </th>
            <td>
            <?php echo $form['Nom']->render(); ?>
            </td>
        </tr>
    	
    	<tr>
            <th>
            <?php echo $form['Prenom']->renderLabel(); ?>
            </th>
            <td>
            <?php echo $form['Prenom']->render(); ?>
            </td>
        </tr>
    	
    	<tr>
            <th>
            <?php echo $form['Email']->renderLabel(); ?>
            </th>
            <td>
            <?php echo $form['Email']->render(); ?>
            </td>
        </tr>
    	
    	<tr>
            <th>
            <?php echo $form['Message']->renderLabel(); ?>
            </th>
            <td>
            <?php echo $form['Message']->render(); ?>
            </td>
        </tr>
    	
        <tr>
            <th><?php echo $form['Captcha']->renderLabel(); ?></th>
            <td>
            <?php echo $form['Captcha']->renderError(); ?>
            <?php echo $form['Captcha']->render(); ?>
            </td>
            <td><?php echo captcha_image(); echo captcha_reload_button(); ?></td>
        </tr>
        <tr>
          <td colspan="2" align="right">
            <input type="submit" value="Envoyer"/>
          </td>
        </tr>
      </table>
    </form>
    Je ne comprends pas car mon widget s'appelle bien 'Captcha' dans mon formulaire, que j'ai complété exactement comme dans ton exemple.

    Penses-tu savoir d'où vient le problème ?

    Merci encore !

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par défaut
    Je me demande finalement si j'ai bien installé le plugin...

    Je l'ai téléchargé sur le site officiel, je l'ai dézippé et j'ai mis le dossier dans C:\wamp\www\nomProjet

    J'ai ensuite suivi les indications d'installation sur le site officiel.
    En ligne de commande, j'ai écrit l'adresse du chemin puis tapé la commande

    symfony plugin:install -s beta sfCryptoCaptchaPlugin

    Je n'ai eu aucun message d'erreur et il me semblait que tout était bien installé. Je m'interroge donc vraiment sur l'erreur "Widget "Captcha" does not exist."

    Il s'agit peut-être de quelque chose de très simple mais étant débutante, je maîtrise encore mal les subtilités de Symfony et j'aurais vraiment besoin de votre aide.

    Merci d'avance pour vos réponses.

  5. #5
    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
    Perso, j'utilise le captcha qui est fourni avec le plugin : sfFormExtraPlugin

    C'est le même captcha, il marche et il offre plein d'autres widgets et validators indispensables.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par défaut
    Merci pour ce conseil mais j'ai finalement décidé de me tourner vers le sfWidgetFormReCaptcha qui m'avait l'air plus simple d'utilisation.

    Je me suis procurée une clé privée et publique en créant mon compte sur reCaptcha et j'ai modifié mon fichier app.yml en conséquent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    # default values
    all:
      recaptcha:
        active: true
        public_key:      ............
        private_key:     ..........
    J'ai ensuite modifié mon formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $this->setWidgets(array(
    			'Captcha' => new sfWidgetFormReCaptcha(array(
    			'public_key' => sfConfig::get('app_recaptcha_public_key'))),
    			));
    Et mis en place le validator associé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $this->setValidators(array(
    			'Captcha' => new sfValidatorReCaptcha(
    				array('required'=>true,'private_key' => sfConfig::get('app_recaptcha_private_key')),
    				array('required'=>'Champ obligatoire')),
    				));
    J'ai entendu parler d'un $this->validatorSchema->setPostValidator
    Faut-il que je l'intègre à mon code ?

    Merci d'avance pour vos réponses...

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 8
    Par défaut
    Bonjour,

    J'ai finalement trouvé la solution à mon problème grâce à ce lien :

    Symfony

    Je n'avais pas entré le code suivant dans mon actions.class :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $captcha = array(
      'recaptcha_challenge_field' => $request->getParameter('recaptcha_challenge_field'),
      'recaptcha_response_field'  => $request->getParameter('recaptcha_response_field'),
    );
    $this->form->bind(array_merge($request->getParameter('contact'), array('captcha' => $captcha)));
    Maintenant tout fonctionne

    Encore merci pour vos réponses

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

Discussions similaires

  1. formulaire avec vérification captcha
    Par kate59 dans le forum jQuery
    Réponses: 3
    Dernier message: 21/07/2013, 12h42
  2. [1.x] Modifier l'aparence d'un champ pour un formulaire
    Par apprentiDev dans le forum Symfony
    Réponses: 2
    Dernier message: 19/08/2011, 15h05
  3. [AC-2010] Critères sur champs pour les formulaires
    Par btks59 dans le forum IHM
    Réponses: 7
    Dernier message: 11/08/2011, 14h04
  4. [WD-2003] Créer un champs à cocher rond pour un formulaire
    Par Emmaude dans le forum Word
    Réponses: 1
    Dernier message: 21/05/2011, 20h45
  5. Réponses: 5
    Dernier message: 12/07/2005, 17h04

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