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

Langage PHP Discussion :

Accents et envoi de formulaire


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut Accents et envoi de formulaire
    Bonjour à tous,
    Je débute tout juste, et je tente de créer un ptit site pour une bibliothèque associative.
    J'ai fait un formulaire de contact, qui marche bien, sauf que ce que je reçois par mail ne contient pas les accents et caractères particuliers, mais des &eacute ou &agrave, etc...

    Je sais qu'il me manque un truc dans mon code, mais je ne sais pas quoi au juste. J'ai parcouru plein de forums et essayé plein de choses différentes, mais je n'ai pas encore trouvé la solution à mon problème.

    Voici le code en question:

    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
    $nom = htmlentities($_POST['nom'], ENT_QUOTES);
    echo "$nom &nbsp";
    $pre = htmlentities($_POST['prenom'], ENT_QUOTES);
    echo "$pre, <br />";
    $ema = htmlentities($_POST['email']);
    $tit = htmlentities($_POST['titre'], ENT_QUOTES);
    $mes = htmlentities($_POST['message'], ENT_QUOTES);
     
     
    $question .= $nom."\n";
    $question .= $pre."\n\n";
    $question .= $ema."\n\n";
    $question .= $tit."\n";
    $question .= $mes."\n";
    mail ("asso@FAI.com", "Message du site", $question, "From: $nom");
    echo "Votre message vient de nous &ecirc;tre envoy&eacute. <br /> Nous vous r&eacutepondrons &agrave l'adresse $ema<br />";

  2. #2
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    C'est normal, la fonction htmlentities() que tu utilise pour récupérer tes variables POST converti les caractères spéciaux et accents en caractères HTML (é devient &eacute; ).

    Mais il est néanmoins indispensable de sécuriser la récupération des données envoyées par l'utilisateur, tu peut donc utiliser htmlspecialchars() pour conserver les accents :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    htmlspecialchars($POST['nom'], ENT_QUOTES);

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Merci beaucoup de cette réponse rapide !
    Ca marche bien, sauf pour les apostrophes.

    l'apostrophe donne:

    l\&#039;apostrophe

    ...

    Encore un ptit truc à régler ?

  4. #4
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Cela vient du ENT_QUOTES, tu peut l'enlever :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    htmlspecialchars($_POST['nom']);
    La y'a pas trop de risque car les données que tu reçoit ne sont pas insérées en base, mais n'autorise surtout pas les apostrophes lorsque tu enregistre les données dans une base de données car cela laisse la possibilité à une injection SQL

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    En fait, c'est quand j'enlève ENT_QUOTES, que ça fait :

    l\'apostrophe

    Quand je remets ENT_QUOTES, ça fait:

    l & # 039 apostrophe


    Il doit encore manquer un truc...

  6. #6
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Cela ne viendrait-il pas des guillemets magiques ?

    Pour leurs prise en compte, nous pouvons utiliser la fonction get_magic_quotes_gpc().
    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
    $nom=(isset($_POST['nom']))?$_POST['nom']:'';
    $pre=(isset($_POST['prenom']))?$_POST['prenom']:'';
    $ema=(isset($_POST['email']))?$_POST['email']:'';
    $tit=(isset($_POST['titre']))?$_POST['titre']:'';
    $mes=(isset($_POST['message']))?$_POST['message']:'';
     
    if(@get_magic_quotes_gpc()){
    	$nom=stripslashes($nom);
    	$pre=stripslashes($pre);
    	$tit=stripslashes($tit);
    	$mes=stripslashes($mes);
    }
     
    $nom=htmlspecialchars($nom,ENT_QUOTES);
    $pre=htmlspecialchars($pre,ENT_QUOTES);
    $ema=htmlspecialchars($ema,ENT_QUOTES);
    $tit=htmlspecialchars($tit,ENT_QUOTES);
    $mes=htmlspecialchars($mes,ENT_QUOTES);

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    J'ai supposé qu'il fallait que je place le code avant que j'envoie tout dans $question (c'est bien ça ?)
    Mais j'ai toujours & # 039; à la place de l'apostrophe. (j'ai placé des espaces pour que le code s'affiche dans ce forum)

  8. #8
    Membre éprouvé
    Avatar de amoiraud
    Homme Profil pro
    Développeur Web
    Inscrit en
    Octobre 2006
    Messages
    606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2006
    Messages : 606
    Points : 1 057
    Points
    1 057
    Par défaut
    Citation Envoyé par coucou1 Voir le message
    J'ai supposé qu'il fallait que je place le code avant que j'envoie tout dans $question (c'est bien ça ?)
    Mais j'ai toujours & # 039; à la place de l'apostrophe. (j'ai placé des espaces pour que le code s'affiche dans ce forum)
    T'a essayé la solution d'Eric2a ? Je pense qu'il a raison pour les magic quotes

  9. #9
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Je crois comprendre...

    Ton email est envoyé ET... affiché en plain/text par ton client de messagerie.

    En d'autres termes, les entitées HTML (&eacute pour é) ne sont pas intérprétés, c'est pour cette raison que :

    Les caractères & + # + 3 + 9 + ; ne sont pas convertis en apostrophes.

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    C'est donc du côté de mon Thunderbird qu'il faut que je cherche ?

  11. #11
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Non, il est préférable de "construire" le mail en HTML.

    Essaie ceci...
    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
    $nom=(isset($_POST['nom']))?$_POST['nom']:'';
    $pre=(isset($_POST['prenom']))?$_POST['prenom']:'';
    $ema=(isset($_POST['email']))?$_POST['email']:'';
    $tit=(isset($_POST['titre']))?$_POST['titre']:'';
    $mes=(isset($_POST['message']))?$_POST['message']:'';
     
    if(@get_magic_quotes_gpc()){
    	$nom=stripslashes($nom);
    	$pre=stripslashes($pre);
    	$tit=stripslashes($tit);
    	$mes=stripslashes($mes);
    }
     
    $nom=htmlspecialchars($nom,ENT_QUOTES);
    $pre=htmlspecialchars($pre,ENT_QUOTES);
    $ema=htmlspecialchars($ema,ENT_QUOTES);
    $tit=htmlspecialchars($tit,ENT_QUOTES);
    $mes=htmlspecialchars($mes,ENT_QUOTES);
     
    if($nom!='' && $pre!='' && $ema!='' && $tit!='' && $mes!=''){
    	$eol="\n";
     
    	$from = 'asso@FAI.com'; // À adapter
     
    	$hdr ='From: '.$from.$eol;
    	$hdr.='Return-Path: '.$from.$eol;
    	$hdr.='Reply-To: '.$from.$eol;
    	$hdr.='X-Priority: 3'.$eol;
    	$hdr.='X-Mailer: PHP/'.phpversion().$eol;
    	$hdr.='MIME-Version: 1.0'.$eol;
    	$hdr.='Content-Type: text/html; charset=ISO-8859-1'.$eol;
    	$hdr.='Content-Transfer-Encoding: base64'.$eol.$eol;
     
    	$question = $nom."<br />\n";
    	$question.= $pre."<br /><br />\n";
    	$question.= $ema."<br /><br />\n";
    	$question.= $tit."<br />\n";
    	$question.= $mes."<br />\n";
     
    	$msg=chunk_split(base64_encode($question));
     
    	if(@mail($ema,'Message du site',$msg,$hdr))
    		echo 'Votre message vient de nous &ecirc;tre envoy&eacute.<br />Nous vous r&eacutepondrons &agrave l\'adresse '.$ema.'<br />';
    	else
    		echo 'Une erreur est apparue lors de l\'envoi du mail';
     
    }
    Prends soin de personnaliser la ligne...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $from = 'asso@FAI.com'; // À adapter

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    euh...
    ben là je ne reçois plus le mail.

    ...?

    NB: j'ai bien pris soin de remplacer l'adresse mail factice par celle de l'asso.

  13. #13
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Remplace la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($nom!='' && $pre !='' && $ema!='' && tit!='' && mes!=''){
    par celle-ci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($nom!='' && $pre!='' && $ema!='' && $tit!='' && $mes!=''){
    pour voir.

    J'avais oublié 2 fois le signe $. Tu aurais dû avoir un message d'erreur.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    J'ai remplacé la ligne, mais toujours pas d'envoi et toujours pas de message d'erreur ...

    Dans mon premier code, j'avais une ligne qui disait:
    mail ("asso@FAI.com", "Message du site", $question, "From: $nom");
    Et donc qui envoyait la mail.

    Par quoi est-elle remplacée dans le code que tu m'as donné ?

  15. #15
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Effectivement, après avoir fait le test, c'est l'expediteur qui reçoit le mail...



    Tu peux envoyer à l'adresse spécifier par la variable $from...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	if(@mail($from,'Message du site',$msg,$hdr))
    ou bien en définir une autre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$to='taboite@mail';
    	if(@mail($to,'Message du site',$msg,$hdr))

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Super!
    Ca marche !

    Il reste encore un petit détail:
    Quand je reçois le mail, il n'y a pas de nom d'expéditeur. Est-il possible de remédier à cela en mettant le $nom ou le $ema ?

    Merci !

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 23
    Points : 16
    Points
    16
    Par défaut
    Bon ben j'ai trouvé comment faire, mais malgré tout le nom de l'expéditeur est suivi de @mon-hebergeur.com

    Tant pis, ça ira quand même.

    Merci à tous !

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

Discussions similaires

  1. [HTML] Envoi dun formulaire avec un lien au lieu d'un bouton
    Par Mysticlolly dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 19/05/2010, 12h30
  2. Enlever les accents avant l'envoi du formulaire
    Par rom56 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 21/02/2008, 17h35
  3. Réponses: 5
    Dernier message: 23/10/2005, 17h34
  4. Probleme d'envoie de formulaire
    Par wollverine dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 02/02/2005, 16h29
  5. [HTML] Problème d'envoi de formulaire
    Par autumn319 dans le forum ASP
    Réponses: 26
    Dernier message: 03/09/2003, 10h06

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