题
如何使用单独的进程页面在同一页面上处理表单。现在要进行注册,评论提交等,我使用第二页来验证数据,然后提交并将其路由回到home.php。我该如何做到这一点,以便在提交中,页面本身验证而不是使用第二页。
解决方案
您可以告诉表格提交PHP的自我,然后检查 $_POST
用于形式处理的变量。此方法非常适合进行错误检查,因为您可以设置错误,然后将表单重新加载带有以前提交的任何信息(即他们不会丢失提交)的任何信息。
单击“提交”按钮时,它将将信息发布到同一页面,并在顶部运行PHP代码。如果发生错误(基于您的检查),则表格将为用户重新加载,并显示出显示错误以及用户在字段中提供的任何信息。如果没有发生错误,您将显示一个确认页面而不是表单。
<?php
//Form submitted
if(isset($_POST['submit'])) {
//Error checking
if(!$_POST['yourname']) {
$error['yourname'] = "<p>Please supply your name.</p>\n";
}
if(!$_POST['address']) {
$error['address'] = "<p>Please supply your address.</p>\n";
}
//No errors, process
if(!is_array($error)) {
//Process your form
//Display confirmation page
echo "<p>Thank you for your submission.</p>\n";
//Require or include any page footer you might have
//here as well so the style of your page isn't broken.
//Then exit the script.
exit;
}
}
?>
<form method="post" action="<?=$_SERVER['PHP_SELF']?>">
<?=$error['yourname']?>
<p><label for="yourname">Your Name:</label><input type="text" id="yourname" name="yourname" value="<?=($_POST['yourname'] ? htmlentities($_POST['yourname']) : '')?>" /></p>
<?=$error['address']?>
<p><label for="address">Your Address:</label><input type="text" id="address" name="address" value="<?=($_POST['address'] ? htmlentities($_POST['address']) : '')?>" /></p>
<p><input type="submit" name="submit" value="Submit" /></p>
</form>
其他提示
最简单的结构是检测是否是否 $_POST
阵列不是空的
if(isset($_POST['myVarInTheForm'])) {
// Process the form
}
// do the regular job
您可以检查页面代码内的发布请求,然后检查数据。如果得到请求 - 只需显示表格即可。
但是请记住,这是一个很好的做法,可以通过Get请求在其他页面上显示成功表格提交结果,即任何成功的表单帖子都应通过重定向到成功页面来回答。
当然,您可以探索查看Ajax请求,在此探讨您对处理程序脚本的异步调用,然后更新带有成功消息的发送页面。这给人以“同一页面处理”的印象,即页面不必刷新。
这实际上取决于您要实现的效果。
@michael Irigoyen:它可以正常工作,但是在第一个RN/LOAD上,它显示了:
“注意:未定义的变量:C中的错误: XAMPP htdocs same_page.php在第28行中”
如何处理此通知?
现在就知道了:“使用isset, @等来supress错误……”“工作就像魅力!!!” “现在我会在我的代码上尝试一下……”
我保存了一条感谢消息,并使用会话变量刷新了。
if(!is_array($error)){
$_SESSION['message'] = 'Thank You!';
header('Location: yourpage.php');
exit();
}
然后在表单的顶部使用它:
if(isset($_SESSION['message'])){
echo $_SESSION['message'];
unset($_SESSION['message'];
}
这应该刷新页面并显示消息,然后如果它们刷新页面,则会变量为空,因此谢谢您不会显示。这称为Flash消息。