-1

我正在尝试创建一个 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 数组吗?

如果有人能在我的代码中看到任何重大缺陷(我敢肯定有很多小缺陷),我真的很感激朝着正确的方向推进!

4

3 回答 3

1

如果您没有得到任何您正在动态创建的输入字段,很可能是因为您“禁用”了它们。

浏览器不得将禁用的输入控件发送到服务器。这不是一个简单的视觉和行为上的事情。因此,如果您不从其他地方的输入字段中删除禁用标志,它们将永远不会被发送。

于 2013-04-28T13:43:12.397 回答
0

您使用什么方法发送表格?获取还是发布?您的代码尝试以帖子的形式访问变量:为了安全起见,$_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>
于 2013-04-28T13:27:51.350 回答
-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";
}
  ...
于 2013-04-28T13:18:04.707 回答