[PHP] 3 mails envoyés au lieu d'Un ?!

Résolu/Fermé
digival Messages postés 193 Date d'inscription mercredi 14 octobre 2009 Statut Membre Dernière intervention 7 novembre 2010 - 3 nov. 2009 à 15:44
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 - 3 nov. 2009 à 16:13
Bonjour,

Voici mon script tiré de ce tuto.

<?php
session_start();
if ( isset($_POST['objet']) ) {$_SESSION['objet'] = $_POST['objet'];}
?>

<?php
$mail_destination = 'mine@hotmail.fr';

if (!preg_match("#^[a-z0-9._-]+@(hotmail|live|msn).[a-z]{2,4}$#", $mail_destination))
{ $passage_ligne = "\n"; }
else
{ $passage_ligne = "\n"; }

if ($_POST['objet'] == 'inscription'){$message_txt = ''.$_POST['nom'].' souhaiterait s\'inscrire sur mon site !';}
elseif ($_POST['objet'] == 'password_change'){$message_txt = ''.$_POST['nom'].' souhaiterait changer son mot de passe par '.$_POST['mdp_change'].' !';}
[...]

if ($_POST['objet'] == 'inscription'){$message_html = ''.$_POST['nom'].' souhaiterait s\'inscrire sur mon site !';}
elseif ($_POST['objet'] == 'password_change'){$message_html = ' $_POST[\'nom\'] souhaiterait changer son mot de passe par $_POST[\'mdp_change\'] !';}
[...]

if ( isset($_POST['image']) )
{
$fichier = fopen("image.jpg", "r");
$attachement = fread($fichier, filesize("image.jpg"));
$attachement = chunk_split(base64_encode($attachement));
fclose($fichier);
}

$boundary = "-----=".md5(rand());
$boundary_alt = "-----=".md5(rand());

$sujet = $_POST['objet'];

$header = "From: \"Mon Site\"<mine@hotmail.fr>".$passage_ligne;
$header.= "Reply-to: \"Mon Site\" <mine@hotmail.fr>".$passage_ligne;
$header.= "MIME-Version: 1.0".$passage_ligne;
$header.= "Content-Type: multipart/mixed;".$passage_ligne." boundary=\"$boundary\"".$passage_ligne;

// CRÉATION DU MESSAGE
$message = $passage_ligne."--".$boundary.$passage_ligne;
$message.= "Content-Type: multipart/alternative;".$passage_ligne." boundary=\"$boundary_alt\"".$passage_ligne;
$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;
// Ajout du message au format texte
$message.= "Content-Type: text/plain; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_txt.$passage_ligne;
//==========

$message.= $passage_ligne."--".$boundary_alt.$passage_ligne;

// Ajout du message au format HTML
$message.= "Content-Type: text/html; charset=\"ISO-8859-1\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: 8bit".$passage_ligne;
$message.= $passage_ligne.$message_html.$passage_ligne;
//==========

// Fermeture de la boundary alternative
$message.= $passage_ligne."--".$boundary_alt."--".$passage_ligne;
//==========

$message.= $passage_ligne."--".$boundary.$passage_ligne;

//AJOUT DE LA PIÈCE JOINTE
$message.= "Content-Type: image/jpeg; name=\"image.jpg\"".$passage_ligne;
$message.= "Content-Transfer-Encoding: base64".$passage_ligne;
$message.= "Content-Disposition: attachment; filename=\"image.jpg\"".$passage_ligne;
$message.= $passage_ligne.$attachement.$passage_ligne.$passage_ligne;
$message.= $passage_ligne."--".$boundary."--".$passage_ligne;
//==========

// ENVOI DE L'E-MAIL
mail($mail_destination,$sujet,$message,$header);

?>
<html lang="fr" xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<title>Site de Valentin</title>
<meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
<meta http-equiv="content-language" content="fr" />
<style type="text/css">
[...]
</style>
</head>
<body>

<h1 class="fz_ou_autre">Me Contacter</h1>

<form method="post" action="w.mail.php" >

<span class="etape">1. Sélectionne le sujet du message...</span><br/>
<select name="objet">
<option value="inscription" <?php if ( isset($_POST['objet']) AND ($_POST['objet'] == 'inscription') ){ ?> selected="selected" <?php } ?> >t'inscrire et bénéficier des nombreux avantages !</option>
<option value="password_oubli" <?php if ( isset($_POST['objet']) AND ($_POST['objet'] == 'password_oubli') ){ ?> selected="selected" <?php } ?> >se rappeler de son mot de passe ?</option>
<option value="password_change" <?php if ( isset($_POST['objet']) AND ($_POST['objet'] == 'password_change') ){ ?> selected="selected" <?php } ?> >changer ton mot de passe</option>
[...]
</select>
<input type="submit" value="Ok"><br/>
</form>
<br/>

<form method="post" action="w.mail.php" >
<span class="etape">2. Remplis les champs suivants :</span><br/>
<label for="nom">prénom et nom :</label> <input type="text" name="nom"/><br />
<label for="mail">adresse mail :</label> <input type="text" name="mail" style="margin-left: 4.5%"/><br />

<?php

if ( isset($_POST['objet']) )
{

if ( $_SESSION['i_nom'] == true )
{
if ($_POST['objet'] == 'password_change')
{ ?>
<label for="mdp_change">mot de passe désiré :</label> <input type="text" name="mdp_change" /><br/>
<?php }

elseif ( $_POST['objet'] == 'realisation' )
{ ?>
<label for="creation">nom de la réalisation :</label> <input type="text" name="creation"/><br />
<?php }

elseif ...

[...]

;}

?>

<br/>
<span class="etape">3. Recopie maintenant le code de vérification ci-dessous :</span><br />
<img src="w.captcha.php" alt="captcha" style="margin-left: 2%; border: 1px solid grey" /> <input type="text" name="verif" size="10" maxlength="6" /><br/>
<br/>
<input name="send" type="submit" value="Envoyer !" style="margin-left: 5%"> <label for="send" style="color: blue"> Clique pour valider et envoyer ton message !</label><br/>
</form>

</body>
</html>



-> Pourquoi je reçois 3 mail au lieu d'Un ?

(2 quand je clique sur Ok, dont :
1 sans objet et sans message
1 avec l'objet et le contenu du message sauf les variables (ex : "souhaiterait changer son mot de passe par !")

1 quand je clique sur Envoyer sans objet ni message.)
A voir également:

2 réponses

D'après ce qu'on voit de ton script, l'instruction mail n'est soumise à aucune condition. Elle est donc exécutée à chaque exécution de ton script, c'est à dire :
. une première fois quand tu affiches ton formulaire
. une deuxième fois quand tu cliques sur OK
. une troisième fois quand tu cliques sur envoyer

Et selon les cas, certaines de tes variables sont initialisées et d'autres non, ce qui explique qu'il y a ou non un objet ou un message

Donc tu devrais mettre un test pour n'envoyer de mail que dans le cas qui t'intéresse
1
avion-f16 Messages postés 19246 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 21 avril 2024 4 497
3 nov. 2009 à 16:13
Je confirme ce que dit le père.
Essaye avec ce générateur.
0