formulaire d'envoi par mail, ne s'execute pas[RESOLU]

Petit nouveau ! | 7 Messages

26 avr. 2011, 23:58

Bonjour, je tente de réaliser un formulaire de reservation envoyé par mail, j'ai suivi le tuto http://a-pellegrini.developpez.com/tuto ... mail/#L4.5 .

Mais quoi que je fasse, rien ne se passe , aucun mail n'est envoyé, aucun message d'erreur n'est affiché

(Je tiens à préciser que j'ai tester l'envoi de mail sur mon serveur avec un script tout simple, ça fonctionne)

voilà mon code, merci de me dire ce qui ne va pas
<?php
// Si le formulaire est envoyé alors on fait le traitement
if (isset($_POST['Envoyer']))
{
	
	if (!empty($alert))
{
    echo '<p style="color:red">'.$alert.'</p>';
}
	//
	// Récupération des informations
	//
	// On donne un autre nom au variable pour éviter les problèmes avec Register Global à ON
	//et on traite avec htmlentities pour la sécurité et trim pour eviter les champs vides
	$formNom = htmlentities(trim($_POST['nom']));
	$formMail = htmlentities(trim($_POST['mail']));
	$formDebut = htmlentities(trim($_POST['debut']));
	$formFin = htmlentities(trim($_POST['fin']));
	$formCommentaires = htmlentities(trim($_POST['commentaires']));
			
	// Expression régulière permettant de vérifier si le
	// format d'une adresse e-mail est correct 
	$regex_mail = '/^[-+.\w]{1,64}@[-.\w]{1,64}\.[-.\w]{2,6}$/i';
			
	// Expression régulière permettant de vérifier qu'aucun
	//en-tête n'est inséré dans nos champs 
	$regex_head = '/[\n\r]/';
			
	// Si le formulaire n'est pas posté de notre site on renvoie 
	// vers la page d'accueil 
	if($_SERVER['HTTP_REFERER'] != 'http://monsite.toile-libre.org/Reservation/send_email.php')
	{
		header('Location: http://monsite.toile-libre.org/');
	}
			
	//On vérifie que les champs recquis soient bien remplis 
	elseif(empty($formNom) || empty($formMail) || empty($formDebut) || empty($formFin))
	{
		$alert = 'Tous les champs recquis doivent être rensignés';
	}
			
	// On vérifie que le format de l'e-mail est correct
	elseif(!preg_match($regex_mail, $formMail))
	{
		$alert = 'L\'adresse '.$formMail.' n\'est pas valide';
	}
			
	// On verifie qu'il n'y a aucun header dans les champs
	elseif (preg_match($regex_head, $formNom)
			|| preg_match($regex_head, $formMail)
			|| preg_match($regex_head, $formDebut)
			|| preg_match($regex_head, $formFin)
			|| preg_match($regex_head, $formCommentaires))
	{
		$alert = 'En-têtes interdites dans les champs du formulaires';
	}
			
	// Si aucun problème et aucun cookie créé, on construit le message et on envoie l'e-mail
	elseif (!isset ($_COOKIE['sent']))
	{
		//Destinataire
		$to = '[email protected]';
				
		//Construction du message
		$msg = 'Bonjour,'."\r\n\r\n";
		$msg .= 'Une demande de réservation de l\'appartement  été effectuée depuis le site'."\r\n\r\n";
		$msg .= 'par '.$formnom.' '.$formMail.' pour la période du '.$formDebut.' au '.$formFin."\r\n";
		$msg .= '****************************'."\r\n";
		$msg .=  $formCommentaire."\r\n";
		$msg .= '****************************'."\r\n";
				
		//En-têtes de l'e-mail
		$headers = 'From: "le site "<[email protected]>'."\r\n\r\n";
				
		//Envoi de l'e-mail
		if (mail($to, $sujet, $msg, $headers))
		{
			$alert = 'E-mail envoyé avec succès';					

			// On créé un cookie de courte durée (ici 120 secondes) pour éviter de 
			// renvoyer un mail en rafraichissant la page 
			setcookie("sent", "1", time() +120);
			
			//On detruit la variable $_POST
			unset($_POST);
		}
		else 
		{
			$alert = 'Erreur de l\'envoi de l\'e-mail';
		}
	}
				
	//Cas où le cookie est créé et que la page est rafraichie, on détruit la variable $_POST
	else 
	{
		unset($_POST);
	}
	
}
			
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr"  lang="fr">
	<head>
		<link type="text/css" rel="stylesheet" href="style.css">
		<title>Reservation</title>
		<meta content="text/html; charset=utf-8" http-equiv="Content-Type">
	</head>
	
	<?php
    	if (!empty($alert))
    	{
    		echo '<p style="color:red">'.$alert.'</p>';
    	}
    ?>
	
	<body>

    	<form action="index.php" method="POST">
    		<fieldset>
    			<legend><strong>Informations personnelles</strong></legend>
    			<label>
    				Nom, Prénom <font size="2" color="#FF0000">(recquis)</font>:
    				<input type="text" name="nom" />
    			</label><br /><br />
    			<label>
    				Adresse mail <font size="2" color="#0000FF">(optionnel)</font>:
    				<input type="text" name="mail" />
    			</label>
    		</fieldset><br />
    		
    		<fieldset>
    			<legend><strong>Dates souhaitées </strong><font size="2" color="#FF0000">(recquis)</font></legend>
    			<label>
    				Du :
    			 	<input type="text" name="debut" />
    			 </label><br /><br />
    			<label>
    			 	au :
    			 	<input type="text" name="fin" />
    			 </label>
    		</fieldset><br />
    		
    		<fieldset>
    			<legend><strong>Commentaires </strong><font size="2" color="#0000FF">(optionnel)</font></legend>
    			<textarea name="commentaires" cols="20" rows="7"></textarea>
    		</fieldset><br /><br />
    		
    		<input type="submit" value="Envoyer" /> &nbsp; &nbsp; &nbsp; &nbsp;
    		<input type="reset" value="Rétablir" />
    	</form>
    
    </body>
    
    
    

