我有一个数据库选项卡:
ID email
我从数据库中调用这些数据,并将其发布在html table
:上
<?php
$sql = $link->query("SELECT ...");
while($data = $sql->fetch_object){
?>
<table>
<tr>
<td>
<?=$data->ID?>
</td>
<td>
<?=$data->email?>
</td>
<td>
<input type="checkbox" id="mail_<?=$data->ID?>">
</td>
</tr>
</table>
<?php
}
?>
<input type="button" id="send_mail_button">
最后一列有一个复选框。如果选中此复选框,当我单击send_mail_button
时,我希望在选中复选框的每封电子邮件中都向发送一封邮件:对我来说,如果用AJAX
调用或用form post
调用都是一样的。
我可以用做到这一点
$subject = 'something';
$body = 'hello world!';
foreach($to as $t){
mail($t, $subject, $body);
}
但我无法创建一个包含所有email
地址的数组($to
),然后用我发送邮件的foreach
循环检索每封电子邮件。
我该怎么做?
我可能离这个答案还有一段路要走(我已经很久没有使用复选框了),但我很确定你需要在复选框条目中使用name='zzzz'
(而不是id),其次,你需要为它输入一个值。
类似这样的东西:
<input type="checkbox" id="something" name="ids[]" value="<?php=$data->email?>">
然后在php代码中,您可以执行以下操作:
foreach ($_POST['ids'] as $thisID)
{
// you now do what you need to do using the ID
}
这是因为复选框实际上是一个数组,您可以使用foreach语句逐个遍历每个复选框。
你的意思是这样的:
<input type="checkbox" name="emails[]" value="mail_<?=$data->ID?>">
foreach($_POST['emails'] as $email)
{
$getid = explode('_', $email);
$email_id = $getid[1];
// dsth
}
为什么不使用
<input type="checkbox" name="mail[]" value="<?=$data->email?>">
然后在你的前臂上做这个:
foreach($_POST['to'] as $t){
mail($t, $subject, $body);
}
顺便说一句,当在公共环境中使用时,这是一种糟糕的做法,因为它不进行任何检查,并且允许用户在脚本中插入电子邮件地址。
另一种解决方案是:
<input type="checkbox" name="mail[]" id="<?=$data->ID?>">
然后,在提交后运行另一个查询以检索所有相关的电子邮件地址:
$query = "SELECT * FROM emails WHERE ID IN (".mysql_real_escape_string(implode(",",$_POST['mail'])).")";