Checken ob Mail versendet und in DB schreiben.

Kimymoon86

Mitglied
Hallo PHPler.

Ich habe eine Mail, die mittels Cronjob versendet werden soll. Der Cronjob wird täglich ausgeführt.
Wenn ich jetzt den Cronjob starte, dann verschickt er mir eine Mail. So soll es sein.
Aber der Cronjob verschickt am nächsten Tag die gleiche Mail nocheinmal. diese Mail soll aber nur einmal in der Woche verschickt werden.
Mein Gedankengang wäre es, ein Skript zu schreiben, indem geprüft wird, ob die Mail schon verschickt wurde, wenn "Ja" dann soll er sie nicht verschicken. Falls sie noch nicht verschickt wurde, dann soll er dies machen.
Ich hab mir überlegt, dass ich die Werte (verschickt, nicht verschickt) in die DB von MySql schreiben könnte. Und dann eine Abfrage starte, ob es eben schon verschickt wurde.
In der DB gibt es bereits eine Tabelle in der die Werte des Termin (start und endzeit, sowie die ID) stehen. Dort würd ich sie gerne reinschreiben. Und prüfen.
Ich bräuchte hier aber etwas hilfe bei der Umsetzung.

Könnte ich das so realisieren, oder habt ihr vielleicht andere Vorschläge für mich?
 
Generell sollte das schon machbar sein. Allerdings drängt sich mir die Frage auf, wenn du ohnehin schon CRON verwendest: cron kann auch so konfiguriert werden, dass der Job nur einmal die Woche ausgeführt wird. Gibt es denn einen Grund, dass du es täglich laufen lassen willst?
 
es könnte doch sein, dass sich Termine veränder. Hinzukommen oder verschwinden. Dann wäre es doch nicht schlecht den täglich auszuführen oder?
 
Ok, dein Anwendungsfall erfordert also tägliche Ausführung. Dann gäbe es die Möglichkeit, über eine INT-Spalte in der Datenbank die Kalender-Woche zu speichern, in der die letzte Mail raus gegangen ist. Wenn die aktuelle Kalenderwoche nicht mit dem Wert in der Datenbank übereinstimmt, schickst du die Mail raus und aktualisierst den Wert in der DB.

Du kannst entweder die PHP-Funktion strftime mit dem Formatter %U oder die MySQL-Funktion WEEK() verwenden.

Edit: Wenn du strftime verwenden willst, und nicht Sonntag der erste Tag der Woche sein soll, kannst du den Formatter %V verwenden. Steht aber alles in der Doku ;-)
 
Zuletzt bearbeitet:
Ich hab da noch mal drüber nach gedacht. Die Kalenderwoche könnte bei Jahreswechsel unzureichend sein. Vor allem, wenn der 1.Januar auf einen Tag mitten in der Woche fällt. Dann wäre es möglich, dass die Mail doch direkt hintereinander an zwei Tagen kommt. Aber das ist wohl der Weg, der zum Ziel führt ;-) Den Rest der Denksport-Aufgabe überlasse ich dir :)
 
hab mal eine Zwischenfrage

Wenn ich meine Mail verschicke bekomm ich immer eine Meldung. "Notice: Undefined variable: sname in..."
Das hier stammt aus finder.php
PHP:
$name = "SELECT ..... "

$ergebnis = mysql_query($name) or die(mysql_error()); 

while ($name = mysql_fetch_array($ergebnis)) {
	   $sname = $name['Name'];}
Das hier stimmt so wie es ist. Also gibt das Richtige aus.
So hab ich das in eine Mail verpackt.
Das hier ist aus mail.php
PHP:
 require_once('...'); 
...
...
$nachricht = "Hallo!

Name = $sname

Viel Spass!";
mail(...);
Mir ist klar, dass mir hiermit gesagt wird, das der Wert $sname leer ist. Stimmt auch für den ausgewählten Zeitraum. Aber wie schaff ich es, dass diese Meldung verschwindet? Ich hab versucht die variablen neu zu deklarieren $name=$sname, ich habs auch mit isset() probiert, bekomm es aber nicht hin. Bitte also um Hilfe.
 
Zuletzt bearbeitet:
Hallo,
Vielleicht solltest du mal
Echo MySQL_error();
In die while Schleife schreiben... Und den kompletten code hier Posten aus deinem lässt sich nicht viel erschließen ...
Mfg
 

Neue Beiträge

Zurück