Page 1 sur 1

Problème d'accents d'un mail de formulaire

Posté : 06 juin 2016, 15:38
par xkain-iron
Bonjour à tous,

Avant toute chose je tiens à préciser que je suis un débutant en php (depuis ce matin en fait) donc ne m'en voulez pas si j'ai du mal à comprendre :oops:

Sur mon site internet j'ai mis un formulaire de contact jusque là tout va bien, les choses se corse lorsque le php rentre en jeu, en fouillant sur internet j'ai trouvé un script php (que j'ai un peut modifié) qui fait bien son boulot à savoir récupérer les infos du formulaire et me les envoyer sur ma boite mail. Cependant le mail que je reçois affiche des symboles bizarre en lieu et place des accents.
Visiblement c'est un problème de UTF-8 et là j'avoue que je ne sais pas du tout comment l'intégrer au script php donc me voila ici sur ce forum dans l'espoir de trouver de l'aide auprès de vous :oops:

Voici le php en question:
merci d'avance :oops:
<?php

 

	if (isset($_POST["submit"])) {
		$name = $_POST['name'];
		$email = $_POST['email'];
		$message = $_POST['message'];
		$human = intval($_POST['human']);
		$from = 'apriliarsbikers2.com'; 
		$to = '[email protected]"\r\n"; 
		$subject = 'blablabla ';
		$headers = "MIME-Version: 1.0\r\nContent-type: text/html; charset=utf-8\r\n";
		
		$body ="From: $name\n E-Mail: $email\n Message:\n $message";
		// Check if name has been entered
		if (!$_POST['name']) {
			$errName = 'Entrer votre Pseudo';
		}
		
		// Check if email has been entered and is valid
		if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
			$errEmail = 'Entrer une adresse valide';
		}
		
		//Check if message has been entered
		if (!$_POST['message']) {
			$errMessage = 'Rédigez votre message';
		}
		//Check if simple anti-bot test is correct
		if ($human !== 5) {
			$errHuman = 'L anti-spam est incorrect';
		}
// If there are no errors, send the email
if (!$errName && !$errEmail && !$errMessage && !$errHuman) {
	if (mail ($to, $subject, $headers, $body, $from)) {

	// Si le mail a bien été envoyé, message de confirmation
	
		$result=''; echo ("<img src='images/contact.png'>");
	} 
	else {
		$result=''; echo ("<img src='images/contact-erreur.png'>");
	}
}
	}
?>

</p>

Re: Problème d'accents d'un mail de formulaire

Posté : 06 juin 2016, 15:42
par kevin254kl
Salut, dans ton header un exemple sa précise le retour

Code : Tout sélectionner

$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
tu l-utilises

Code : Tout sélectionner

mail($to, $subject, $message, $headers);
vérifie aussi sous quel encodage est enregistré ton fichié

Re: Problème d'accents d'un mail de formulaire

Posté : 06 juin 2016, 15:50
par kevin254kl
Ton header complet pour moi ce code fonctionne

Code : Tout sélectionner

$headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n"; $headers .= 'From: ton mail';
affiche ton subject et post le?

Re: Problème d'accents d'un mail de formulaire

Posté : 06 juin 2016, 16:30
par xkain-iron
Merci de prendre du temps pour se pencher sur mon problème :roll:

Alors maintenant j'ai bien les accents dans mon mail et c'est déjà un grand pas en avant mais maintenant je n'ai que le message qui s'affiche, le nom et l'adresse e-mail de la personne qui envois le mail ne s'affiche plus.

pour moi cela viens de cette ligne:
if ( mail($to, $subject, $message, $headers)) {
Si j'ajoute dans cette même ligne $body je ne reçois plus du tout de mail :(

Voici le php actuel:
<?php

	if (isset($_POST["submit"])) {
		$name = $_POST['name'];
		$email = $_POST['email'];
		$message = $_POST['message'];
		$human = intval($_POST['human']);
		$from = 'apriliarsbikers2.com'; 
		$to = '[email protected]'."\r\n"; 
		$subject = 'Contactsite ';
		$headers  = 'MIME-Version: 1.0' . "\r\n";
		$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
		$headers .= 'From: monmail';
		
		$body ="From: $name\n E-Mail: $email\n Message:\n $message";
		// Check if name has been entered
		if (!$_POST['name']) {
			$errName = 'Entrer votre Pseudo';
		}
		
		// Check if email has been entered and is valid
		if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
			$errEmail = 'Entrer une adresse valide';
		}
		
		//Check if message has been entered
		if (!$_POST['message']) {
			$errMessage = 'Rédigez votre message';
		}
		//Check if simple anti-bot test is correct
		if ($human !== 5) {
			$errHuman = 'L anti-spam est incorrect';
		}
// If there are no errors, send the email
if (!$errName && !$errEmail && !$errMessage && !$errHuman) {
	if ( mail($to, $subject, $message, $headers)) {

	// Si le mail a bien été envoyé, message de confirmation
	
		$result=''; echo ("<img src='images/contact.png'>");
	} 
	else {
		$result=''; echo ("<img src='images/contact-erreur.png'>");
	}
}
	}
