带有复选框的表:向选中的人发送邮件


Table with checkbox: send mail to those checked

我有一个数据库选项卡:

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'])).")";