[英]Adding input field to PHP emailer only if it exists, how?
我有一个带有“名称”和“电子邮件”输入的表格。 另一个是“ data-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 .... etc”
$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")) {
我希望这很清楚,并感谢您的任何帮助或指导
托姆
为此,您应该使用输入数组。
在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[]"/>
使用这样的东西:
if(isset($_POST['data-1']))
{
// $_POST['data-1'] exists, include it.
}
else
{
// $_POST['data-1'] doesn't exists, don't include it.
}
一般而言,表单处理是技巧,并且对粗心的人有很多陷阱。 值得一看有关最佳实践表单处理的帖子
问题的症结在于,您不知道在$ _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-'开头,然后是一个或多个数字。 如果是这样,我们会将其添加到原始(未经过滤,未经验证的)数据中。
在此示例中,我们可以将preg_match替换为strpos函数-
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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.