Mise à jour BDD après envoi newsletter

Utilisateur anonyme - 31 mai 2006 à 06:30
 Utilisateur anonyme - 31 mai 2006 à 06:35
<?php
$id = $_POST&#91;'id'];&#160;&#160;//récupération de l'identifiant de la news à poster


// ici j'ai tout mon petit script de de newsletter (mise en forme)
// voilà le passage qui bloque :


$sql = "SELECT * FROM newsletter2";
$req = mysql_query($sql, $cnx) or die(mysql_error());
while($res = mysql_fetch_object($req)){


$dest=explode(',', $res->envoi);&#160;&#160;&#160;&#160;&#160;&#160;//récupération du champs dans lequel est stocké les identifiants de news déjà envoyé&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;
foreach ($dest as $valeur){
if(eregi($id, $valeur)){ // vérification que l'ID de cette news n'est pas déjà inscrit




// on sélectionne tous les emails qui n'ont pas reçu la newsletter pour cette news-là
$select = "SELECT email FROM newsletter2 WHERE envoi='$id'";
$result = mysql_query($select, $cnx) or die(mysql_error());
$nbenreg=mysql_affected_rows();
$nbcols=mysql_num_fields($result);
$maxcol=$nbcols-1;
$maxenreg=$nbenreg-1;
$tabdonnee = array();
reset($tabdonnee);
while($ligne = mysql_fetch_array($result))
{
$tabdonnee&#91;] = $ligne;
}
//boucle de transmission*******************************
//à tous ceux qui ont un email dans la base de données
$id = $res->envoi.$id.","; //récupération du champs 'envoi' avec tous les numéros d'identifiant de news auquel on ajoute une virgule à la fin
$x=0;
while ($x<$nbenreg)
{
$email=$tabdonnee&#91;$x]&#91;'email'];


&#160;&#160;
&#160;&#160;&#160;&#160;&#160;&#160;if (mail($email,$objet,$msg,$headers)) {//envoi de la newsletter
&#160;&#160;&#160;&#160;&#160;&#160;$req = mysql_query("UPDATE newsletter2 SET envoi='$id' WHERE email='$email'", $cnx) or die(mysql_error()); // mise à jour de la base de donnée, c'est à dire ajout à la fin de la ligne 'envoi' l'identifiant de cette news-là
&#160;&#160;&#160;&#160;&#160;&#160;header("Location:envoi.php?erreur=sendok") ;
&#160;&#160;}
&#160;&#160;else
&#160;&#160;{
&#160;&#160;&#160;&#160;&#160;&#160;header("Location:../../error.php?erreur=sendko") ;
&#160;&#160;}
$x++;
}}}}
;?>
Colorez votre code PHP sur les forums grâce à Developpez.com

1 réponse

Utilisateur anonyme
31 mai 2006 à 06:35
(Oups, désolé pour le précédent forum... mais j'ai quand même cherché le bouton "modifier"...)

Bonjour,

Alors voilà l'idée du truc ;

1 - on vérifie que la news n'a pas déjà été envoyé à la personne (on cherche dans le champs "envoi" si on trouve ou non le numéro de la news).

2 - si on ne le trouve pas, alors on peut envoyer la news.

3 - une fois l'envoi de la newsletter à chaque adresse email valide (à qui la newsletter n'a pas encore été envoyée...), on met à jour la base pour dire que justement on vient de le faire.

La contrainte, c'est que je ne veux pas effacer les numéros des newsletter précédentes, je veux qu'elles s'ajoutent à la suite pour pouvoir faire des stats...

J'ai bien un script mais ça bug quelque part et comme je suis encore un peu novice, si quelqu'un voulait bien jetter un oeil à mon problème...

Voilà à peu près à quoi ça ressemble :


<?php
$id = $_POST['id'];  //récupération de l'identifiant de la news à poster


// ici j'ai tout mon petit script de de newsletter (mise en forme)
// voilà le passage qui bloque :


$sql = "SELECT * FROM newsletter2";
$req = mysql_query($sql, $cnx) or die(mysql_error());
while($res = mysql_fetch_object($req)){


$dest=explode(',', $res->envoi); //récupération du champs dans lequel est stocké les identifiants de news déjà envoyé  
foreach ($dest as $valeur){
if(eregi($id, $valeur)){ // vérification que l'ID de cette news n'est pas déjà inscrit




// on sélectionne tous les emails qui n'ont pas reçu la newsletter pour cette news-là
$select = "SELECT email FROM newsletter2 WHERE envoi='$id'";
$result = mysql_query($select, $cnx) or die(mysql_error());
$nbenreg=mysql_affected_rows();
$nbcols=mysql_num_fields($result);
$maxcol=$nbcols-1;
$maxenreg=$nbenreg-1;
$tabdonnee = array();
reset($tabdonnee);
while($ligne = mysql_fetch_array($result))
{
$tabdonnee[] = $ligne;
}
//boucle de transmission*******************************
//à tous ceux qui ont un email dans la base de données
$id = $res->envoi.$id.","; //récupération du champs 'envoi' avec tous les numéros d'identifiant de news auquel on ajoute une virgule à la fin
$x=0;
while ($x<$nbenreg)
{
$email=$tabdonnee[$x]['email'];


 
 if (mail($email,$objet,$msg,$headers)) {//envoi de la newsletter
    $req = mysql_query("UPDATE newsletter2 SET envoi='$id' WHERE email='$email'", $cnx) or die(mysql_error()); // mise à jour de la base de donnée, c'est à dire ajout à la fin de la ligne 'envoi' l'identifiant de cette news-là
 header("Location:envoi.php?erreur=sendok") ;
  }
  else
  {
    header("Location:../../error.php?erreur=sendko") ;
  }
$x++;
}}}}
;?>

Voilà, si quelqu'un a une piste, je suis pour, merci d'avance...
0
Rejoignez-nous