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 message d'un formulaire tronqué lors de l'envoi de mail [1.x]


Sujet :

Symfony PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Par défaut Champ message d'un formulaire tronqué lors de l'envoi de mail
    Bien le bonjour,

    Je viens chercher de l'aide auprès de vous. (mes recherches sur le net concernant mon problème étant infructueuse).

    Je suis actuellement en fin de stage en développement web. Je dois migrer un site déjà existant sous Symfony 1.4 et je rencontre un soucis au niveau de mon envoie de mail.

    On va dire que tout fonctionne car le mail est bien envoyé, il est bien reçu également avec les bons champs, sauf que le corps du message ne contient que la première ligne. A partir du moment où je fais un retour à la ligne, le reste n'est pas transmis.. Il me faut donc trouver un moyen pour que la variable contenant le message retienne tout le champ et non juste la première ligne, et c'est la que je coince :s

    Voici quelques morceaux de mon code pour tenter de vous éclairer

    Mon formulaire est créé(voici les widgets de mon formulaire, je vous épargne tout le reste ^^)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $this->setWidgets(array(
      'pseudo'      => new sfWidgetFormInputText(array('default' => 'Pseudo'), array('onclick' => 'this.value = "";')),
      'email'       => new sfWidgetFormInputText(array('default' => 'Email'), array('class' => 'email','onclick' => 'this.value = "";')),
      'desti'       => new sfWidgetFormSelect(array('choices' => self::$destinataire)),
      'sujet'       => new sfWidgetFormInputText(array('default' => 'Titre'), array('onclick' => 'this.value = "";')),
      'message'     => new sfWidgetFormTextarea(array(), array('size' => '20x5')),
    ));

    Voici le code envoyant le mail présent dans mon contrôleur (le formulaire est appelé dans l'action index, qui envoie le résultat s'il est passé par POST à l'action d'envoie contenant ce code)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $email = $this->getMailer()->compose(
      array($request->getParameter('email') => $request->getParameter('pseudo')),
      $request->getParameter('desti'),
      $request->getParameter('sujet'),
      $request->getParameter('message')
    );
     
    $this->getMailer()->send($email);
    Et la partie vue contenant l'appel de mon formulaire (c'est la vue de l'action index, où le formulaire est appelé):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <form action="<?php echo url_for('contact/index') ?>" method="POST">
     <table>
       <?php echo $formulaire ?>
       <tr>
        <td colspan="2">
        <input type="submit" />
        </td>
       </tr>
      </table>
    </form>
    Lors de mes recherches, j'avais vu cette fonction PHP nl2br() qui insère un retour à la ligne HTML à chaque nouvelle ligne. Mais je ne vois pas vraiment comment l'appliquer sur le champ d'un formulaire :/ (et je suis pas sur que ca résoudra mon problème :p)

    J'ai continué de mon côté pour tenter de trouver d'où ca peut venir, et j'ai peut-être trouver le soucis. Je m'explique :

    Quand je regarde dans la debug toolbar de Symfony, dans config/request au moment où je me rends sur la page contact, j'ai ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    parameterHolder:
      action: index
      module: contact
    Ce qui est normal, car pour le moment n'est rien envoyé.

    Une fois que je remplis mon formulaire et que je l'envoie en POST (il renvoit vers l'action index et son controleur vérifie si les informations viennent de la méthode POST, et si oui, il valide le formulaire). Et voici ce que ca donne une fois le formulaire envoyé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    parameterHolder:
      action: index
      contact:
        pseudo: 'Mon pseudo test'
        email: <une adresse mail>
        desti: <une adresse mail>
        sujet: 'Mon sujet test'
        message: "Mon message test,\r\nbonjour\r\nblabla\r\nmerci"
        _csrf_token: 7150b60b8374600f3e2545379ba5670f }
      module: contact
    Donc l'envoie du formulaire contient bien toutes les informations. Une fois qu'il est validé, il est envoyé vers la seconde action qui envoit le mail et qui affiche un récapitulatif des informations envoyées, mais voici ce qu'il ressort de la debug toolbar :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    parameterHolder:
      action: merci
      desti: <une adresse mail>
      email: <une adresse mail>
      message: 'Mon message test,'
      module: contact
      pseudo: 'Mon pseudo test'
      sujet: 'Mon sujet test'
    Tout est envoyé correctement sauf pour le champ "message". Il semblerait donc que le \r soit ce qui pose problème..

    Je suppose que Symfony ne doit pas accepter qu'il y ait de \ qui se balade dans les champs(d'ailleurs, si je me trompe pas, il y a les protections XSS de Symfony qui sont en action, peut-être pour ca que tout ce qui est après le \ soit supprimé?)

    Je ne sais pas si je suis sur la bonne piste, mais ca me semblerait logique. Si quelqu'un a une idée pour résoudre ce problème, je suis prenneur ^^


    Bonne fin de journée

    Thony alias l'Hardy

  2. #2
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Par défaut
    pourquoi n'utilises tu pas des balises html <br />?
    EDIT: après petite recherche je vois que c'est seulement si on spécifie que le mail est au format html qu'on peut utiliser la mise en forme html, je vais voir si je trouve d'autres pistes (j'ai jamais eu ce soucis mais je suis un des rares utilisateurs de ce forum :p essaye aussi \\n)

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Par défaut
    C'est un formulaire de contact. Donc la personne indique son pseudo, son adresse mail et son message.

    Ce n'est pas moi qui rédige le message qui sera envoyé. Je ne fais que le récupérer via le formulaire qui, s'il est valide, envoie le mail avec les données saisies dans les champs.

    Je ne vois pas trop comment mettre des <br> dans le message à la place de la personne :/

    EDIT : Merci quand même d'essayer de m'aider, mais je sèche entièrement ^^ Je ne vois toujours pas comment mettre des <br> ou des \n pour les retour à la ligne d'un message que je ne rédige pas ^^

  4. #4
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Par défaut
    j'ai une remarque de bonne pratique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    'pseudo'      => new sfWidgetFormInputText(array('default' => 'Pseudo'), array('onclick' => 'this.value = "";')),
    Il vaut mieux éviter de mettre du javascript dans les form.php, c'est chiant a débuguer si ton code javascript ce balade a plusieurs endroit


    alors, ca fait longtemps que j'ai pas utiliser de textarea mais quand l'utilisateur fait un retour a la ligne ca le stock avec les \n\l (a vérifier).
    ducoup nl2br (comprendre: \n\l to <br/> ) permet lors de la transmission de la variable, de remplacer les retour a la ligne par des retours html.
    Ducoup meme si l'utilisateur a juste appuyé sur entré, on peut avoir les <br />.
    Il me semble que la pluspart des mails sont envoyés en html pour les avantages de mise en forme

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2011
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2011
    Messages : 13
    Par défaut
    Je t'ai écouté pour la règle de bonne pratique, j'ai enlevé ce qui faisait appel aux javascript de mon formulaire.

    Concernant \n \l qui apparaissent dans le corps du message lors d'un retour à la ligne, je suis au courant et c'est justement ca qui me pose problème :/

    D'ailleurs, comme je l'ai cité, avec l'analyse de la debug toolbar qui m'indique ce qui est passé dans la requête, on voit bien que le paramètre 'message' a comme valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      message: "Mon message test,\r\nbonjour\r\nblabla\r\nmerci"
    lorsque le formulaire est envoyé. Mais qu'une fois qu'il est validé pour être envoyé par mail, il passe à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      message: 'Mon message test,'
    Donc c'est les \ qui pose problème, d'où ma recherche m'ayant amené à la fonction nl2br pour remplacer ces \r et \n avec des <br>. Mais comme je l'ai dit, mon soucis, c'est que je vois pas où je peux faire appel à cette fonction pour l'appliquer aux données du champ 'message'.

    Pour te montrer, voici mon controleur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function executeIndex($request)
    {
    	$this->formulaire = new ContactForm();
     
    	if ($request->isMethod('post'))
    	{
    		$this->formulaire->bind($request->getParameter('contact'));
    		if ($this->formulaire->isValid())
    		{
    			$this->redirect('contact/merci?'.http_build_query($this->formulaire->getValues()));
    		}
    	}
    }
    Donc lors de l'appel de l'action index, il crée le formulaire. Si le visiteur appuye sur la soumission, le formulaire est renvoyée à cette même action et teste si le formulaire est passé en POST, si oui il le valide et renvoie vers l'action "merci" avec les valeurs en paramètre

    Donc comme tu peux le voir, je vois pas trop où je peux travailler sur le champ. J'avais essayé d'envoyer directement le mail dans la partie de code avant le $this->redirect, mais quand je fais ca, j'ai une exeption de swift mailer qui me dit que le champ pseudo n'est pas une adresse mail

  6. #6
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Septembre 2009
    Messages : 875
    Par défaut
    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 executeIndex($request)
    {
    	$this->formulaire = new ContactForm();
     
    	if ($request->isMethod('post'))
    	{
                    $values = $request->getParameter('contact');
                    $values['content'] = nl2br($values['content']);
    		$this->formulaire->bind($values);
    		if ($this->formulaire->isValid()
    		{
    			$this->redirect('contact/merci?'.http_build_query($this->formulaire->getValues()));
    		}
    	}
    }

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

Discussions similaires

  1. Champ qui se rempli tout seul lors de l'envoi formulaire
    Par LhIaScZkTer dans le forum ASP.NET
    Réponses: 2
    Dernier message: 22/07/2008, 18h59
  2. Caractère bizarre lors de l'envoi de mail depuis un site : é à la place de é
    Par Dsphinx dans le forum Balisage (X)HTML et validation W3C
    Réponses: 9
    Dernier message: 16/04/2007, 13h41
  3. Réponses: 4
    Dernier message: 19/03/2007, 12h03
  4. [VB.NET 2005] Erreur lors d'un envois de mail
    Par mimil77210 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 08/06/2006, 14h00
  5. [Mail] Erreur lors de l'envoi de mail
    Par PAYASS59 dans le forum Langage
    Réponses: 1
    Dernier message: 11/05/2006, 14h34

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