?>

</p>

Re: Problème d'accents d'un mail de formulaire

Posté : 07 juin 2016, 08:35
par kevin254kl
Salut, tu veux que le body s'affiche ou dans ton mail?

Re: Problème d'accents d'un mail de formulaire

Posté : 07 juin 2016, 12:24
par Ryle
Bonjour,

Si tu constitues le corps de ton mail dans la variable $body, c'est elle qu'il faut utiliser au lieu de $message lorsque tu fais appel à la fonction mail() :
if ( mail($to, $subject, $body, $headers)) {

Re: Problème d'accents d'un mail de formulaire

Posté : 07 juin 2016, 13:13
par xkain-iron
Bonjours à tous,

Alors depuis hier j'ai un peu avancé, en fait j'ai mis le corps de mon mail dans $message et j'ai supprimé $body.
Maintenant j'ai bien le pseudo, l'e-mail de l'expéditeur et son message dans le mail que je reçois :o

Voici le code actuel:
<?php

	if (isset($_POST["submit"])) {
		$name = $_POST['name'];
		$email = $_POST['email'];
		
		$human = intval($_POST['human']);
		$from = 'apriliarsbikers2.com'; 
		$to = '[email protected]'."\r\n"; 
		$subject = 'Contact apriliarsbikers2.com ';
		$headers  = 'MIME-Version: 1.0' . "\r\n";
		$headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
		$headers .= 'From: [email protected]';
	
		// Contenu du message
		
		$message .= "<b>Pseudo :</b> {$_POST['name']} <br /> 
			               <b>E-mail :</b> {$_POST['email']} <br /> 
			              <br />
			             <b>Son message :</b><br />
			             {$_POST['message']} <br />";

		// On verifie que le nom est bien entré
		if (!$_POST['name']) {
			$errname = 'Entrer votre Pseudo';
		}
		
		//On verifie que l'adresse mail est valide
		if (!$_POST['email'] || !filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
			$erremail = 'Entrer une adresse valide';
		}
		
		//On verifie si il y a bien le message
		if (!$_POST['message']) {
			$errmessage = 'Rédigez votre message';
		}
		//On verifie que ce n'est pas un bots 
		if ($human !== 5) {
			$errHuman = 'L anti-spam est incorrect';
		}
				
		
// Si il n'y a pas d'erreur on envois le mail
if (!$errname && !$erremail && !$errmessage && !$errhuman) {
	if ( mail($to, $subject, $message, $headers)) {

	// Si le mail a bien été envoyé, message de confirmation
	
		$result=''; echo ("<img src='images/contact.png'>");
	} 
	else {
		$result=''; echo ("<img src='images/contact-erreur.png'>");
	}
}
	}
?>

</p>
Maintenant il ne reste plus qu'a voir comment faire en sorte que l'expéditeur reçoive une copie de l'e-mail qu'il envoie et voir pourquoi je n'ai pas de notification lorsque la personne remplie mal le formulaire (alors que j'ai bien la notification lorsque le formulaire à bien été rempli et envoyé :oops:

Merci à voir d'avoir pris le temps de m'aider :D

Re: Problème d'accents d'un mail de formulaire

Posté : 07 juin 2016, 13:41
par Ryle
Bonjour,

Pour la copie à adresser à l'expéditeur, tu peux faire un deuxième appel à mail() en changeant simplement le destinataire (2 mails envoyés). Tu peux aussi modifier le header pour ajouter des adresses en copies (CC) (1 seul mail envoyé et la personne en copie verra ton adresse). Ou encore modifier le destinataire pour envoyer le mail à son auteur, et ajouter ton adresse à toi en copie cachée (BCC)

Quant au fait de ne pas recevoir de notification en cas d'erreur c'est ce test qui fait que le mail n'est envoyé que si aucune erreur n'a été rencontrée :
if (!$errname && !$erremail && !$errmessage && !$errhuman) {

Re: Problème d'accents d'un mail de formulaire

Posté : 11 juin 2016, 11:43
par xkain-iron
Bonjour, désolé pour mon retard,

Alors j'ai fait ce que tu m'as dit en faisant un deuxième appel à mail en changeant le destinataire mais j'ai un problème de syntaxe, le deuxième mail doit être contenue dans la première condition if ?

// Si il n'y a pas d'erreur on envois le mail
if (!$errname && !$erremail && !$errmessage && !$errhuman) {
  if ( mail($to, $subject, $message, $headers)) {
    if ( mail($email, $subject, $message, $headers)) {
    
  // Si le mail a bien été envoyé, message de confirmation
  
    $result=''; echo ("<img src='images/contact.png'>");
  } 
  else {
    $result=''; echo ("<img src='images/contact-erreur.png'>");
  }