PHP邮件+复选框

时间:2018-04-15 13:55:12

标签: php

ETA:有人将此问题标记为重复,但我已经梳理了所有相似的主题,并且没有任何建议可行。添加括号(如need[]中所示)不起作用 - 它返回与下面讨论的完全相同的结果。如果我能在另一个帖子中找到答案,我就不会做出新的答案。它要求我注册一个帐户并花时间格式化一个帖子,如果答案已经在这里发布,那么我将花时间在这个网站上工作。

如果您有一个可能有效的解决方案的线程示例,请随时链接到它,但我已经查看了我在本网站上可以找到的每个线程,甚至远程似乎相关。感谢。

我已经在几个方面多次回答这个问题,但没有一个解决方案适用于我的情况,所以我在这里发帖,希望有人可以提供帮助。

该网站是一个登陆页面,潜在客户将填写表格,然后将其发送到指定的电子邮件地址。该表单包含十个服务复选框,所有这些都是格式化的:

<input type="checkbox" name="need" value="svc3">Description of Service 1<br/>
<input type="checkbox" name="need" value="svc2">Description of Service 2<br/>
<input type="checkbox" name="need" value="svc3">Description of Service 3<br/>

依此类推,有10种选择。应该能够选择任何/所有选项。在电子邮件处理程序PHP文件中,我有以下代码:

$name = $_POST['name']; 
$email_address = $_POST['email'];
$location = $_POST['loc']; 
$age = $_POST['age'];
$gender = $_POST['gender'];
$need = implode(", ", $_POST['need']);

(我最初只使用$need = $_POST['need'];,但只提供了最后一个选定的变量,而不是所有选定的变量。)

$to = $myemail; 
$email_subject = "New Consultation Request: $name";
$email_body = "You have received a new request for a FREE consultation. \n".
"Name: $name \nEmail: $email_address \nLocation: $location \nAge: $age. \nGender: $gender \n".
"\nI would like to work on: $need \n"
"\nMessage: \n$message "; 

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

mail($to,$email_subject,$email_body,$headers);

其他一切都完美无缺。目前,电子邮件在$need字段中没有数据发送,因此:

  

您收到了免费咨询的新请求   姓名:机器人先生   电子邮件:fake@mail.com
  位置:火星
  年龄:100
  性别:机器人
  我想继续努力:
  消息:
  你好,我是考试。机器人声音。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

您应该在复选框的名称中使用[]来发送数组。在您的实际代码中,$_POST['need']不是数组,因此,使用implode()会返回NULL

<input type="checkbox" name="need[]" value="svc1">Description of Service 1<br/>
<input type="checkbox" name="need[]" value="svc2">Description of Service 2<br/>
<input type="checkbox" name="need[]" value="svc3">Description of Service 3<br/>

请注意,第一个元素应具有svc1值(而不是svc3)。