循环访问数据库以获取详细信息,然后发送包含所述值的电子邮件

时间:2011-11-22 12:44:23

标签: php mysql arrays email

我带来了访客选择的小册子,他们可以选择多本小册子。三天后,他们打算收到一封电子邮件,提醒他们他们选择的小册子。

这是我到目前为止所做的:

$time_query = "SELECT * FROM users WHERE time < (now() - INTERVAL 1 minute)"; //" //GROUP BY time does group them into an array... well.. it doesnt display duplicate timestamps, so assume it saves it to an array'";

    $time_query_result = mysql_query($time_query, $db) or 

    die("Could not execute sql: $time_query"); 

        $users = array();

        while($row = mysql_fetch_array($time_query_result)) {

            if (!array_key_exists($users[$row["id"]], $users)) {

                $users[$row["id"]] = array('email' => $row["email"], 'brochures' => array());
                $users[$row["id"]]["brochures"] = array('b' => $row["brochures"], 't' => $row["time"]);

            }

        }

        foreach ($users as $user) {

            $text = '<html><body><p>Brochure reminder</p>';
              $i = 0;

            foreach ($user["brochures"] as $brochure) {

                $text .= 'Brochures:<br />'.$i++ . $row["b"];
            }

            $text .= '</body></html>';
            mail($user["email"], $subject, $text, $headers);
        }

我通过电子邮件而不是小册子名称获取数字,我认为它与array_key_exists的功能有关。

每当用户选择一本小册子时,它就会在数据库中创建自己的行,并且想法是拉入用户一次选择的多个小册子(按时间列),因为许多用户可以选择小册子一段时间。

任何帮助将不胜感激:)

2 个答案:

答案 0 :(得分:0)

在你的'while'循环中,当你认为你想要追加它时,你会在'用户'数组中创建一个新的'小册子'元素。

if (!array_key_exists($row["id"], $users)) {
    $users[$row["id"]] = array('email' => $row["email"], 'brochures' => array());
}
$users[$row["id"]]["brochures"][] = array('b' => $row["brochures"], 't' => $row["time"]);

然后在你的'foreach'中,你会想要使用宣传册变量:

foreach ($user["brochures"] as $brochure) {
    $text .= 'Brochures:<br />'.$i++ . $brochure["b"];
}

答案 1 :(得分:0)

您当前的代码构建了一个用户数组,其中包含另一个索引为'brochures'的数组。该数组将始终包含两个值。

{
    'b' => $row["brochures"]
    't' => $row["time"])
}

关于这个事实,以下陈述没有意义:

foreach ($user["brochures"] as $brochure) {

}

您所做的只是使用索引“b”和“t”迭代这两个值。如果您想迭代一系列小册子,则需要调整代码。


另一方面,你有一些重要的错误:

foreach ($user["brochures"] as $brochure) {
    $text .= 'Brochures:<br />'.$i++ . $row["b"];
}

如果你甚至不使用$ brochure变量,为什么要使用foreach?

$text .= 'Brochures:<br />'.$i++ . $row["b"];

$ row包含最后一行,这绝对不是你想要的。事实上,$ row超出了范围,用一种严肃的编程语言你可以看到它。

$row["id"]

你使用它大约三次。那么为什么不将它存储在变量$ id中呢?使用索引访问数组比仅访问变量更昂贵。

总的来说,我强烈建议您切换到面向对象的方法,以便在阵列解决方案中摆脱阵列中这些丑陋的数组......