</html>
Modifié en dernier par kibba le 27 avr. 2011, 01:07, modifié 1 fois.

Eléphant du PHP | 241 Messages

27 avr. 2011, 00:15

Salut,

Il manque l'attribue name="Envoyer" à ton bouton submit, dans le cas présent il ne "vois" jamais le bouton actionné.

De plus tu te casse la tête pour la vérification de l'email, il existe une fonction pour :
if (filter_var($mail, FILTER_VALIDATE_EMAIL))
...

Petit nouveau ! | 7 Messages

27 avr. 2011, 01:06

Merci pour ta réponse, c’était tellement évident que j'ai rien vu... :shock:
ça marche beaucoup mieux maintenant

Et merci pour la fonction
(filter_var($email, FILTER_VALIDATE_EMAIL)
, je ne connaissais pas.
par contre en fouillant la doc sur cette fonction, j'ai trouvé :
FILTER_VALIDATE_EMAIL ne filtre pas uniquement des adresses internet.
par exemple administrateur@localhost est valide.
mais c'est vrai que plutôt qu'utiliser une regex, on peut utiliser en plus la fonction checkdnsrr() comme expliqué sur http://www.commentcamarche.net/faq/1401 ... resse-mail

Je découvre php, alors forcement... :roll:

Encore un grand merci pour ton aide

devlop78
Invité n'ayant pas de compte PHPfrance

27 avr. 2011, 01:14

Ouai ... Enfin si tu testes localhost, tu auras toujours bon à moins que le serveur ait un firewall qui se bloque en localhost ^^

Si on te donne localhost, que tu fais un dns dessus ca va te donner qqchose comme 127.0.0.1, tu vas faire un reverse ça va te donner localhost, et comme localhost === localhost, tu seras pas plus avancé ^^

Donc soit t'es gentil, et tu vérifies juste que le gars ne s'est pas trompé dans sa saisie, et alors c'est par pure prévention que tu lui dis que son email n'est pas valide ;

Soit t'es méchant, et tu vérifies que son nom de domaine pointe bien sur une adresse IP, différente de la tienne et de 500 autres ;

Soit t'es très très méchant mais aussi très très fûté et tu te dis qu'une adresse email valide est une adresse qui permet de recevoir du courrier, et tu ne fais que vérifier globalement son mail, tu lui envoies un mail avec un code dedans et tu ne valides son code que s'il confirme son code.

Je crois que 95 % des sites sont alors très très méchant :D

devlop78
Invité n'ayant pas de compte PHPfrance

27 avr. 2011, 01:19

En plus ça te donnera l'occasion de vérifier que le demandeur est bien le propriétaire de la boite mail ... Car même avec la dernière technologie de pointe qui te permettrait d'être sûr à 100% que une adresse mail existe et n'est pas présent dans une base de données des emails anonymes, rien ne t'empêche d'utiliser l'adresse e-mail de Barack Obama ...

Petit nouveau ! | 7 Messages

29 avr. 2011, 09:24

Je suis d'accord, de plus pour mon formulaire l'adresse e-mail est facultative alors il n'ya même pas d'interêt à la vérifier mais vu que j'apprends...

En tout cas merci pour vos réponses