Hallo, in meiner Tabelle gibt es eine Spalte im Date Format welche den Abgabetermin eines Angebotes enthält. Hierbei handelt es sich um das Datum wann das Angebot beim Kunden sein MUSS. Also muss vorher eine automatisch Erinnerung an den Kalkulator raus. Vorab rufe ich den Wert ( abgabetermin ) aus der DB ab, dann verändere ich in PHp das Datum zu einem Erinnerungsdatum. Dieses Datum soll dann in der Tabelle unter erinnerung eingetragen werden. Von diesem Datum soll dann PHP später vergleichen und eventuell eine Mail verschicken. Mit meinem Code wird das Datum zwar aktualisiert aber nicht jede Zeile individuell sondern alle Zeilen enthalten das selbige Datum obwohl ein anderer Abgabetermin hinterlegt ist. Ich bin noch nicht so ganz sicher mit php und sql und könnte hier etwas Hilfe gebrauchen. PHP-Code:
|
Ankündigung
Einklappen
Keine Ankündigung bisher.
Einzelne Zeilen automatisch aktualisieren
Einklappen
Neue Werbung 2019
Einklappen
X
-
Einzelne Zeilen automatisch aktualisieren
Stichworte: -
-
UPDATE kann auch selbst rechnen. UPDATE feld SET feld = feld+5 WHERE ... (Filter wenn nötig). Und DATE_ADD() kann auch Tage zu Datum addieren.
Welche Funktion hat das "Erinnerungsdatum"? Du kannst auch tgl. einen Job laufen lassen, der alle Abgabetermine prüft und wenn < 5 Tage dann zB eine Erinnerung verschicken. Dann brauchst du das Erinnerungsdatum gar nicht.
The string "()()" is not palindrom but the String "())(" is.
Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
PHP.de Wissenssammlung | Kein Support per PN
-
Ah okay . Wusste ich so auch noch nicht !
Das Erinnerungsdatum sollte mir eigentlich dazu dienen an dem Tag eine Mail zu verschicken. Quasi ab diesem Tag sind noch 5 Tage bis zur Abgabe.
Wie würde das wie du vorgeschlagen hast denn aussehen ?
Also was ich eigentlich will ist eine automatische Erinnerung.
Sprich: Es gibt einen Abgabetermin und ab 5 Tagen davor soll der Kalkulator benachrichtigt werden das er an den Abgabetermin erinnert wird.
Wie du geschrieben hast, wäre es natürlich ein Traum wenn das Script täglich also z.B. um 01:00 Uhr ausgeführt wird.
Der Abgabetermin steht in jedem Datensatz ( also jeder Zeile ) und ist halt logischer Weise immer ein anderes.
Kommentar
-
Dann reicht der Abgabetermin in der DB und ein Script das per Cronjob tgl. (zB wie du schreibst um 01:00 Uhr) läuft. Das Script prüft immer ob es noch 5 Tage sind bis zum Termin und wenn ja was auch immer machen .. z.B. Mail verschicken. Eigentlich ganz einfach.The string "()()" is not palindrom but the String "())(" is.
Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
PHP.de Wissenssammlung | Kein Support per PN
Kommentar
-
Okay.... du schreibst eigentlich ganz einfach. Für mich aber ein großer Berg
Ich habe jetzt mal die Abfrage so gemacht:
PHP-Code:<?php
//Datum von Heute wird ermittelt
$heute = date("Y-m-d");
//Holt den eingetragenen Abgabetermin aus der Datenbank
$pdo = new PDO('mysql:host=localhost;dbname=nubis', 'root', '');
$sql = "SELECT bearbeiter,DATE_SUB(abgabetermin, INTERVAL 5 DAY) AS SubstractDate FROM angebote WHERE status = 0";
foreach ($pdo->query($sql) as $row) {
var_dump($row);
}
?>
Code:array(4) { ["bearbeiter"]=> string(8) "Matthias" [0]=> string(8) "Matthias" ["SubstractDate"]=> string(10) "2017-01-15" [1]=> string(10) "2017-01-15" } array(4) { ["bearbeiter"]=> string(14) "Matthias Brand"
Das Array enthält nun den Kalkulator und das neu errechnete Erinnerungs"Start"Datum.
Per if könnte ich jetzt ja prüfen und sachen veranstalten.
Was mir nicht in die Birne will ist wie ich das jetzt für jeden Datensatz automatisiere !
Kannst du mich mal auf die richtige Spur bringen ?
Wenn ich es so mache hätte ich dann eine Erinnerung an dem Erinnerungsdatum richtig ? Ginge das auch täglich bis zur Deadline ?
Kommentar
-
Naja.. ist es auch. Du brauchst nur per SELECT abfragen welche Termine "reif" für die Info sind, d.h. wo es noch 5 Tage bis zum Termin sind. Da das Script ja täglich läuft bekommst du dann jeden Tag genau die wo es noch 5 Tage sind.
Ginge das auch täglich bis zur Deadline ?The string "()()" is not palindrom but the String "())(" is.
Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
PHP.de Wissenssammlung | Kein Support per PN
Kommentar
-
Leider geht das sqlfiddle nicht, aber so in der Art. Was du da rausbekkommst sind dann die Termine, zu denen du Erinnerung schickst.
Code:SELECT termin_name, ... , DATEDIFF(CURDATE(), abgabetermin) AS resttage FROM termine WHERE resttage > 5
The string "()()" is not palindrom but the String "())(" is.
Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
PHP.de Wissenssammlung | Kein Support per PN
Kommentar
-
ich habe das mal so angepasst um zu sehen was passiert.
PHP-Code:$sql = "SELECT bearbeiter,bauvorhaben,DATEDIFF(CURDATE(), abgabetermin) AS resttage FROM angebote WHERE resttage > 5";
Hier die Meldung das es die Spalte resttage in der WHERE Abfrage nicht gibt:
#1054 - Unknown column 'resttage' in 'where clause'
Kommentar
-
Wenn ich es so in Phpmyadmin ausführe bekomme ich folgenden Fehler:
Befehl:
PHP-Code:SELECT `bearbeiter`, `bauvorhaben`, DATEDIFF(`abgabetermin`, CURDATE() ) AS `Resttage`FROM `angebote`WHERE ABS(DATEDIFF(`abgabetermin`, CURDATE() ) <= '5' LIMIT 0, 25
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'LIMIT 0, 25' at line 1
Kommentar
-
Zähl mal die Klammern... Und du darfst deine Query auch gerne lesbar formatieren.
Und eigentlich hat das ABS() keinen Sinn, weil -3 wäre ja auch <= 5. Das kannst du dir meines Erachtens sparen.
Code:SELECT `bearbeiter`, `bauvorhaben`, DATEDIFF(`abgabetermin`, CURDATE() ) AS `Resttage` FROM `angebote` WHERE ABS(DATEDIFF(`abgabetermin`, CURDATE())) <= 5 LIMIT 25
The string "()()" is not palindrom but the String "())(" is.
Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
PHP.de Wissenssammlung | Kein Support per PN
Kommentar
-
ja prima, zehn mal gelesen und nicht gesehen ! ABER es gibt ja super nette Hilfe hier.
Geklappt hat das ganze auch noch
PHP-Code:$sql = "SELECT bearbeiter,bauvorhaben FROM angebote WHERE ABS(DATEDIFF(`abgabetermin`, CURDATE() )) <= '5' AND status = 0 ";
foreach ($pdo->query($sql) as $row) {
var_dump($row);
}
Jetzt hänge ich mit der Weiterverarbeitung etwas fest.
Das Array kann ja auch durchaus mehrere Fälle enthalten.
Wie würdet ihr den das array jetzt durchgehen um jedem Bearbeiter eine Erinnerungsmail über sein Bauvorhaben zukommen zu lassen.
Die Fälle sind mit der Abfrage ja jetzt erkannt. Nun muss doch je Fall ( Zeile ) das Bauvorhaben in die Mail und der Bearbeiter ist dann logischerweise der Empfänger der Mail.
Ich bin noch sehr unsicher darin, wie ich jetzt einzelne Zeilen mit individuellen Daten bearbeiten kann.
Kommentar
-
Du hast deine Schleife. Jeder Durchlauf betrifft immer genau eine Zeile (einen Datensatz) des Ergebnisses. D.h. in der Schleife machst du dann den Versand des Mailes. Sei dir halt dann bewußt das jeder Scriptaufruf Mails erzeugt.. nur als Info. Wenn du das nicht willst, brauchst zB noch eine Spalte in der DB mit zB "letzte_erinnerung" und dann darf das Mail bei Scripaufruf nur verschickt werden wenn das letzte zB gesten war. Oder wie auch immer du das willst.
Leg dir Testdatensätze an und spiel damit rum und teste alle möglichen Szenarien.The string "()()" is not palindrom but the String "())(" is.
Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
PHP.de Wissenssammlung | Kein Support per PN
Kommentar
Kommentar