8800 sujets

Développement web côté serveur, CMS

Bonjour à tous,

Voila je me suis formé recemment a php mysql en autodidacte ( merci google et autre tuto Smiley smile ...) et grace a ce que j'ai appris j'ai reussi a cree un script d'envoi de mailing avec une base de donné.

Mon but est de personaliser les mails que j'envois de maniere automatique grace aux informations collectées dans ma base de donnée. Pour cet exemple je souhaite afficher le mail et le prenom de la personne recevant le mail.

voici mon code :

$table = mysql_query("SELECT * FROM Mailing") or die(mysql_error());
$table2 = mysql_fetch_array($table);
$MailBody .= $_POST['mailing'];
$MailSubject = $_POST['subject'];
$MailHeader .= "MIME-Version: 1.0\n";
$MailHeader .= "Content-type: text/html; charset=iso-8859-1\n";


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

					        
					while ($table2 = mysql_fetch_array($table)) {
					$MailBody .= "<p>salut " . $table2['Prenom'] . " ton mail c'est " . $table2['Mail'] . " dispo</p><br />";
					mail($table2['Mail'], $MailSubject, $MailBody, $MailHeader);
					$table2++;
					};


Mon probleme :

Mes mails s'envoient correctement a toutes les lignes de ma table, mais $MailBody lorsqu'il ce trouve dans la boucle "while" affiche tous mes "Prenom" et tous mes "Mail" dans mon mailing, et seulement la premiere ligne de ma table lorsqu'il est situé à l'exterieur de la boucle.

J'ai fais pas mal d'essais mais rien a faire :s. Je ne pense pas que ce soit sorcier car mon code est assez simple en fin de compte.

Voila j'esper avoir été claire, si une âme charitable pouvait m'éclairer de ses lumieres.

( vous remarquerez que certaines informations comme $MailBody et $MailSubject sont recuent via un formulaire je peux egalement vous fournir le code si besoin. )
Modifié par Traxyl2en1 (16 Jan 2009 - 16:41)
faudrait le code du formulaire...

$MailBody .= $_POST['mailing'];


si tu utilise des noms de variables cohérantes peut-eetre que le corps de ton mail recupère le contenu du mailing qui se trouve dans le contrôle de formulaire nommé "mailing"..
<form action="EMScript.php" method="post">
<input type="hidden" value="ok" name="hidden" />
<font style="margin-left:30px;">Entrez votre code html en entier dans la zone de texte<br /><br />
intitulé du mail<br />
<input type="text" size="24" name="subject" /><br /><br />
Contenu HTML<br />
<TEXTAREA name="mailing" rows="10" cols="50"></TEXTAREA><br /><br />
<input type="submit" value="Envoyer l'emailing" />
</font></form>


$MailBody contient bien ce qu'il y a marqué dans le "TEXTAREA" du formulaire
mais dans "EMScript.php" je rajoute une ligne
$MailBody .= "<p>salut " . $table2['Prenom'] . " ton mail c'est " . $table2['Mail'] . " dispo</p><br />";

et c'est cette ligne qui pose probleme en faite.
Il m'affiche bien la ligne "salut prenom ton mail c'est mail@mail.fr dispo"
mais le probleme c'est que si je place cette ligne dans ma boucle il m'affiche dans chaqu'un de mes mails cette ligne repeté autant de fois qu'il y a d'adresse mail dans ma base, alors que je shouaiterais qu'elle s'affiche qu'une fois et quelle corresponde aux info que j'ai enregistré sur cet utilisateur dans ma base .
$MailBody .= $_POST['mailing'];

c'est

$MailBody = $_POST['mailing'];


sinon tu concatènes sans arrêts dans la variable $MailBody ^^
Merci pour ta réponse zzs.
Effectivement $MailBody devait rester une variable non concatener

Voicie le code qui fonctionne:
while ($table2 = mysql_fetch_array($table)) {
?>
<tr><td>
<p>Mail:<?php echo $table2['Mail'];?><br /></p></td></tr>
<?php 
$MailPreso = "<p>salut " . $table2['Prenom'] . " ton mail c'est " . $table2['Mail'] . " dispo</p><br />";
mail($table2['Mail'], $MailSubject, $MailBody . $MailPreso, $MailHeader);
$table2++;
};          
};


mais j'avoue ne pas comprendre pourquoi je ne peux pas concatener plusieurs info dans $MailBody et que je dois le faire dans la foncion "mail()".

Je te remercie encore pour ta reponse si tu as des explications a mon interogation je suis preneur
Smiley cligne