我正在尝试创建一个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数组吗?
如果有人能看到我的代码中存在任何重大缺陷(我确信存在许多小缺陷),我真的很感激正朝着正确的方向发展!
答案 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";
}
...