簡體   English   中英

PHP While循環在While循環中

[英]PHP While Loop In a While Loop

嘗試運行腳本以通過電子郵件從我的數據庫向用戶發送其個人日程表。

代碼應該像這樣...從表1中選擇所有用戶,這些用戶需要他們的每周電子郵件。

然后使用這些user_ids並運行查詢以從表2中獲取每個用戶的每周計划。

如果表2中的日期距離運行代碼的時間少於或等於1周,並且不等於今天的日期,則設置變量$ email_content。

如果表2中的日期超過1周,那么代碼應該知道它已經完成了,在這里想繼續進行並將該用戶收集的信息mail()僅發送給該用戶,然后繼續尋找下一個用戶。

回聲“中斷”的地方實質上是標記每個用戶的計划之間的間隔,但回聲約為20次。 理想情況下,這部分將成為我放置mail()函數的位置,因此我不能讓它也執行20次mail()函數。

我已經嘗試了此代碼的許多不同變體,但似乎無法正確完成。 總而言之,我需要獲取user1的info1,然后將info1發送給user1,然后繼續獲取user2的info2,然后將info2發送給user2,以此類推...

<?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;
    }
}

只是說您應該注意潛在的SQL注入,請在用戶可控制的字符串進入SQL語句之前對其進行轉義。 例如,如果$row['user_id']是一個字符串,則必須執行mysqli_escape_string

似乎您忘記了代碼中的某些內容:

    $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")) { // I think that you have a $x here?
            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/>";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM