Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果服务器验证为正,则将页面重定向到成功页面_Php_Html_Forms - Fatal编程技术网

Php 如果服务器验证为正,则将页面重定向到成功页面

Php 如果服务器验证为正,则将页面重定向到成功页面,php,html,forms,Php,Html,Forms,我有一个带有操作的表单,它链接到同一个PHP页面contact.PHP。我在表单中有所有服务器端验证,一切正常。它将用户重定向到同一页面,并在需要时回显错误消息,同时使表单保持粘性(这是使用同一页面处理错误的要点) 我想要的是有一个成功的页面重定向,如果形式是好的。我读过其他关于如何实现这一点的文章,但我不太明白如何在我的代码中实现它 <?php $fullname = $email = $reason = $contactbox = ''; $fullnameerr = $emailer

我有一个带有操作的表单,它链接到同一个PHP页面contact.PHP。我在表单中有所有服务器端验证,一切正常。它将用户重定向到同一页面,并在需要时回显错误消息,同时使表单保持粘性(这是使用同一页面处理错误的要点)

我想要的是有一个成功的页面重定向,如果形式是好的。我读过其他关于如何实现这一点的文章,但我不太明白如何在我的代码中实现它

<?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()。如果在头重定向之后有任何代码,即使请求重定向,也可以执行该代码<代码>退出()。此外,如果您收到“已发送邮件头”错误,请查看。

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');
    }
}