PHP:只有在用户点击“发送”后,才发送一封包含用户在表单中填写的数据的电子邮件;发送;?(数据是一个数组)

PHP:只有在用户点击“发送”后,才发送一封包含用户在表单中填写的数据的电子邮件;发送;?(数据是一个数组),php,arrays,forms,email,Php,Arrays,Forms,Email,我对PHP和编程都是新手,我还在阅读我的手册。我正在尝试一些锻炼,并创建一些我自己的简单测试 我有一个表单,带有一些复选框和选择项。用户完成表单并显示一些输出。这就像一个小游戏,用户选择一些答案,然后脚本显示一个数字作为他/她的分数 现在,我想在每次用户完成游戏时收到一封电子邮件,其中包含所有答案 用户完成一些复选框并选择项目,因此,所有答案都是数组(因此,我尝试了$message\u answer2=$\u POST['answer2'],但它不起作用) 所以,我试过: $to = 'my

我对PHP和编程都是新手,我还在阅读我的手册。我正在尝试一些锻炼,并创建一些我自己的简单测试

我有一个表单,带有一些复选框和选择项。用户完成表单并显示一些输出。这就像一个小游戏,用户选择一些答案,然后脚本显示一个数字作为他/她的分数

现在,我想在每次用户完成游戏时收到一封电子邮件,其中包含所有答案

用户完成一些复选框并选择项目,因此,所有答案都是数组(因此,我尝试了$message\u answer2=$\u POST['answer2'],但它不起作用)

所以,我试过:

$to   = 'myown@mail.com';
$subject = 'New Game '.date("m/d/Y h:m:s");
$message_answer2 = join(', ', $_POST['answer2']);
mail($to, $subject, $message_answer2);
这有两个问题:

  • 出现一个PHP错误:警告:join()[function.join]:传入的参数无效

  • 每次我重新加载页面时,都会发送一封电子邮件(一封空白电子邮件)。只有在用户点击表单的“发送”按钮后,才能发送电子邮件

如果有人能帮我解决这个问题,我将不胜感激:)

谢谢

罗莎蒙达

你应该试试这个:

if (isset($POST['answer2'])) {
    $to   = 'myown@mail.com';
    $subject = 'New Game '.date("m/d/Y h:m:s");
    $message_answer2 = join(', ', $_POST['answer2']);
    mail($to, $subject, $message_answer2);
}
我假设当用户提交表单时,您将其发布到当前页面。如果是这样的话,那么当你最初加载页面时,在$$POST(‘应答器2’)中没有数据集,这就是为什么你会得到一个错误,然后它发送空白消息,因为没有数据要发送。补充说,只有在声明会发出电子邮件时,才会发送电子邮件,因此,只有在“answer2”中有数据发布到页面时,才可以发送电子邮件。

您应该尝试以下方法:

if (isset($POST['answer2'])) {
    $to   = 'myown@mail.com';
    $subject = 'New Game '.date("m/d/Y h:m:s");
    $message_answer2 = join(', ', $_POST['answer2']);
    mail($to, $subject, $message_answer2);
}
我假设当用户提交表单时,您将其发布到当前页面。如果是这样的话,那么当你最初加载页面时,在$$POST(‘应答器2’)中没有数据集,这就是为什么你会得到一个错误,然后它发送空白消息,因为没有数据要发送。添加仅当语句将其设置为只有在“answer2”中有数据发布到页面时才会发送电子邮件。

join()
用于数组。除非您在表单的字段名上使用了特定于PHP的数组表示法,否则PHP不会将
$\u POST['answer2']
作为数组-它只是一个普通字符串

如果你的表格看起来像

<input name="answer2" ...>
<input name="answer2" ...>

那么您仍然只能在$\u POST中获得一个字符串值。您必须使用
[]
符号告诉PHP它应该创建一个数组,并将每个应答器2添加到该数组中。当不处于数组模式时,PHP将使用在表单数据中找到的每个answer2值简单地覆盖
$\u POST['answer2']

join()
用于数组。除非您在表单的字段名上使用了特定于PHP的数组表示法,否则PHP不会将
$\u POST['answer2']
作为数组-它只是一个普通字符串

如果你的表格看起来像

<input name="answer2" ...>
<input name="answer2" ...>



那么您仍然只能在$\u POST中获得一个字符串值。您必须使用
[]
符号告诉PHP它应该创建一个数组,并将每个应答器2添加到该数组中。当不处于数组模式时,PHP将使用在表单数据中找到的每个answer2值简单地覆盖
$\u POST['answer2']

对于第一个问题,请使用“内爆”。@Aurelio:为什么?join()是内爆()的别名,在内部使用与内爆()完全相同的代码。使用内爆时错误仍然存在:警告:内爆()[函数.内爆]:参数无效passed@MarcB很抱歉我忘了它只是一个别名。对于第一个问题,请改用“内爆”。@Aurelio:为什么?join()是内爆()的别名,在内部使用与内爆()完全相同的代码。使用内爆时错误仍然存在:警告:内爆()[函数.内爆]:参数无效passed@MarcB很抱歉我忘了那只是个化名。谢谢!如果我有更多的值回答3、4、5等,我应该使用elseif吗?有些响应具有“已检查”默认选项,因此,即使用户没有执行任何操作,它们也已检查。如果要有多个值,我建议将数据作为JSON对象发送。然后从POST数据解析它。我尝试了单个字段并发送了电子邮件,但两个错误仍然存在(发送了两封邮件,一封是因为我重新加载了页面,另一封是因为我点击了“发送”和“警告:join()[function.join]:传递的参数无效”错误仍然出现。请阅读其他答案。Marc B在谈论join()时有正确的信息。最好使用
if($\u SERVER['REQUEST\u METHOD']=='POST'){…}
。这是100%可靠的,与检查字段的存在不同。您可以重命名字段并忘记更新if()谢谢!如果我有更多的值回答3、4、5等,我应该使用elseif吗?有些回答有“已检查”的默认选项,因此,即使用户没有做任何操作,它们也已被检查。如果要有多个值,我建议将数据作为JSON对象发送。然后从POST数据解析数据。我尝试了单个字段并发送了电子邮件,但这两个错误仍然存在(发送了两封邮件,一封是因为我重新加载了页面,另一封是因为我点击了“发送”,并且“警告:join()[function.join]:传递的参数无效”错误仍然出现。请阅读其他答案。Marc B在谈论join()时有正确的信息。最好使用
if($\u SERVER['REQUEST\u METHOD']=='POST'){…}
相反。这是100%可靠的,与检查字段的存在不同。您可能会重命名字段并忘记更新if()。注意:是的,我已经放了方括号:answer2[]:)我建议执行
变量转储($\u POST['answer2'])
,然后,确保它通过