【问题标题】:php foreach checkbox checked add to $emailtophp foreach 复选框选中添加到 $emailto
【发布时间】:2013-11-04 21:41:03
【问题描述】:

我的表单需要有多个电子邮件地址。我有一个带有复选框的表单。选中的每个复选框都应添加到电子邮件的收件人列表中。数据正确传递,我知道这一点,因为如果我在新页面上回显它,它将正确显示每个值。我正在使用$_POST

要附加的变量称为$email_to
它被发送到:@mail($email_to, $email_subject, $email_message, $headers);

使用静态 $email_to 值,表单可以正常运行并通过电子邮件发送数据。

到目前为止,我已经尝试过
foreach($_POST['rep'] as $rep_num) { $emailto = $rep_num;}
foreach($_POST['rep'] as $rep_num[]) { $emailto = $rep_num[];}

我认为 foreach 缺少一些东西,但我不知道是什么。它可以很好地回显它,但不能将其存储在变量中。谁能指出我需要的方向?

HTML

<div class="clearfix email_boxes">
        <input type="checkbox" name="rep[]" value="02@address.com,">Lorem Ipsum 01
        <input type="checkbox" name="rep[]" value="02@address.com,">Lorem Ipsum 02
        <input type="checkbox" name="rep[]" value="03@address.com,">Lorem Ipsum 03
</div>

【问题讨论】:

  • 可能是您输入值中的逗号。尝试删除它们。
  • 您是否只收到 $rep_num 中的最后一封电子邮件?
  • @Fred-ii- 需要逗号来分隔地址。即使有一个以逗号结尾的静态地址,例如abcd123.site.com,,表单也会发送。
  • @AdilMahmudChoudhury 没有一个收件人收到表格,foreach 工作不正常。我认为它需要别的东西。
  • @GhostEcho 是的,我知道这一点,但邮件/PHP 不这么看。一旦foreach 启动并将其分配给to: 字段,它们将被分开。从理论上讲,这就是“应该”发生的事情。最后一个用逗号,肯定会报错。

标签: php email post foreach


【解决方案1】:

您需要使用array_push 或简写方括号[] 将项目添加到数组中。

例如

$emails = array();
foreach($_POST['rep'] as $email) {
   // Each $email is added as the next array entry, using [] 
   $emails[] = $email; 
}

// Convert the array to a comma separated string
$recipients = implode(',', $emails);

mail($recipients, $subject, $message);

【讨论】:

  • 就是这样!我知道它缺少了一些东西。谢谢。
【解决方案2】:

对已有的内容稍作修改:

欢迎您使用它。 (预测试)

<?php

if(isset($_POST['submit'])){

$email = "yourEmail@example.com";
$email_subject = "Subject here";
$email_message = "The message";

$headers = "From: $email" . "\r\n" .
"Reply-To: $email" . "\r\n" .
"X-Mailer: PHP/" . phpversion();

foreach($_POST['rep'] as $to) {
mail($to, $email_subject, $email_message, $headers);
}

} // ending brace for if(isset($_POST['submit']))

?>

<form method="post" action="">

<div class="clearfix email_boxes">
<input type="checkbox" name="rep[]" value="email_1@example.com">Lorem Ipsum 01
<input type="checkbox" name="rep[]" value="email_2@example.com">Lorem Ipsum 02
<input type="checkbox" name="rep[]" value="email_3@example.com">Lorem Ipsum 03
</div>

<input type="submit" name="submit" value="Send Email to Users">

</form>

【讨论】:

  • 所以,这个区别在于将foreach 包裹在@mail 命令周围。此外,如果您是收件人,则其他收件人都不会出现在您的“收件人:”部分中。这一切仍然有效,但你看不到它还寄给了谁。这可能是好是坏,取决于您希望他们看到什么。谢谢。
  • @GhostEcho 完全正确;取决于你看它的方式。单个发送的电子邮件不太可能被视为垃圾邮件,其他人不会看到许多列表,这也是不建议的。我使用派上用场的数据库中的类似方式。一些 ISP/主机不允许群发邮件。而且,不客气,干杯。
  • 很高兴知道,这可能是将来有价值的信息。
  • @GhostEcho 我希望它对你有好处。
【解决方案3】:
foreach($_POST['rep'] as $rep_num) { $emailto = $rep_num;} 

在这里,您将所有电子邮件放入 $emailto 变量中。因此,每次循环运行时,它都会删除旧的并保存新的。所以最后你会得到最后一个电子邮件地址。

因此您可以使用数组来保存电子邮件地址。然后一封一封地发送电子邮件。您可以在循环中使用计数器来检查循环运行的次数,然后您可以将该计数器用作发送电子邮件的循环计数器。

【讨论】:

    【解决方案4】:

    试试这个:

    foreach($_POST['rep'] as $key => $rep_num) {
         $emailto = $rep_num;
    }
    

    委托人

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-10
      • 2013-11-08
      • 1970-01-01
      • 2014-03-03
      • 1970-01-01
      • 2014-01-26
      • 1970-01-01
      • 2017-02-07
      相关资源
      最近更新 更多