Moin moin,
nach Stunden des Kopfzerbrechens ahb ich mich jetzt entschieden hier mal wieder ins Forum zu posten...ich kann den Fehler einfach nicht finden.
Ich habe ein Newsletter script gebaut und muss da jetzt wegen sehr vielen Adressen in der DB eine timeout Überbrückungs Funktion irgendwie einbauen. Standardmässig wird sowas ja mittlerweile immr mit meta-refresh gemacht und ich hab mich auch für diese variante entschieden. Das ist script ist vim Prinzip eigentlich einfach.
ich hab zu versuchszqwecken eingestellt dass pro Schleifen Durchgang EINE mail verschickt wird...
Problem: Wenn das script dazu übergeht die letzte mail zu senden wird das MySQL query nicht richtig gemacht und MySQL sagt es wäre keine weiter Adresse mehr da...irgdnwie komisch und hängt sich dann in einer Endlosschleife auf...
ich hab dann mal um rauszufinden was dass ist die MySQL numrows vom query ausgegeben...
ich hab 4 user in der DB(nur zum Test), bis Nummer 3 geht alles wunderbar, dann wird wieder refresht und das script sagt immer noch, "an 3 user versendet" es sollten aber 4 sein...anschliessend hängt sich das script dann in ner Endloschleife auf. "an 3 user versendet", "an 3 user versendet", "an 3 user versendet" etc.....
Hier mal der Code:
###### timeout Daten #########
if(!($start)){$start = 0;}
if(!($sent_to)){$sent_to = 0;}
###### Wieviele auf einmal versendet werden ########
$send_amount = 1;
#######################################
### mail-adressen werden ausgelesen ###
$mail_connect = mysql_query("SELECT * FROM $tab_user ORDER BY id LIMIT $start,$send_amount", $verbindung);
$no_mail_connect = mysql_num_rows($mail_connect);
$anzahl_adressen = mysql_num_rows($exist_control);
####################################################################
############### Daten des Newsletters werden abgefragt #############
$mails_sent_in_loop= 0;
while($daten = mysql_fetch_array($mail_connect))
{
$adresse = $daten[mail];
$betreff = $main_daten[betreff];
######### Inhalt #########
$inhalt = $content;
if($main_daten[content_type] == "text"){$inhalt = eregi_replace("{abmelde-Link}","".$script_url."delete.php?action=del&mail=$daten[mail]","$inhalt");}
else{$inhalt = eregi_replace("{abmelde-Link}","<a href=\"".$script_url."delete.php?action=del&mail=$daten[mail]\">$daten[mail] abmelden</a>","$inhalt");}
### Der Newsletter wird versendet ###
$newsletter = mail($adresse, $betreff, $inhalt, $header);
if($newsletter)
{
$sent_to++;
$mails_sent_in_loop++;
}
##### Wenn die Anzahl von Adressen erreicht wurde wird der user
##### ermittelt von dem an in der naechsten Schleife versendet werden soll
if($mails_sent_in_loop == $no_mail_connect){$start = $sent_to+1; break;}
}# while ende
if($mails_sent_in_loop == $no_mail_connect)
{
### Wenn noch versendet wird die Seite refresht
if($sent_to !== $anzahl_adressen)
{
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
echo "<meta http-equiv=\"refresh\" content=\"3; Url=post_send.php?action=send_newsletter&senden= Ja &id=$id&sent_to=$sent_to&start=$start&m=$m\">\n";
$meldung = "still_sending";
}
######## Wenn der Newsletter komplett versendet wurde ###############
else
{
$log = mysql_query("INSERT INTO $tab_log SET vorgang='<b><font color=\"red\">Newsletter \"$main_daten[betreff]\" wurde versendet</font></b>', datum='$datum', type='admin'", $verbindung);
$update_main = mysql_query("UPDATE $tab_main SET status='versendet' WHERE id='$id'", $verbindung);
$meldung = "alles_versendet";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
benachrichtigung("alles_verschickt", "");
}
} # ende $send_newsletter
else
{
benachrichtigung("nicht_alles_verschickt", "");
$meldung = "versenden_fehler";
}
ich hoffe jemand hat ne idee...dass ist bestimmt was mit den Variablen die kontrollieren ob alles versendet wurde...
Viele Grüsse, Flo
nach Stunden des Kopfzerbrechens ahb ich mich jetzt entschieden hier mal wieder ins Forum zu posten...ich kann den Fehler einfach nicht finden.
Ich habe ein Newsletter script gebaut und muss da jetzt wegen sehr vielen Adressen in der DB eine timeout Überbrückungs Funktion irgendwie einbauen. Standardmässig wird sowas ja mittlerweile immr mit meta-refresh gemacht und ich hab mich auch für diese variante entschieden. Das ist script ist vim Prinzip eigentlich einfach.
ich hab zu versuchszqwecken eingestellt dass pro Schleifen Durchgang EINE mail verschickt wird...
Problem: Wenn das script dazu übergeht die letzte mail zu senden wird das MySQL query nicht richtig gemacht und MySQL sagt es wäre keine weiter Adresse mehr da...irgdnwie komisch und hängt sich dann in einer Endlosschleife auf...
ich hab dann mal um rauszufinden was dass ist die MySQL numrows vom query ausgegeben...
ich hab 4 user in der DB(nur zum Test), bis Nummer 3 geht alles wunderbar, dann wird wieder refresht und das script sagt immer noch, "an 3 user versendet" es sollten aber 4 sein...anschliessend hängt sich das script dann in ner Endloschleife auf. "an 3 user versendet", "an 3 user versendet", "an 3 user versendet" etc.....
Hier mal der Code:
###### timeout Daten #########
if(!($start)){$start = 0;}
if(!($sent_to)){$sent_to = 0;}
###### Wieviele auf einmal versendet werden ########
$send_amount = 1;
#######################################
### mail-adressen werden ausgelesen ###
$mail_connect = mysql_query("SELECT * FROM $tab_user ORDER BY id LIMIT $start,$send_amount", $verbindung);
$no_mail_connect = mysql_num_rows($mail_connect);
$anzahl_adressen = mysql_num_rows($exist_control);
####################################################################
############### Daten des Newsletters werden abgefragt #############
$mails_sent_in_loop= 0;
while($daten = mysql_fetch_array($mail_connect))
{
$adresse = $daten[mail];
$betreff = $main_daten[betreff];
######### Inhalt #########
$inhalt = $content;
if($main_daten[content_type] == "text"){$inhalt = eregi_replace("{abmelde-Link}","".$script_url."delete.php?action=del&mail=$daten[mail]","$inhalt");}
else{$inhalt = eregi_replace("{abmelde-Link}","<a href=\"".$script_url."delete.php?action=del&mail=$daten[mail]\">$daten[mail] abmelden</a>","$inhalt");}
### Der Newsletter wird versendet ###
$newsletter = mail($adresse, $betreff, $inhalt, $header);
if($newsletter)
{
$sent_to++;
$mails_sent_in_loop++;
}
##### Wenn die Anzahl von Adressen erreicht wurde wird der user
##### ermittelt von dem an in der naechsten Schleife versendet werden soll
if($mails_sent_in_loop == $no_mail_connect){$start = $sent_to+1; break;}
}# while ende
if($mails_sent_in_loop == $no_mail_connect)
{
### Wenn noch versendet wird die Seite refresht
if($sent_to !== $anzahl_adressen)
{
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
echo "<meta http-equiv=\"refresh\" content=\"3; Url=post_send.php?action=send_newsletter&senden= Ja &id=$id&sent_to=$sent_to&start=$start&m=$m\">\n";
$meldung = "still_sending";
}
######## Wenn der Newsletter komplett versendet wurde ###############
else
{
$log = mysql_query("INSERT INTO $tab_log SET vorgang='<b><font color=\"red\">Newsletter \"$main_daten[betreff]\" wurde versendet</font></b>', datum='$datum', type='admin'", $verbindung);
$update_main = mysql_query("UPDATE $tab_main SET status='versendet' WHERE id='$id'", $verbindung);
$meldung = "alles_versendet";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
benachrichtigung("alles_verschickt", "");
}
} # ende $send_newsletter
else
{
benachrichtigung("nicht_alles_verschickt", "");
$meldung = "versenden_fehler";
}
ich hoffe jemand hat ne idee...dass ist bestimmt was mit den Variablen die kontrollieren ob alles versendet wurde...
Viele Grüsse, Flo
Kommentar