Php 循环通过数据库获取详细信息,然后发送包含所述值的电子邮件
我带来了由访客选择的小册子,他们可以选择多个小册子。三天后,他们将收到一封电子邮件,提醒他们选择的小册子 以下是我到目前为止的情况:Php 循环通过数据库获取详细信息,然后发送包含所述值的电子邮件,php,mysql,arrays,email,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
$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);
}
我通过电子邮件而不是宣传册上的名字来获取数字,我认为这与数组键的存在有关
每次用户选择一个小册子时,它都会在数据库中创建自己的行,其想法是通过时间列拉入用户一次选择的多个小册子,因为许多用户可以在一个时间段内选择小册子
任何帮助都将不胜感激:在您的“while”循环中,您正在“users”数组中创建一个新的“brockhures”元素,而我认为您需要附加到它
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"];
}
您当前的代码构建了一个用户数组,其中包含另一个索引为“宣传册”的数组。此数组将始终包含两个值
{
'b' => $row["brochures"]
't' => $row["time"])
}
关于这一事实,以下陈述毫无意义:
foreach ($user["brochures"] as $brochure) {
}
您所要做的就是使用索引“b”和“t”迭代这两个值。如果您想迭代一系列小册子,您需要调整代码
另一方面,你有几个重要的错误:
foreach ($user["brochures"] as $brochure) {
$text .= 'Brochures:<br />'.$i++ . $row["b"];
}
你用这个大约三次。那么为什么不将其存储在变量$id中呢?使用索引访问数组比简单地访问变量成本更高
总的来说,我强烈建议您切换到面向对象的方法,这样您就可以摆脱这些丑陋的数组中的数组中的数组解决方案…这已经改变了一些东西-现在电子邮件会为每封电子邮件返回不同的数字,但我仍然会为每本手册收到一封电子邮件,与一封包含所有选定手册的电子邮件不同:Thank Though我刚刚注意到,在您的while循环中,您每次都为手册创建一个新数组,而不是附加到该数组中。我还注意到,如果手册数组不存在,您只会添加到手册数组中。刚刚从“如果”中删除了那部分代码。是的,这已经奏效了!非常感谢。好它现在正确地显示所选手册的名称等。。。从数组中。现在唯一的问题是,它没有在一封电子邮件中收集所有的宣传册并发送一次。。。它会为每个选定的小册子发送一封电子邮件。。有什么想法吗?哦,那是因为你在使用array\u key\u存在于数组中的元素而不是key,我会编辑我的答案。
$text .= 'Brochures:<br />'.$i++ . $row["b"];
$row["id"]