通过PHP从html表单中通过电子邮件发送数组

时间:2013-04-28 12:38:02

标签: php jquery html arrays email

我正在尝试创建一个HTML表单,允许您创建人员列表(姓名,姓氏及其公司)。我希望通过电子邮件(通过PHP)将此人员列表与表单上的所有其他数据一起发送。

似乎创建一个数组是要走的路,所以我尝试了这个虽然HTML和jQuery:

$('#add').click(function(e)
{
    $('#namelist').append('<p  class="nameentry"><input type="text" name="cfsName[]" value="' + cName + ": " + fName + " " + sName + '" class="cfsname" disabled /> <input type="button" name="remove" class="remove" value="Remove" /></p>');
    fName = $('input[name=inputfName]').val('Forename');
    sName = $('input[name=inputsName]').val('Surname');

    e.preventDefault();
});

将HTML添加到名为cfsname []的数组中的空div中(据我所知)。

解释这个并且应该编写电子邮件的PHP代码是:

$message = "";
if (isset($_REQUEST['visitor']) && $_REQUEST['visitor'] == "Yes")
{
    $message .= "Nature of work: Site visit" . "\n";
}
else
{
    $message .= "Nature of work: $natureofwork" . "\n";
}
$message .= "Location: $locationofwork" . "\n\n";
$message .= "Dates: $dayfrom " . "$monthfrom " . "$yearfrom " . "to $dayto " . "$monthto " . "$yearto" . "\n";
$message .= "Times: $hourfrom" . ":" . "$minfrom " . "to " . "$hourto" . ":" . "$minto" . "\n\n";
foreach($_POST['cfsName'] as $key => $value)
{
    $message .= $key . " " . $value . "\n";
}
$message .= "Project Manager: $projectmanager" . "\n";
$message .= "Contact Number: $contactnumber" . "\n";

mail(
    $emailto,
    "Worksheet Info Test",
    $message,
    $headers
);

电子邮件大部分按预期发送(我的'if'循环也不起作用,但现在不重要),但是应该包含从数组中取出的名称列表的部分是空白的。我显然做了一件完全错误的事情。我甚至可以在消息代码中调用'foreach'吗?是我的HTML数组甚至写得不错?我应该以某种方式将HTML数组转换为单独的PHP数组吗?

如果有人能看到我的代码中存在任何重大缺陷(我确信存在许多小缺陷),我真的很感激正朝着正确的方向发展!

3 个答案:

答案 0 :(得分:1)

如果您没有获得动态创建的任何输入字段,很可能是因为您将其创建为“已禁用”。

禁用的输入控件不得由浏览器发送到服务器。它不是一个简单的光学和行为的东西。因此,如果您不从其他地方的输入字段中删除禁用的标志,则不会发送它们。

答案 1 :(得分:0)

您使用什么方法发送表单? GET还是POST?您的代码尝试以帖子的形式访问变量:$_POST['cfsName']我会使用$_REQUEST['cfsName']来保证安全。

正如Mysteryos所说的关于你的JS代码,“在使用它们之前分配你的变量”。

关于通过HTML表单将数组传递给PHP的方法,这是一个简单的例子:

<form>
a<input name="arr[]" value="a"/><br/>
b<input name="arr[]" value="b"/><br/>
c<input name="arr[]" value="c"/><br/>
d<input name="arr[]" value="d"/><br/>
<input type="submit"/>
</form>
<?php

foreach ( $_REQUEST['arr'] as $item ) {
        echo "<div>$item</div>";
}

发送时,会打印出如下内容:

<form>
a<input name="arr[]" value="a"/><br/>
b<input name="arr[]" value="b"/><br/>
c<input name="arr[]" value="c"/><br/>
d<input name="arr[]" value="d"/><br/>
<input type="submit"/>
</form>
<div>a</div>
<div>b</div>
<div>c</div>
<div>d</div>

答案 2 :(得分:-1)

(忽略它)首先,每个输入都必须有唯一的名称。 其次,在使用它们之前分配你的变量。 第三,我看到一个名为'cName'但未在任何地方分配的变量。我会把它留给你。 正如sven所说,浏览器不会发送已禁用输入,因此会将其转换为隐藏输入。

<强>解释

javascript代码

$('#add').click(function(e)
{
    fName = $('input[name=inputfName]').val('Forename');
    sName = $('input[name=inputsName]').val('Surname');
    $('#namelist').append('<p  class="nameentry">'+cName + ': ' + fName + ' ' + sName+'<input type="hidden" name="cfsName[]" value="' + cName + ": " + fName + " " + sName + '" class="cfsname"/> <input type="button" name="remove" class="remove" value="Remove" /></p>');

    e.preventDefault();
});

PHP代码(保持不变)

...
foreach($_POST['cfsName'] as $key => $value)
{
    $message .= $key . " " . $value . "\n";
}
  ...