【问题标题】:Send an email with the array data the user has filled in a form?发送一封电子邮件,其中包含用户在表单中填写的数组数据?
【发布时间】:2011-10-21 03:56:53
【问题描述】:

我需要一个 html 网络表单,它可以根据用户的选择计算结果(每个选项都有一个特定的值),我想向用户显示结果并将用户选择的选项通过电子邮件发送给我。

我得到它的第一部分,它工作正常,但我无法制作脚本通过邮件向我发送信息。

这是我的 html 表单的示例:

1. Place
<select name="place[]">
<option value="zone1">You´re in Zone 1</option>
<option value="zone2">You´re in Zone 2</option>
<option value="zone3">You´re in Zone 3</option>
</select>

1. Role
<select name="role[]">
<option value="role1">You have Role 1</option>
<option value="role2">You have Role 2</option>
<option value="role3">You have Role 3</option>
</select>

这是一个 php 代码示例,我根据用户选择的内容对值进行求和(我在表单中有更多值):

$place = array (
"zone1" => 10,
"zone2" => 20,
"zone3" => 30,
);
$role = array (
"role1" => 1,
"role2" => 2,
"role3" => 3,
);

然后我为每个选项创建一个变量:

$user_place = array();
$user_role = array();

现在我告诉只根据用户输入的内容使用信息:

if(is_array($_POST['place']))
{
foreach( $_POST['place'] as $k => $v )
{
   if( isset($place[ $v ]) )
   $user_place [] = $place[ $v ]; 
}
} 

if(is_array($_POST['role']))
{
foreach( $_POST['role'] as $k => $v )
{
   if( isset($role[ $v ]) )
   $user_role [] = $role[ $v ]; 
}
} 

根据用户的选择,我创建一个新变量,其中每个变量都等于默认分配给该变量的值:

$place_sum = array_sum($user_place);
$role_sum = array_sum($user_role);

我总结了所有这些:

$total = $place_sum + $role_sum;
echo $total;

现在我想在每次用户填写表单时将选项邮寄给自己:

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$to   = 'mymail@gmail.com';
$subject = 'USER RESULTS '.date("m/d/Y h:m:s");

现在我已经试过了:

$message = $user_place;
$message = $user_role;

还有这个:

$message = join(', ', $_POST['place']);
$message = join(', ', $_POST['role']);

还有这个:

$message = $_REQUEST['place'];
$message = $_POST['role'];

mail($to, $subject, $message);
}

这是我的问题:这些选项中没有任何一个能让我得到结果。我得到的只是一封空白电子邮件,$message 没有邮寄。

【问题讨论】:

  • 您使用的是哪个操作系统?
  • 呃...操作系统?我的服务器在 Apache 上运行,但我使用的是 windows XP...
  • 在 CentOS 中默认的邮件配置是 sendmail,你可以通过 mail() 方法发送邮件,我认为其他操作系统不支持这种方法。您必须先进行身份验证。
  • 但电子邮件已发送...只是空白。当我尝试其他东西(可能是一个默认字符串)时,它被发送了。
  • 我在这里有点新,想知道我做错了什么或不准确而获得-1票(所以我以后不会再这样做了)。谢谢!

标签: php arrays forms email


【解决方案1】:

你的 $k 和 $v 颠倒了。 if( isset($place[ $v ]) ) 应该是 if( isset($place[ $k ]) ) 等等。

编辑:实际上,不是。过了我的就寝时间。 :-)

【讨论】:

  • 谢谢!所以应该是 if(is_array($_POST['role'])) { foreach( $_POST['role'] as $k => $v ) { if( isset($role[ $k ]) ) $user_role [] = $角色[ $k ];我的意思是,两个“v”都被替换了?谢谢! }
  • 不,改变这些不会使总 aumont 正确(它只会一直为零)。
  • 不,更改一个或两个值,答案仍然始终为零。
  • 我的错...你的 $k 和 $v 很好。你没有展示你的整个表格。你的表单方法=“POST”吗?
  • 那我不知道该告诉你什么。您的示例代码对我来说可以正常工作(最多echo $total)。您的实际代码中一定有一些不同的地方。
【解决方案2】:

好的,以防万一有人遇到同样的事情,终于明白了!

这是它应该被打印的方式:

$message .= join($_POST['place']); 

您注意到“=”号之前的小点了吗?嗯,那真是天壤之别。

我不太明白为什么它使用串联赋值而不是简单赋值,但它确实有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多