我有一个表单,其中包含“name”和“email”的输入。另一个是'数据-1'。用户可以点击添加按钮,jQuery将根据需要为'data-2','data-3'等动态添加输入。
表单将发布到PHP电子邮件脚本中,该脚本验证字段并将数据放入模板以进行邮寄。
如何创建输入'data-2','data-3'等?如果他们不是我怎么能避免我的电子邮件模板中的差距?
(有没有办法写它,所以如果收到帖子添加这个,如果不做什么?)
以下是我正在使用的代码示例:
$name = $_POST['name'];
$email = $_POST['email'];
$data-1 = $_POST['data-1'];
(我需要添加:$ data-2 = $ _POST ['data-2']和$ data-3 ....最多设定值为10?)
$e_body = "You were contacted by $name today.\r\n\n";
$e_data = "Data Set 1: $data-1.\r\n\n";
这里是我想要显示“数据集2/3/4 ......等”的地方
$e_reply = "You can contact $name via email, $email";
$msg = $e_body . $e_data . $e_reply;
if(mail($address, $e_subject, $msg, "From: $email\r\nReply-To: $email\r\nReturn-Path: $email\r\n")) {
我希望这很清楚,谢谢你的任何帮助或指导
吞
答案 0 :(得分:2)
您应该为此目的使用输入数组。
在HTML中,设置表单元素的名称以符合此命名方案:data[]
。
然后,当提交表单时,您只需循环遍历此数组并在循环内向电子邮件添加字段:
$name = $_POST['name'];
$email = $_POST['email'];
$data = $_POST['data'];
$e_data = '';
foreach($data as $i => $d) {
if((int) $i != $i) continue; //thanks Alex
$e_data .= "Data Set {$i}: " . $d . "\r\n\n";
}
//...
在客户端,您的代码应该是这样的:
<input type="hidden" name="data[]"/>
答案 1 :(得分:0)
使用类似的东西:
if(isset($_POST['data-1']))
{
// $_POST['data-1'] exists, include it.
}
else
{
// $_POST['data-1'] doesn't exists, don't include it.
}
答案 2 :(得分:0)
作为一般点,表格处理是技巧,并且对于粗心大意有许多陷阱。值得一看这篇文章on best practice form processing
问题的关键在于你不知道在$ _POST数组中会得到多少“数据”值。答案就是迭代$ _POST数组来查找数据值。
$rawData = array();
foreach ($_POST as $index => $value) {
// Test for a "data-n" index
if ((preg_match('#^data-\d+#i', $index, $matches))) {
$rawData[] = $value;
}
}
上面的代码将使用“data-0”,“data-1”等形式的密钥复制所有$ _POST值。然后,您可以过滤并验证这些值。
我们所做的只是迭代$ _POST来获取每个键和值。然后,我们使用preg_match测试密钥,看它是否以字符串'data-'开头,后跟一个或多个数字。如果是这样,我们将其添加到我们的原始(未经过滤,未经验证)数据中。
在这个例子中,我们可以用strpos函数替换preg_match -
if ( strpos ($index, 'data-') === 0) {
preg_match的使用为我们提供了更大的灵活性。例如,如果您想捕获'data-n'键的数字部分 - 'data-23','data-999','data-5'等,那么将if语句更改为
if ((preg_match('#^data-(\d+)#i', $index, $matches))) {
$rawData[$matches[1]] = $value;
}
变量$ matches是一个捕获搜索结果的数组。完整匹配的字符串是$ matches [0]。但是,我们在括号中包含了数字匹配模式,因此捕获的数字被放入$ matches 1中,然后我们用它来键入$ rawData数组。在这种情况下,$ rawData将具有键= 23,999和5。