8791 sujets

Développement web côté serveur, CMS

salut tous le monde !!

j'essaie d'envoyer un email a plusieurs membres a la fois mais l'envoi de marche pas.


<?php
$nombre_de_lignes = 0;

$sql2 = ('SELECT count( membre_mail ) FROM membres');
$req2 = mysql_query($sql2);
$data2 = mysql_fetch_array($req2);
mysql_free_result ($req2);

$sql = ('select membre_mail from membres');
$req = mysql_query($sql);
$data = mysql_fetch_array($req);
mysql_free_result ($req);

// To
while ($nombre_de_lignes != $req2)
{
$nombre_de_lignes = $nombre_de_lignes + 1;
$to = (string)$req;
}


// Subject
$subject = 'inscription à la newsletter de jérém apéro';

// Message
$msg = 'votre inscription a bien été prise en compte';

// Headers
$headers = 'From: Jérém apéro <contact@jeremapero.fr>'."\r\n";
$headers .= 'Bcc: Moi <sketeur2@hotmail.fr>; lui <lui@server2.com>'."\r\n";
$header .= 'Content-Description: Newsletter J&eacute;r&eacute;m&apos;ap&eacute;ro'."\r\n";

$headers .= "\r\n";

// Function mail()
mail($to, $subject, $msg, $headers);
?>

je pense que mon problème vient de ma boucle while mais je sais pas comment faire autrement
quelqu'un peu t-il m'aider ? sa serait sympas Smiley cligne
Modifié par volcomboy62 (09 Feb 2011 - 13:59)
Salut volcomboy,
tu as plusieurs erreurs dans ton script ainsi que des éléments inutiles.
- Au niveau des erreurs, elles sont surtout au niveau des requetes où tu utilise la ressource mysql et non ses données ($req alors que les données sont dans $data, par exemple).
- La boucle est effectivement mal construite puisqu'il faut envoyer un mail pour chaque résultat, or tu as mis l'envoi en dehors de la boucle. De plus ta boucle utilise la ressource mysql au lieu de la donnée (voir 1er point).
- Dans ta construction de headers, tu as oublié un "s" sur la 3e ligne ($header au lieu de $headers).


J'ai repris ton code en le simplifiant... essaye ce code à la place :

// Subject
$subject = 'inscription à la newsletter de jérém apéro';

// Message
$msg = 'votre inscription a bien été prise en compte';

// Headers
$headers = 'From: Jérém apéro <contact@jeremapero.fr>'."\r\n";
$headers .= 'Bcc: Moi <sketeur2@hotmail.fr>; lui <lui@server2.com>'."\r\n";
$headers .= 'Content-Description: Newsletter J&eacute;r&eacute;m&apos;ap&eacute;ro'."\r\n";
$headers .= "\r\n";

$sql = ('select membre_mail from membres');
$req = mysql_query($sql);

// Boucle d'envoi
while ($data = mysql_fetch_array($req);)
{
	$to = (string)$data['membre_mail'];

	// Function mail()
	mail($to, $subject, $msg, $headers);
}

mysql_free_result ($req);
Salut,

Au contraire, je pense que l'envoi doit ce faire ne dehors de la boucle, mais le premier paramètre de mail doit comporter tout les membres. Ça évite un appelle répété à mail (optimisation).

En reprenant juste la boucle

if ($data = mysql_fetch_array($req))
{
    //pas besoin de caster en string, $data et déjà un tableau de string.
    $to = $data['membre_mail'];
    while ($data = mysql_fetch_array($req))
        $to .= ', '.$data['membre_mail'];
    mail($to, $subject, $msg, $headers);
}

Modifié par jo_link_noir (07 Feb 2011 - 20:13)
merci sa marche beaucoup mieux !! Smiley smile
je vais en profiter pour vous demander, je voudrait récupéré le contenu d'une textbox pour le mettre comme message dans mon mail.
Sachant que ma textbox ce trouve sur la page index_newsletter avec ceci :

<form>
<p>Newsletter</p>
<p>titre de la newsletter</p>
<input type="text" name="titre_newsletter" style="width: 577px"/>
<p>message de la newsletter</p>
<input type="text" name="newsletter" class="auto-style7" style="height: 330px; width: 581px"/>
<a href="envoi_mail.php"><input type="button" name="envoi_mail" value="envoi mail"/></a>
</form>

et dans mon fichier envoi_email je voudrait récupérer le contenu des textbox, j'ai fait comme ceci :

// Subject
$subject = $_POST['titre_newsletter'];

// Message
$msg = $_POST['newsletter'];

mais là encore sa ne marche pas, pourtant il me semble que c'est bien la méthode POST qui sert a récupérer des données.
il faut spécifier à la balise form que l'on veux utiliser la methode POST:


      <form id="mail" action="sendmail.php" method="post">
        <p><textarea rows="12" cols="74" name="message"></textarea></p>
        <p><input type="submit" class="send" value="" /></p>
      </form>
bon alors,
j'ai fait référence a la méthode post dans ma balise form et j'ai essayer de cacher les destinataires a l'aide de bcc mais rien de marche Smiley bawling

mon fichier index_newsletter.php :
<form method="post">
<p>Newsletter</p>
<p>titre de la newsletter</p>
<input type="text" name="titre_newsletter" style="width: 577px"/>
<p>message de la newsletter</p>
<textarea name="newsletter" class="auto-style7" style="height: 330px; width: 581px"></textarea>
<a href="envoi_mail.php"><input type="button" name="envoi_mail" value="envoi mail"/></a>
</form>


mon fichier envoi_mail.php :
<?php

// Subject
$subject = $_POST['titre_newsletter'];

// Message
$msg = $_POST['newsletter'];

// Headers
$headers = 'From: Jérém apéro <contact@jeremapero.fr>'."\r\n";
$headers .= 'Bcc: Moi <moi@serveur1.com>; lui <lui@server2.com>; lui <lui@server2.com>'."\r\n";
$headers .= 'Content-Description: Newsletter J&eacute;r&eacute;m&apos;ap&eacute;ro'."\r\n";
$headers .= "\r\n";

$sql = ('select membre_mail from membres');
$req = mysql_query($sql);

// Boucle d'envoi
if ($data = mysql_fetch_array($req))
{
//pas besoin de caster en string, $data et déjà un tableau de string.
$to = $data['membre_mail'];
while ($data = mysql_fetch_array($req))
$to .= ', '.$data['membre_mail'];
mail($to, $subject, $msg, $headers);
}
mysql_free_result ($req);
echo ('email envoyé');
?>