【问题标题】:Using php to post checkbox selections in email使用 php 在电子邮件中发布复选框选择
【发布时间】:2011-10-05 05:30:08
【问题描述】:

我是 php 的新手,所以很难从现有答案中找出这一点。

我需要在生成的通知电子邮件中查看表单上最多 4 个复选框中的哪一个被选中。

表单正在发送电子邮件,但它只包括发件人的 cmets,而不是所做的复选框选择。

有人愿意指出我的代码中的错误吗?请继续假设 n00bness 的最低理解水平。

这是相关的html表单:

    <input type="checkbox" name="timeslots[]" value="thu" />Thursday after 7pm <br/>
    <input type="checkbox" name="timeslots[]" value="fri" />Friday after 5.30pm <br/>
    <input type="checkbox" name="timeslots[]" value="sat" />Saturday afternoon<br/>
    <input type="checkbox" name="timeslots[]" value="sun" />Sunday afternoon<br/>

..这是迄今为止我拼凑起来的 php 脚本:

<?php
$email_to = "me@mysite.com";
$name = $_POST["name"];
$email = $_POST["email"];
$comments = $_POST["comments"];
$email_from = $_POST["email"];
$email_subject = "Form request";
$times = $_REQUEST["timeslots"];

if(!filter_var($email_from, FILTER_VALIDATE_EMAIL)) {
    // Invalid email address
    die("The email address entered is invalid.");
}


$headers =
"From: $email_from .\n";
"Reply-To: $email_from .\n";

$body = "Name: $name\n  Message: $comments\n 
  $times";

ini_set("sendmail_from",$email_from);
$sent=mail($email_to,$email_subject,$comments,$headers,"-f".$email_from);
if($sent)
{
header("Location:thanks.html");
}else{
header("Location:senderror.html");
}
?>

【问题讨论】:

    标签: php html forms email checkbox


    【解决方案1】:

    $times 是代码中的数组:

    <?php
    $email_to = "me@mysite.com";
    $name = $_POST["name"];
    $email = $_POST["email"];
    $comments = $_POST["comments"];
    $email_from = $_POST["email"];
    $email_subject = "Form request";
    $times = $_POST["timeslots"];
    
    if(!filter_var($email_from, FILTER_VALIDATE_EMAIL)) {
        // Invalid email address
        die("The email address entered is invalid.");
    }
    
    $strTimes = implode(", ", $times);
    
    $headers[] = "From: $email_from .\n";
    $headers[] = "Reply-To: $email_from .\n";
    
    $body = "Name: $name\n  Message: $comments\n $strTimes";
    
    ini_set("sendmail_from",$email_from);
    $sent=mail($email_to,$email_subject,$comments,$headers,"-f".$email_from);
    if($sent)
    {
    header("Location:thanks.html");
    }else{
    header("Location:senderror.html");
    }
    ?>
    

    已编辑:在您的原始代码中,第 17 行和第 18 行应该是数组,(原始代码中的第 18 行未使用)

    【讨论】:

    • 谢谢 - 尝试了这个版本,但在发送时收到错误:解析错误:语法错误,E:\Domains\z\mysite.com\steps.php 中的意外 T_VARIABLE 在第 18 行 它指的是以下行:$headers = ..这很奇怪?
    • @Sharb 您的原始代码有误,第 18 行未使用,已修复 :)
    【解决方案2】:

    问题在于 $times 是一个数组。你应该这样做:

    $times = $_POST["timeslots"];
    
    $times = implode(', ', $times);
    

    然后你就可以在你的电子邮件中使用它了

    $times 是一个数组,因为在 PHP 中,当您使用数组作为名称声明输入元素时(就像您所做的那样),会发布一个数组。在您的情况下,只会发布选定的复选框。

    还有一件事:只会发布复选框的值,因此如果您选中前两个复选框,您将在邮件中发送“thu, fri”。

    【讨论】:

    • 这就是我正在寻找的结果,但仍然没有骰子(即电子邮件发送并包含 cmets,但正文中没有其他内容)。这些代码行的位置重要吗?
    • 尝试做 var_dump($_POST);var_dump($times);die();在你做内爆之后:你在屏幕上看到了什么?
    • OK,在 implode 之后添加在提交表单时会导致此消息:array(4) { ["timeslots"]=> array(4) { [0]=> string(5) "周四" [1]=> 字符串(3) "周五" [2]=> 字符串(3) "周六" [3]=> 字符串(3) "太阳" } ["name"]=> 字符串(8 ) "Jane Doe" ["email"]=> string(13) "john@smth.com" ["cmets"]=> string(4) "hkjh" } string(17) "thurs,fri,sat,sun "
    • 这意味着变量没有问题,它们应该出现在您的邮件中:尝试在正文中发送 $times: $body = "$times";
    • 完美 - 我没有正确引用 $body 变量,但它现在已修复。谢谢!
    猜你喜欢
    • 2015-02-01
    • 1970-01-01
    • 2011-11-06
    • 1970-01-01
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2015-08-10
    • 2017-05-29
    相关资源
    最近更新 更多