我在一个页面上有多个相同表单(名称/电子邮件/消息字段)的实例。它们共享一个类('.contact-form')和不同的(动态生成的ID)。
我使用jQuery Tools Validator验证它们(虽然我没有任何问题但它没有相关性):
$(".contact-form").validator();
问题在于我的sendmail.php文件,我想,这就是我获取所有POST值的方法。验证他们:
//grab the fields
$address = trim($_POST['address']);
$title = trim($_POST['title']);
$message = $_POST['message'];
//check if empty
if(empty($name) || empty($title) || empty($message)) {
$wrong = true;
}
if($wrong) {
http_response_code(400);
} else {
// do stuff
http_response_code(200);
}
现在,我面临的问题是:
注意: 3
中 mysitesaddress 中的未定义索引:地址任何想法如何修复它/检查每个表单而不是仅发送后的第一个/清除POST数据?我确信在PHP中有一种简单的方法可以做到这一点,我对那种语言并不熟悉(主要是前端人员),所以任何帮助都会非常感激。
谢谢!
(我已经谷歌搜索了一段时间的答案,但看起来像“POST”是一个棘手的名字,我得到Wordpress /博客/论坛相关的东西大多数...)
[更新]
以下是每种表单的HTML代码:
<div class="wrapper">
<form class="contact-form" action="sendmail.php" method="post" novalidate="novalidate">
<input name="title" type="text" required="required" />
<input name="address" type="email" required="required" />
<textarea name="message" required="required" ></textarea>
<input type="Submit" value="Submit" />
</form>
<div class="sucess">
Success message that replaces form ^.
</div>
</div>
答案 0 :(得分:1)
通知暗示“地址”键不存在。
您应该检查$_POST
变量中的索引是否已设置/存在,例如使用PHP isset()函数。
这可能是因为您没有以各种形式发送地址,只是在第一个或类似的地方发送地址。
有关如何使用isset检查的示例代码:
if ( isset($_POST['address']) ) {
//only set $address to the $_POST value if it is set
$address = trim($_POST['address']);
}
答案 1 :(得分:1)
我看不到你的HTML表单代码,但我猜你的表单标签看起来像这样
<form action="sendmail.php" method="post">
这将从提交的表单中获取所有字段,并通过$ _POST将它们发送到您的sendmail.php。在处理数据之后(edwardmp在尝试分配变量之前提供了确保数据存在的一个很好的提示),然后您将页面重定向到某种类型的成功登陆或返回到原始表单页面。我一直用来做的方法是:
if($wrong) {
$error = "Please check your entry and try again.";
header("Location: http://example.com/formpage.html?error=" . htmlencode($error),true,303);
exit();
} else {
// do stuff
$msg = "Your form was successfully submitted.";
header("Location: http://example.com/formpage.html?msg=" . htmlencode($msg),true,303);
exit();
}
这种设计使得通过重新加载页面来清除$ _POST数据,并允许您将消息发送回原始页面,您将通过$ _GET ['msg']或$ _GET ['错误'显示]。这应该可以阻止表单错误提交。