8791 sujets

Développement web côté serveur, CMS

Bonjour,

Ma fonction isset() semble ne pas réagir a mes variables...
Malgré mon test IF et mes variables non initialisées, je passe le test et envoie un émail vide :

Voici mon code :



<?php

     $nom = $_POST['name'];
     $destinataire = 'contact@eight-monkeys.com';
     $email_expediteur= $_POST['email'];
     $email_reply= $_POST['email'];
     $sujet = $_POST['subject'];
     $message = $_POST['message'];

     $headers = 'From: ' . $nom . ' <' . $email_expediteur . '>' . "\n";
     $headers .= 'Return-Path: <' . $email_reply . '>' . "\n"; 
     $headers .= 'Content-Type: text/html; charset="iso-8859-1"' . "\n";
     $headers .= 'Content-Transfer-Encoding: 8bit';

     $message = '<html><head><title>' . $sujet . '</title></head><body>' . $message . '</body></html>';

     if( isset($_POST['name']) && isset($_POST['email']) && isset($_POST['message']) )
     {
	     if(mail($destinataire,$sujet,$message,$headers))
             {
	     	echo 'Le mail a été envoyé';
	     }
     }
     else
     {
          echo 'Le mail n\'a pu être envoyé';
     } 
     
?>


Un peu de html :

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
	<link rel="stylesheet" media="screen" type="text/css" href="./eightMonkeys.css" />
	<title>Eight Monkeys</title>
</head>
<body>
	<form action="contact.php" method="post">
		<p><label for="name">Nom</label><input type="text" name="name"/></p> 
		<p><label for="email">Email</label><input type="text" name="email"</p> 
		<p><label for="subject">Sujet</label>
			<select name="subject" id="subject"/>
				<option value="Recruitment">Recrutement</option>
				<option value="Match">Demande de match</option>
				<option value="Reclamation">Reclamation</option>
				<option value="Other">Autres</option>
			</select>
		</p>
		<p><label for="message">Message</label><textarea rows="15" cols="40" name="message"></textarea> </p>
		<p class="submit"><input type="submit" value="Envoyer" /></p>
                <p class="submit"><input type="reset" value="Reset" /></p>
	</form>
</body>
</html


Merci de votre aide Smiley biggrin
Modifié par Sven (31 Aug 2007 - 18:20)
Salut,

dans ton cas, l'index existe bien et la valeur est à null. Donc le isset, qui teste l'existence d'une variable te retourne true.

tu dois tester avec !empty();

++
bonjour

en plus du test suggéré :

le codage n'est pas cohérent.le isset n'à pas sa place içi, il doit venir avant l'initialisation des variables et les encadrer.

et çà :

a écrit :

$nom = $_POST['name'];
$sujet = $_POST['subject'];
$message = $_POST['message'];


très dangereux! strip_tag et/ou htmlentities s'il vous plait...

le deuxième else manque aussi, un if n'est pas forcément suivi d'un else mais dans le cas présent c'est nécessaire pour une meilleure gestion des erreurs.

a écrit :
$email_expediteur= $_POST['email'];


un test sur le mail serait aussi bienvenu, enfin, à mon avis.

http://www.expreg.com/expreg_article.php?art=verifmail


a écrit :

if(mail($destinataire,$sujet,$message,$headers)) {
echo 'Le mail a été envoyé';
}



a écrit :

if(mail($destinataire,$sujet,$message,$headers) == true) {
echo 'Le mail a été envoyé';
}


par expérience, je sais que c'est plus juste même si çà veux dire la même chose.

a écrit :
if (strpos($headers, "\n") != false || strpos($headers, "\r") != false)


évite les injections d'headers.
D'accord Smiley smile

Mais selon toi je dois utiliser qu'elle forme pour vérifier si le mail à bien été envoyé ?

if (strpos($headers, "\n") != false || strpos($headers, "\r") != false)


Ou l'autre ?

Pourquoi éviter les injections ? Non sécurisées ?