Webdesign in Siegen

Reminder

Fragen zum Thema PHP können hier gestellt werden

Moderator: Basti

Reminder

Beitragvon veNom am 18.07.2007, 13:05

Hi,

Nun denn mein Script geht in die Endphase, was mir aufgefallen ist was ich noch machen sollte ist ein Reminder.

Ich mache ja eine Online Bibliothek, wenn sich hier nun der User ein Buch ausleiht wird das sofort eingetragen und ein Admin bestätigt das nur noch.

So jetzt möchte ich aber noch einen Reminder für den User hinzufügen.
Dazu werde ich erstens noch ein Feld bei meiner SQL-Tabelle hinzufügen und zwar neben dem "orderdate" noch ein "answerdate" (oder ähnliches).
Dieses Answerdate wird eingetragen sobald der Admin die Bestellung bestätigt.
Nun kommt es zum eigentlichen Problem, der User kann zwischen 1 und 3 Wochen wählen, wie lange das Produkt er behalten möchte. Das wird einfach eingetragen als 1week, 2weeks und 3weeks.

Jetzt brauche ich ein Script das mir automatisch auswertet, dieses Buch wurde an diesen Tag bestätigt, der User wollte es für 1Woche ausleihen, nun sind es noch 2 Tage bis zum Endtermin, an diesen Tag (2 Tage zuvor) soll der User eine autmatische Mail bekommen das er in spätestens 2 tagen das Buch zurück gebracht haben muss.

Ich finde im Internt dazu keinerlei Anhaltspunkte wie sowas aussehen könnte.

Das einzige Problem, so glaube ich, ist die Abfrage für das Datum
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1660
Registriert: 29.12.2005, 23:31
Wohnort: Wien

Beitragvon Manuel am 18.07.2007, 13:11

Hi Markus!

Zum einen würde ich niemals etwas wie "1week" in eine Datenbank schreiben. Dann definiere dir lieber einen festen Typ, beispielsweise Tage und trage eine 7 ein. Damit kannst du dann wenigstens noch rechnen und es verbraucht weniger Platz in der Datenbank.

Was dir vielleicht helfen könnte wäre ein Cronjob. Das ist nichts anderes als ein Serverdienst, der jeden Tag oder jede Woche um eine oder mehrere bestimmte Uhrzeiten ein Script ausführt. So würde ich dann an deiner Stelle einfach dieses Script nachts laufen lassen, dass dann automatisch alle Datumsfelder prüft und an die bestimmten Personen eine Mail verschickt.

Lg,
Manuel ;-]
Benutzeravatar
Manuel
Site Admin
 
Beiträge: 9114
Registriert: 10.12.2004, 19:29
Wohnort: Asbach

Beitragvon Basti am 18.07.2007, 13:14

Dafür solltest du am besten mit dem PHP Timestamp (in Sekunden) arbeiten.

Ich würde außerdem nicht '1weeks', ... in der Datenbank speichern, sondern einen Wert in Sekunden, damit du damit direkt arbeiten kannst.

Wenn du dann den Ausleihbeginn in Sekunden und die Ausleihdauer hast, kannst du ganz einfach eine Differenz bilden.
Dazu ziehst du vom aktuellen Timestamp ("time()") den Ausleihbeginn ab.
Anschließend ziehst du diesen Wert von der Ausleihdauer ab, sodass du die verbleibende Zeit erhälst.

Wenn der Wert, denn du dann erhälst, kleiner als 172800 (= 2 Tage) ist, verschickst du die Email.
Falls du keine Cronjobs dazu verwendest, solltest du diese Abfrage und den Mailversand unbedingt in eine Seite einbauen, die auf jeden Fall täglich aufgerufen wird, weil sonst die Email nicht unbedingt verschickt wird.

Sollte eigentlich nicht so schwierig sein, bei Fragen kannst du dich ja einfach nochmal melden ;)
Zuletzt geändert von Basti am 18.07.2007, 13:16, insgesamt 1-mal geändert.
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach

Beitragvon Tach44 am 18.07.2007, 13:14

