Foreach-Problem

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Foreach-Problem

    Hallo,

    ich versuche gerade ein Newsletter-Script zu schreiben, das folgendes kann:
    Auswahl von Gruppe (aus db), verteilter Versand (also nicht alle eMails auf einmal).

    So nun habe ich dazu ein Sript geschrieben. Dieses bekommt ein Array wo die Gruppen drinne stehen. Nun will ich für jeden Array-Eintrag die eMail-Adressen aus der db holen, die Mails verschicken und so.
    Das ganze soll aber wie folgt passieren: Eine [coderwiki]Informationen/Variable[/coderwiki] im Script gibt an wieviele eMails geschickt werden sollen. Diese Anzahl wird aus der DB geholt und verarbeitet, danach kommt ein Refresh und die nächsten x Adressen werden verarbeitet.

    Das Problem ist (glaub ich), dass man in der Foreach nicht so richtig nen Refresh hinbekommt.
    Naja hier mal mein Script, wenn jemand ne Lösung für mein Problem findet, bitte melden.
    Fehler tritt erst bei (min) 2 ausgewählten Gruppen auf.

    Quellcode

    1. <?php
    2. session_start();
    3. include('connect.inc.php');
    4. $anzahl = 10;
    5. $f_name = $_SERVER['SCRIPT_NAME'];
    6. $header = 'From: webmaster@nachneun.de';
    7. $check = true;
    8. if(isset($_POST['submit'])){
    9. $_SESSION['mail_nachricht'] = $_POST['nachricht'];
    10. $_SESSION['mail_betreff'] = $_POST['betreff'];
    11. $_SESSION['jahrgang'] = $_POST['jahrgang'];
    12. }
    13. #else{
    14. # die("Bitte Nachricht und Betreff eingeben");
    15. #}
    16. foreach ($_SESSION['jahrgang'] as $value) {
    17. if($value == 0){
    18. $sql = "SELECT * FROM user WHERE email!=''";
    19. }
    20. else {
    21. $sql ="SELECT * FROM user WHERE email!='' AND jahrgang = $value";
    22. }
    23. $result = mysql_query($sql);
    24. $db_end = mysql_num_rows($result);
    25. if(isset($_GET['anf'])){
    26. $anf = $_GET['anf'];
    27. }
    28. else{
    29. $anf=0;
    30. }
    31. $end = $anf + $anzahl;
    32. if($db_end < $anf){
    33. $anf = $db_end;
    34. }
    35. if($value == 0){
    36. $sql = "SELECT * FROM user WHERE email!='' LIMIT ".$anf.",".$anzahl;
    37. }
    38. else {
    39. $sql = "SELECT * FROM user WHERE jahrgang=".$value." AND email!='' LIMIT ".$anf.",".$anzahl;
    40. }
    41. $_SESSION['s'][] = $sql;
    42. #$sql = "SELECT * FROM mailtest LIMIT ".$anf.",".$anzahl;
    43. $result = mysql_query($sql) or die(mysql_error());
    44. while($row = mysql_fetch_assoc($result)){
    45. $_SESSION['arr'][] = $row['email'];
    46. #if(!mail ($row['mail'],$_SESSION['mail_betreff'].$row['id'],$_SESSION['mail_nachricht'], $header)){
    47. # $check=false;
    48. #}
    49. }
    50. if ($anf < $db_end){
    51. header("LOCATION: $fname?anf=$end");
    52. }
    53. else {
    54. if($check){
    55. echo "Der Newsletter wurde versandt!<br>";
    56. echo "<a href=\"sendmail.php\">Zurück</a><br>";
    57. echo "<pre>";
    58. print_r($_SESSION['arr']);
    59. print_r($_SESSION['s']);
    60. print_r($_SESSION['jahrgang']);
    61. echo "</pre>";
    62. session_destroy();
    63. }
    64. }
    65. }// foreach
    66. ?>
    Alles anzeigen


    Die ganzen Array sind zur Ausgabe, um zu sehen was eigentlich passiert.

    Danke im Voraus für Ideen..
  • da magst du sicher recht haben, schließlich habe ich genauso hier hergefunden.

    also hier eine (!) Lösung meines Problems:

    Quellcode

    1. <?php
    2. session_start();
    3. $anzahl = 10;
    4. $fname = $_SERVER['SCRIPT_NAME'];
    5. $mymail = "bla@bla.de";
    6. $header = 'From: $mymail';
    7. $check = true;
    8. if(isset($_POST['newsletter_submit']) AND (!empty($_POST['jahrgang'])) ){
    9. $_SESSION['newsletter_nachricht'] = $_POST['nachricht'];
    10. $_SESSION['newsletter_betreff'] = $_POST['betreff'];
    11. $_SESSION['jahrgaenge'] = $_POST['jahrgang'];
    12. $_SESSION['newsletter_control'] = true;
    13. $anf = 0;
    14. rsort($_SESSION['jahrgaenge']);
    15. }
    16. elseif(empty($_POST['jahrgang'])){
    17. $_SESSION['newsletter_return'] = "Bitte Empfänger selektieren!<br>
    18. <a href=\"?p=optionen&action=newsletter\">-> Zurück</a>";
    19. }
    20. if($_SESSION['newsletter_control']){
    21. $sql="SELECT * FROM `user` WHERE";
    22. if($_SESSION['jahrgaenge'][0]!=0){
    23. $first = true;
    24. foreach($_SESSION['jahrgaenge'] as $value){
    25. if($first)
    26. $first=false;
    27. else
    28. $sql.=" OR";
    29. $sql .=" `email`!='' AND `jahrgang`='".$value."'";
    30. }
    31. }
    32. else {
    33. $sql .=" `email`!=''";
    34. }
    35. $sql1 = $sql;
    36. $sql .=" LIMIT $anf,$anzahl";
    37. $result = mysql_query($sql);
    38. $result1 = mysql_query($sql1);
    39. $db_end = mysql_num_rows($result1);
    40. while($row = mysql_fetch_assoc($result)){
    41. if(!mail ($row['email'],$_SESSION['newsletter_betreff'],$_SESSION['newsletter_nachricht'], $header)){
    42. $check=false;
    43. }
    44. }
    45. if ($anf < $db_end){
    46. $end = $anf+$anzahl;
    47. header("LOCATION: $fname?p=newsletter&anf=$end");
    48. }
    49. else {
    50. if($check){
    51. $_SESSION['newsletter_return'] = "Der Newsletter wurde versandt!<br>
    52. Es wurden insgesamt <b>$db_end</b> eMails verschickt.<br>
    53. <a href=\"index.php?p=optionen\">-> Zurück</a><br>";
    54. unset($_SESSION['newsletter_nachricht']);
    55. unset($_SESSION['newsletter_betreff']);
    56. unset($_SESSION['jahrgaenge']);
    57. $_SESSION['newsletter_control'] = false;
    58. }
    59. else{
    60. $_SESSION['newsletter_return'] = "Fehler beim Senden der eMails.<br>";
    61. }
    62. }
    63. }
    64. else{
    65. $_SESSION['newsletter_return'] .= "<br>Bitte das Sendeformular nutzen!";
    66. }
    67. ?>
    Alles anzeigen


    Könnte man vielleicht auch in eine Funktion oder ähnliches schreiben, Verbesserungen sind immer möglich...

    cya