Versuch, ein Skript auszuführen, um Benutzern ihre individuellen Zeitpläne aus meiner Datenbank zu senden.PHP While-Schleife in einer While-Schleife
Der Code sollte so gehen ... Wählen Sie alle Benutzer aus Tabelle 1, in denen Benutzer ihre wöchentlichen E-Mails wünschen.
Dann diese benutzerkennungen nehmen und eine Abfrage ausführen, die Wochenpläne für jeden Benutzer aus Tabelle 2
zu erhalten, wenn das Datum in der Tabelle 2 ist kleiner als oder gleich 1 Woche ab, wenn der Code ran, und es entspricht nicht dem heutigen Datum, dann setze die Variable $ email_content.
Wenn das Datum in der Tabelle 2 1 Woche überschreitet, dann sollte der Code wissen, dass es getan ist, und hier möchte ich die Informationen für diesen Benutzer mailen() und senden nur diese Informationen, um Nur dieser Benutzer, dann weiter zum nächsten Benutzer.
Wo es Echo "Pause" bedeutet, markiert es im Wesentlichen die Trennung zwischen den einzelnen Benutzer Zeitplan, aber es hallt etwa 20 Mal. Dieser Teil wird idealerweise zu dem, wo ich die mail() -Funktion ablege, damit ich die mail() -Funktion auch 20 mal ausführen kann.
Ich habe eine Tonne verschiedener Varianten dieses Codes ausprobiert, aber ich kann es nicht richtig finden. Zusammenfassend muss ich info1 für user1 bekommen, dann info1 zu user1 Mail, dann bewegen info2 für user2 zu bekommen, dann info2 Mail an Benutzer2, etc ...
<?php
// GET USERS WHO WANT THEIR WEEKLY SCHEDULE EMAILED TO THEM (Table 1)
$sql = "SELECT * FROM XXXXXXX WHERE weekly_email = 'Yes'";
$result = mysqli_query($connection, $sql);
while ($row = mysqli_fetch_array($result)) {
$id .= "'" . $row['user_id'] . "', ";
}
$id = trim($id, ', ');
// GET THOSE USERS' SCHEDULES (Table 2)
$sql_email = "SELECT * FROM XXXXXXXX WHERE user_id IN ($id) ORDER BY user_id, date, start_time ASC";
$result_email = mysqli_query($connection, $sql_email);
while ($row_email = mysqli_fetch_array($result_email)) {
$truck_name_email = $row_email['truck_name'];
$location_name_email = $row_email['location_name'];
$date_email = $row_email['date'];
$address_email = $row_email['address'];
$x = strtotime("7 days");
$start_email = $row_email['start_time'];
$end_email = $row_email['end_time'];
if ($date_email <= date("m/d/Y l", $x)) {
if ($date_email !== date("m/d/Y l")) {
if (!empty($address_email)) {
$address_email2 = explode(",", $row_email['address'], 2);
$email_content = $date_email . substr($date_email, 11) . " - "
. $location_name_email . ", " . $address_email2[0] . ", "
. $start_email . "-" . $end_email . "<br/>";
echo $email_content;
} elseif (empty($address_email)) {
$email_content .= $date_email . " - " . $location_name_email
. ", " . $start_email . "-" . $end_email . "<br/>";
echo $email_content;
}
}
}
if ($date_email >= date("m/d/Y l", $x)) {
echo "break";
// break;
}
}
Keine Notwendigkeit für zwei Abfragen. Verwenden Sie einfach eine Unterabfrage. Wo du 'IN ($ id)' sagst anstatt 'IN (SELECT user_id VON XXXXXX WHERE weekly_email = 'Yes)' – siride
Du vergleichst zwei Strings in deinen if-Blöcken, wenn du stattdessen Zeitstempel vergleichen willst. Ist zum Beispiel "Donnerstag"> "Sonntag"? – Drakes
Vielen Dank @siride, ich habe die erste Abfrage in meinem Code los und aktualisiert die 2. mit Ihrer Empfehlung. – Shane