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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : formulaire d'envoi par mail, ne s'execute pas[RESOLU]

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

par kibba » 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

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

par devlop78 » 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 ...

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

par devlop78 » 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

Re: formulaire d'envoi par mail, le code ne s'execute pas

par kibba » 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

Re: formulaire d'envoi par mail, le code ne s'execute pas

par misterflo » 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))
...

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

par kibba » 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>