Php 如果服务器验证为正,则将页面重定向到成功页面
我有一个带有操作的表单,它链接到同一个PHP页面contact.PHP。我在表单中有所有服务器端验证,一切正常。它将用户重定向到同一页面,并在需要时回显错误消息,同时使表单保持粘性(这是使用同一页面处理错误的要点) 我想要的是有一个成功的页面重定向,如果形式是好的。我读过其他关于如何实现这一点的文章,但我不太明白如何在我的代码中实现它Php 如果服务器验证为正,则将页面重定向到成功页面,php,html,forms,Php,Html,Forms,我有一个带有操作的表单,它链接到同一个PHP页面contact.PHP。我在表单中有所有服务器端验证,一切正常。它将用户重定向到同一页面,并在需要时回显错误消息,同时使表单保持粘性(这是使用同一页面处理错误的要点) 我想要的是有一个成功的页面重定向,如果形式是好的。我读过其他关于如何实现这一点的文章,但我不太明白如何在我的代码中实现它 <?php $fullname = $email = $reason = $contactbox = ''; $fullnameerr = $emailer
<?php
$fullname = $email = $reason = $contactbox = '';
$fullnameerr = $emailerr = $reasonerr = $contactboxerr = '';
if(data_post('submit')){
if(empty(data_post('firstname'))){
$fullnameerr = "Please enter a valid name";
}
else {
$fullname = clean_data(data_post('firstname'));
if (!preg_match("/^[a-zA-Z '']*$/", $fullname)){
$fullnameerr = "Please enter only alphabetical characters and white spaces";
}
}
if(empty(data_post('email'))){
$emailerr = "Please enter a valid e-mail";
}
else {
$email = clean_data(data_post('email'));
if (!filter_var($email, FILTER_VALIDATE_EMAIL)){
$emailerr = "Please enter a correct e-mail format (ex 'joe@cornell.edu')";
}
}
if(empty(data_post('reason'))){
$reasonerr = "Please select a reason for contact";
}
else{
$reason = clean_data(data_post('reason'));
}
if(empty(data_post('contacttext'))){
$contactboxerr = "Please elaborate on your reason";
}
else{
$contactbox = clean_data(data_post('contacttext'));
if(!preg_match("/^[\w\S\s]*$/", $contactbox )){
$contactboxerr = "Please enter only valid characters you would use in writing (ex 'abcABC123')";
}
if(strlen($contactbox) > 2000){
$contactboxerr = "Please enter a response with with a max of 2000 characters.";
}
}
}
function clean_data($field){
$field = trim($field);
$field = stripslashes($field);
return $field;
}
function data_post($param){
if (isset($_POST[$param])){
return $_POST[$param];
}
else{
return '';
}
}
?>
只需检查是否没有错误(即错误变量为空),然后使用
您没有控件来检查验证是否通过或失败。建议用户使用一个布尔变量来表示:
if(data_post('submit')){
$valid=true;
if(empty(data_post('firstname'))){
$fullnameerr = "Please enter a valid name";
$valid=false;
}
if(empty(data_post('email'))){
$emailerr = "Please enter a valid e-mail";
$valid=false;
}
//other validations
if($valid){
//validation passed
header('Location: destination.php');
}
}
除了@Deimoks answer,您可能还需要调用exit()调用header()函数后的代码>。如果在头重定向之后有任何代码,即使请求重定向,也可以执行该代码<代码>退出()。此外,如果您收到“已发送邮件头”错误,请查看。Wow!我真是个白痴。感谢您为我指出这一点,我不能相信我忽略了将错误变量设置为空。我知道header('Location:')方法,但从来不知道如何实现它。谢谢!
$fullname = $email = $reason = $contactbox = '';
$fullnameerr = $emailerr = $reasonerr = $contactboxerr = '';
if(data_post('submit')){
// your validations go here
// ......
if (empty($fullnameerr) && empty($emailerr) && empty($reasonerr) && empty($contactboxerr)) {
header('Location: success.php');
}
}
if(data_post('submit')){
$valid=true;
if(empty(data_post('firstname'))){
$fullnameerr = "Please enter a valid name";
$valid=false;
}
if(empty(data_post('email'))){
$emailerr = "Please enter a valid e-mail";
$valid=false;
}
//other validations
if($valid){
//validation passed
header('Location: destination.php');
}
}