PHP Formulaire mail probleme d'appostrophe

Fermé
yonis5555 Messages postés 71 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 7 janvier 2010 - 27 août 2007 à 09:41
yonis5555 Messages postés 71 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 7 janvier 2010 - 28 août 2007 à 18:17
Bonjour,

Dans mon formulaire de contact, j'ai voulu poser une question de securité, avant que le mail soit envoyé.
Du genre:

Dans ma feuille contactus.html

<form action="contactus1.php" method="post" enctype="multipart/form-data" onSubmit="MM_validateForm('name','','R','mail','','RisEmail','Answer','','R','message','','R');return document.MM_returnValue">
<p>Votre nom : <br />
<input name="name" type="text" id="name" />
<br />
Votre e-Mail : <br />
<input name="mail" type="text" id="mail" />
<br />
Votre message : <br />
<textarea name="message" cols="50" rows="5" id="message"></textarea>
<input type="hidden" name="objet" value="Object" />
</p>
<p>De quelle couleur est le ciel?</p>

<input name="Answer" type="text" id="Answer"size="11" />

<br />
<input name="submit" type="submit" value="Envoyer !" />
<input name="reset" type="reset"/>
</p>
</form>

---------------------------------------------------------------

Dans contactus1.php

<?php

$answer = $_POST['Answer'];
$couleur = 'bleu';

if ($answer != "$couleur"){
echo("Erreur: ce n'est pas la bonne reponse...");
echo("<meta http-equiv=\"refresh\" content=\"1; url=contactus.html\" />");
}else{
echo ("Veuillez confirmer l'envoi du message");
}
?>
<?php
//On stocke les infos que le visiteur a envoyé dans des variables
$name = htmlentities($_POST['name']);
$mail= htmlentities($_POST['mail']);
$message = htmlentities($_POST['message']);

//L'e-Mail du destinataire du message
$destinataire = 'monemail@gmail.com';
//L'objet du message, définis dans le champs caché
$objet = $_POST['objet'];


//Le message qui vous est envoyé

$message_envoye =
'Nom : ' . $name .'\r\n'.
'E-Mail :' . $mail . '\r\n'.
'Message : ' . $message .'\r\n' .
'X-Mailer: PHP/' . phpversion();


$ip = $_SERVER['REMOTE_ADDR'];
$message_envoye .= 'IP: $ip\n';




//Le mail du posteur
$from = 'From: ' .$destinataire;


echo("
<form method='post' action='contactus.php'>");
echo("<input name='name' type='hidden' id='name' value='$name'> \n");
echo("<input name='mail' type='hidden' id='mail' value='$mail'> \n");
echo("<input name='message' type='hidden' id='message' value='$message'> \n");
echo("<input name='destinataire' type='hidden' id='destinataire' value='$destinataire'> \n");
echo("<input type='hidden' name='objet' value='$objet'> \n");
echo(" <input type='hidden' name='ip' value='$ip'> \n");
echo("<input name='Suivant' type='submit' value='Suivant'> \n");
echo("</form>\n");?>

-----------------------------------------------------

Dans contactus.php

<?php
//On stocke les infos que le visiteur a envoyé dans des variables
$name = htmlentities($_POST['name']);
$mail= htmlentities($_POST['mail']);
$message = htmlentities($_POST['message']);

//L'e-Mail du destinataire du message
$destinataire = "monemail@gmail.com";

//L'objet du message, définis dans le champs caché
$objet = $_POST['objet'];


//Le message qui vous est envoyé

$message_envoye =
'Nom : ' . $name ."\r\n".
'E-Mail :' . $mail . "\r\n".
'Message : ' . $message ."\r\n" .
'X-Mailer: PHP/' . phpversion();


$ip = $_SERVER['REMOTE_ADDR'];
$message_envoye .= "IP: $ip\n";




//Le mail du posteur
$from = "From: " .$destinataire;


if(mail($destinataire, $objet, $message_envoye, $from)){
echo ('Merci . Votre message a été envoyé avec succès .');
echo ('<meta http-equiv="refresh" content="2;url=home.html"');
} else {
echo ('<p>Erreur mail non envoyé</p>');
echo ('<meta http-equiv="refresh" content="2;url=contactus.html"');
}
?>

----------

Voila mon probleme: quand je recois l'email, s'il y a des appostrophe dans le mail je ne recois rien apres les appostrophe par exemple:

Mon message: Bonjour je m'appelle Jonathan. J'ai 20 ans.

L'e-mail que je recois:

Bonjour je m\\

c'est le meme probleme avec les accents


Auriez vous une solution?


Merci

j'ai oublié de préciser que j'ai vérifié avec phpinfo si j'avais une librairie GD et j'en ai pas.. donc cùest impossible de faire une image cryptée... s'il y a un moyen de l'installer merci de me le dire ça faliciterait tout

A voir également:

14 réponses

Salut,

Il faut passer par la fonction stripslashes(), pour supprimer les / que php mets devant les accents:

$message = stripslashes(htmlentities($_POST['message']));

Deuxième point pour soumettre ton formulaire en le validant par Javascript à la place de:
onSubmit="MM_validateForm('name','','R','mail','','RisEmail','Answer','','R','message','','R');return document.MM_returnValue">
mets plutôt:
onSubmit="return MM_validateForm('name','','R','mail','','RisEmail','Answer','','R','message','','R');"> 


et dans ta fonction JS: MM_validateForm tu mets des return="false" dans tous tes tests si negatif

et return="true" en sortie de fonction, donc si tous les test n'ont pas été négatifs.
0
yonis5555 Messages postés 71 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 7 janvier 2010 2
27 août 2007 à 12:07
Merci... ca a enlevé mes slashs.... mais le problème est toujours là: les appostrophes ne sont pas là et après le M de Je m'appelle (par exemple) c'est toujours vide.
0
Tu mélanges les ' et les " dans une même ligne de concaténation, essayes plutôt en ne mettant que des "

$message_envoye ='Nom : ' . $name ."\r\n".'E-Mail :' . $mail . "\r\n".'Message : ' . $message ."\r\n" .'X-Mailer: PHP/' . phpversion();

$message_envoye ="Nom : ". $name ."\r\n"."E-Mail :" . $mail . "\r\n"."Message : " . $message ."\r\n" ."X-Mailer: PHP/' . phpversion();


ou même (les variables $..... sont interprétées par php dans les chaines limitées par des "):

$message_envoye ="Nom :  $name \r\n E-Mail : $mail \r\n Message :  $message \r\n X-Mailer: PHP/". phpversion();
0
yonis5555 Messages postés 71 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 7 janvier 2010 2
27 août 2007 à 16:02
Ca ne marche pas... et j'ai oublie aussi... les characteres speciaux (accents lettres etrangeres)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
As tu mis cette ligne dans les meta de tes pages html

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
0
yonis5555 Messages postés 71 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 7 janvier 2010 2
27 août 2007 à 21:30
oui.. et ca marche pas
0
Dans ta feuille contactus.html

<form action="contactus1.php" method="post" enctype="multipart/form-data"


enlèves: enctype="multipart/form-data" , c'est quand on veut uploader un fichier.
0
yonis5555 Messages postés 71 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 7 janvier 2010 2
28 août 2007 à 12:47
Le probleme est toujours la... :(
0
Me revoilà,

je pense avoir trouvé où ça coince.

dans le fichier contactus1.php

echo("
<form method='post' action='contactus.php'>");
echo("<input name='name' type='hidden' id='name' value='$name'> \n");
echo("<input name='mail' type='hidden' id='mail' value='$mail'> \n");
echo("<input name='message' type='hidden' id='message' value='$message'> \n");
echo("<input name='destinataire' type='hidden' id='destinataire' value='$destinataire'> \n");
echo("<input type='hidden' name='objet' value='$objet'> \n");
echo(" <input type='hidden' name='ip' value='$ip'> \n");
echo("<input name='Suivant' type='submit' value='Suivant'> \n");
echo("</form>\n");


Ce sont les ' de part et d'autre de tes variables dans value='$message' qui gênent, ,car les apostrophes dans le message sont interprétées comme une fin de la chaine value=' ........'

alors tu les remplaces par des \" (il faut échapper les " par \ car tu as déja " en début de ta chaine echo

Au passage les parenthèses echo ( ) ne sont pas nécessaires!


Donc fais comme ça:

echo "<form method='post' action='contactus.php'>";
echo "<input name='name' type='hidden' id='name' value=\"$name\"> \n";
echo "<input name='mail' type='hidden' id='mail' value=\"$mail\"> \n");
echo "<input name='message' type='hidden' id='message' value=\"$message\"> \n";
ech ("<input name='destinataire' type='hidden' id='destinataire' value=\"$destinataire\"> \n";
echo "<input type='hidden' name='objet' value=\"$objet\"> \n";
echo " <input type='hidden' name='ip' value=\"$ip\"> \n";
echo "<input name='Suivant' type='submit' value='Suivant'> \n";
echo "</form>\n");


pour être puriste il faudrait faire pareil pour tous name=\"......\" type=\"....\"

et supprimes aussi enctype="multipart/form-data"

Quand la réponse n'est pas correcte, il y a une autre solution que le refresh:

- tu ne fais qu'un seul fichier contactus.php qui regroupe le formulaire et le traitement de la réponse sur le ciel.

mais ça on verra après.
0
yonis5555 Messages postés 71 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 7 janvier 2010 2
28 août 2007 à 15:18
Merci beaucoup ca a marché, pour les appostrophes mais pour les accents? ca m'affiche du codage...
au lieu de "écrire" ca m'affiche
&eacute;crire


Pareil pour l'object du message... pour tout en fait... et j'ai mis la balise meta qu'il faut.
0
Essaye en supprimant les htmlenties.

On trouvera un autre moyen de sécuriser les saies utilisateur.
0
yonis5555 Messages postés 71 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 7 janvier 2010 2
28 août 2007 à 16:53
Ca marche :):) a part quand il y a des " " dans le message
0
Alors laisse htmlentities et envoi ton mail au format HTML il faut rajouter qq chose dans le $from (MIME= ???)

Vas voir sur Google comment faire
0
yonis5555 Messages postés 71 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 7 janvier 2010 2
28 août 2007 à 18:17
ok.. merci beaucoup en tout cas
0