PHP Formulaire mail probleme d'appostrophe
yonis5555
Messages postés
71
Date d'inscription
Statut
Membre
Dernière intervention
-
yonis5555 Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
yonis5555 Messages postés 71 Date d'inscription Statut Membre Dernière intervention -
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
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:
- PHP Formulaire mail probleme d'appostrophe
- Whatsapp formulaire opposition - Guide
- Formulaire de réclamation facebook - Guide
- Publipostage mail - Accueil - Word
- Windows live mail - Télécharger - Mail
- Formulaire de reclamation instagram - Guide
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:
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.
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.
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.
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();
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();
$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();
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">
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.
<form action="contactus1.php" method="post" enctype="multipart/form-data"
enlèves: enctype="multipart/form-data" , c'est quand on veut uploader un fichier.
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:
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.
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.
Merci beaucoup ca a marché, pour les appostrophes mais pour les accents? ca m'affiche du codage...
au lieu de "écrire" ca m'affiche
Pareil pour l'object du message... pour tout en fait... et j'ai mis la balise meta qu'il faut.
au lieu de "écrire" ca m'affiche
écrire
Pareil pour l'object du message... pour tout en fait... et j'ai mis la balise meta qu'il faut.