also ich würde das gar nicht als 1week, 2weeks und so weiter eintagen sondern als Zeit in Sekunden bzw. Tage, weil sich mit 1week und so nicht richtig rechnen lässt.
dan baruchst du aber auch noch eine Spalte wo eigetragen werden muss wann das ausgeleiehn wurde.
Das viel größere Problem in meinen augen ist, dass das Script, was ihm die Mail schickt ja von irgendwem ausgeführt werden muss... Du kannst natürlich als Admin jeden Tag on sein und das SCript auslösen allerdings ist das auch nicht die feine englische art...

och mann jez war ich ma wida zu lahm ;)
Bild
Benutzeravatar
Tach44
Mitglied
 
Beiträge: 49
Registriert: 17.07.2007, 18:33
Wohnort: OVP - Ort vor Polen

Beitragvon veNom am 18.07.2007, 13:26

Danke für die Tipps, hilft mir schon mal bei der reinen Logik weiter wie der Aufbau ca. sein muss, und wie ihr ja ist is ein PHP Skript eigentlich nichts weiter als ein logischer Aufbau von Abfragen *gg*

Werd wohl das mit den Sekunden versuchen, das klingt für mich einfacher als Tage, das selbst ausführen is nicht drinnen, ich Programmiere das nur für irgendwelche für Toyota China, also wird das im Endeffekt ein Cronjob werden.

Danke schonmal für die Hilfe, falls Probleme auftreten hört ihr was von mir hier ;)
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1660
Registriert: 29.12.2005, 23:31
Wohnort: Wien

Beitragvon veNom am 18.07.2007, 14:33

Ich hab das Answerdate als Datum drinnen in diesen Format: 2007-07-18.

Hab nun schon gesucht und gesucht, aber kein Ergebnis, ich möchte diese, wie ihr gesagt habt, in Sekunden umwandeln, in die SQL möchte ich keine Sekunden eintragen weil ich das Datum auch normal ausgeben möchten kann.

Wie muss ich es auswerten damit ich sekunden haben, hab auch eine funktion zum formatieren gefunden aber das funktioniert irgendwie auch nicht.
Code: Alles auswählen
$secs = date('Y-m-d', $answerdate);

eigentlich sollte dies nur die Formatierung des Datums ändern, aber ich bekomme als Datum dann ausgegebn "1969-12-31".

Das finde ich ziemlich Strange...

Was kann ich da machen?

edit:
Hab jetzt was gefunden und das ganze sieht so aus, das mit dem datum rechnen funktioniert, nur eben nicht auf sekunden basis, ist aber auch ok :)

Code: Alles auswählen
   $borrowtime = $row['duration'];
   $date = $row['answdate'];
   $today = date('Y-m-d');
   
   $year = substr($date, 0,4);
   $month = substr($date, 5, 2);
   $day = substr($date, 8, 2);
   
   $new_date = date("Y-m-d", mktime(0, 0, 0, $month, $day +$borrowtime-2, $year));


jetzt muss ich eigentlich nur noch eine Abfrage machen wenn "new_date == today" und dann die mail :)
All you get is all you need
Benutzeravatar
veNom
Mitglied
 
Beiträge: 1660
Registriert: 29.12.2005, 23:31
Wohnort: Wien

Beitragvon Basti am 18.07.2007, 18:37

Hi, ich würde an deiner Stelle alles direkt in Sekunden abspeichern, auch in der MySQL Datenbank.

Ich habe anfangs auch immer das MySQL Datum genommen und abgespeichert, aber das ist total umständlich zum umformatieren und vorallem zum rechnen.

Deshalb solltest du wie gesagt den PHP Timestamp nehmen. Am besten speicherst du den dann in einem VARCHAR(16) Feld o.ä. ab, und das reicht auch vollkommen.
Dann kannst du direkt damit rechnen und genau damit kannst du auch die date()-Funktion benutzen.
So hast du dann ganz schnell auch eine normale Datumsausgabe, z.B. so:

Code: Alles auswählen
date("d-m-Y",$timestamp);


Ich habe anfangs auch gezögert, darauf umzusteigen und diese umständlichen substr()-Sachen gehabt, aber sobald man mit komplizierteren Scripten arbeitet und viel rechnen muss ist es einfach viel besser, wenn man direkt den PHP Timestamp hat ;)
Benutzeravatar
Basti
Moderator
 
Beiträge: 1974
Registriert: 15.06.2006, 17:33
Wohnort: Rheinbreitbach


Zurück zu PHP

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast