首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >While循环中的PHP While循环

While循环中的PHP While循环
EN

Stack Overflow用户
提问于 2016-07-24 22:52:42
回答 1查看 112关注 0票数 0

试图运行一个脚本,从我的数据库中通过电子邮件发送给用户他们的个人时间表。

代码应该类似于this...select表1中的所有用户,其中用户希望每周发送电子邮件。

然后获取这些user_ids并运行查询,以获得表2中每个用户的每周计划。

如果表2中的日期小于或等于代码运行时的1周,并且它不等于今天的日期,则设置变量$email_content。

如果表2中的日期超过1周,那么代码应该知道它已经完成,并且这里想要继续发送()为该用户收集的信息,并仅将该信息发送给该用户,然后继续发送给下一个用户。

在回显“中断”的地方,它本质上是在标记每个用户的日程安排之间的分隔,但它回显了大约20次。理想情况下,这部分将成为我放置mail()函数的位置,因此我不能让它执行mail()函数20次。

我已经尝试了大量不同的代码变体,但似乎都不能正确理解。总而言之,我需要获取user1的info1,然后将info1发送到user1,然后继续获取user2的info2,然后将info2发送到user2,依此类推……

代码语言:javascript
复制
<?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;
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-07-25 01:26:46

我只是说,你应该注意潜在的SQL注入,在任何用户可控制的字符串进入SQL语句之前对它们进行转义。例如,如果$row['user_id']是一个字符串,则必须执行mysqli_escape_string

看起来你在代码中遗漏了一些东西:

代码语言:javascript
复制
    $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/>";
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38553347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档