验证后php重定向到另一个页面

验证后php重定向到另一个页面,php,forms,validation,redirect,Php,Forms,Validation,Redirect,我试图弄清楚如何在表单验证之后重定向(即在满足表单的条件之后)(我在PHP代码的末尾有标题)。我有一个基本的表单,我知道这应该是一个简单的代码行,但我似乎无法使它工作!非常感谢你的建议 <?php $firstNameErr = ''; $lastNameErr = ''; $emailErr=''; $passwordErr = ''; $passwordConfErr=''; if($_SERVER["REQUEST_METHOD&q

我试图弄清楚如何在表单验证之后重定向(即在满足表单的条件之后)(我在PHP代码的末尾有标题)。我有一个基本的表单,我知道这应该是一个简单的代码行,但我似乎无法使它工作!非常感谢你的建议

<?php

   $firstNameErr = '';
   $lastNameErr = '';
   $emailErr='';
   $passwordErr = '';
   $passwordConfErr='';


   if($_SERVER["REQUEST_METHOD"] == "POST"){
      $firstName = $_POST["firstName"];
      
      if(empty($firstName)){
         $firstNameErr =  "First Name is required";
      }

      else if(!preg_match("/^[a-zA-Z]+$/", $firstName)){
         $firstNameErr= "Only letters, no spaces or special characters allowed";
      }
      else{
         $firstNameErr = "Valid";
      }
   }

   if($_SERVER["REQUEST_METHOD"] == "POST"){
      $lastName = $_POST["lastName"];

      if(empty($lastName)){
         $lastNameErr = "Last Name is required";
      }

      else if(!preg_match("/^[A-Za-z]+((\s)?((\'|\-|)?([A-Za-z])+))*$/", $lastName)){
         $lastNameErr = "No Special characters or numbers allowed";
      }

      else{
         $lastNameErr = "Valid";
      }
   }

   if($_SERVER["REQUEST_METHOD"] == "POST"){
      $email = $_POST["email"];

      if(empty($email)){
         $emailErr = "Email is required";
      }

      else if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
         $emailErr = "Invalid email format";
      }

      else{
         $emailErr = "Valid";
      }

   }

   if($_SERVER["REQUEST_METHOD"] == "POST"){
      $password=$_POST["password"];


      if(empty($password)){
         $passwordErr = "Please Enter your password";

      }

      else if (strlen($password) < "8") {
         $passwordErr = "Your Password Must Contain At Least 8 Digits !";
      }
      else if(!preg_match("#[0-9]+#",$password)) {
         $passwordErr = "Your Password Must Contain At Least 1 Number !";
      }
      else if(!preg_match("#[A-Z]+#",$password)) {
         $passwordErr = "Your Password Must Contain At Least 1 Capital Letter !";
      }
      else if(!preg_match("#[a-z]+#",$password)) {
         $passwordErr = "Your Password Must Contain At Least 1 Lowercase Letter !";
      }
      else if(!preg_match('/[\'^£$%&*()}{@#~?><>,|=_+¬-]/', $password)) {
         $passwordErr = "Your Password Must Contain At Least 1 Special Character !";
      }
      else{
         $passwordErr = "Valid";
      }


   }

   if($_SERVER["REQUEST_METHOD"] == "POST"){

   }

   if($_SERVER["REQUEST_METHOD"] == "POST"){
      $confirmPassword = $_POST["confirmPassword"];
      $password = $_POST["password"];
      if(empty($confirmPassword)){
         $passwordConfErr = "Please Enter your password";

      }
      else if($password!=$confirmPassword){
         $passwordConfErr = "Passwords do not match";
      }
      else{
         $passwordConfErr="Valid";
      }

   }

   else{
      echo "Form not submitted with POST";
   }

   if($_SERVER["REQUEST_METHOD"] == "POST"){
      if(isset($_POST['Register']) and $firstNameErr == "Valid" and $lastNameErr =="Valid" and $emailErr == "Valid" and $passwordErr == "Valid" and $passwordConfErr=="Valid") {

         header("Location: profile.php");
         exit();

      }
   }

一个
如果($\u服务器[“请求方法”]=“发布”){
封装所有
$\u发布逻辑就足够了,这取决于你的应用程序(如果它主要是AJAX)您应该使用一个响应/请求流,以便POST逻辑位于顶部,并将错误传递到视图中,然后可以在视图中使用这些错误,或者您应该返回JSON并执行AJAX请求,否则您将无法提取错误,除非您将错误放入会话中,然后在重定向时提取错误,这只是额外的步骤。

示例请求/响应,对于单个页面,即
register.php
,可以通过include或view加载程序加载HTML,但思路相同

<?php
$errors = [];

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
    // first name
    if (empty($_POST["firstName"])){
        $errors['firstName'] = "First Name is required";
    } else if (!preg_match("/^[a-zA-Z]+$/", $_POST["firstName"])) {
        $errors['firstName'] = "Only letters, no spaces or special characters allowed";
    }

     // last name
    if (empty($_POST["lastName"])) {
        $errors['lastName'] = "Last Name is required";
    } else if (!preg_match("/^[A-Za-z]+((\s)?((\'|\-|)?([A-Za-z])+))*$/", $_POST["lastName"])) {
        $errors['lastName'] = "No Special characters or numbers allowed";
    }

    // ...others

   
    // errors is empty, so must all be valid
    if (empty($errors)) {
        
        // do something like insert into db and set session status
        
        header("Location: profile.php");
        exit();
    }
    
    // otherwise continue to form
} ?>

<form>
    ...
    <input name="firstName" value="<?= htmlspecialchars($_POST['firstName'] ?? '', ENT_QUOTES, 'UTF-8') ?>"/>
    <?= isset($errors['firstName']) ? '<span class="form-error">'.$errors['firstName'].'</span>' : '' ?>
    
    <input name="lastName" value="<?= htmlspecialchars($_POST['lastName'] ?? '', ENT_QUOTES, 'UTF-8') ?>"/>
    <?= isset($errors['lastName']) ? '<span class="form-error">'.$errors['lastName'].'</span>' : '' ?>
</form>


...

验证代码应如下所示:

$Name = $Surname = $username = $password = $confirm_password = 
$email ="";

if($_SERVER["REQUEST_METHOD"] == "POST"){
    // Validate Name.   
    if (empty(trim($_POST["firstName"]))) {
        $errors[] = 'name required.';
    } else {
        $Name  = $_POST["firstName"];
    }
    // Validate lastName.   
    if (empty(trim($_POST["lastName"]))) {
        $errors[] = 'surname required.';
    } else {
        $Surname  = $_POST["lastName"];
    }

    // Validate username
    if (!preg_match("/^[a-zA-Z]+$/", $_POST["username"])) {
       $errors['username'] = "Only letters, no spaces or special characters allowed";
    }
    // Validate username from database to see if username already exist.
    //You can check for the email is well.
    if(empty(trim($_POST["username"]))){
        $errors[] = "Please enter a username.";
    } else{
        // Prepare a select statement
        $sql = "SELECT id FROM users WHERE username = :username";
        
        if($stmt = $pdo->prepare($sql)){
            // Bind variables to the prepared statement as parameters
            $stmt->bindParam(":username", $param_username, PDO::PARAM_STR);
            
            // Set parameters
            $param_username = trim($_POST["username"]);
            
            // Attempt to execute the prepared statement
            if($stmt->execute()){
                if($stmt->rowCount() == 1){
                    $errors[] = "This username is already taken.";
                } else{
                    $username = trim($_POST["username"]);
                }
            } else{
                echo "Oops! Something went wrong. Please try again later.";
            }

            // Close statement
            $stmt->closeCursor();
        }
    }
    
    // Validate password
    if(empty(trim($_POST["password"]))){
        $errors[] = "Enter password.";     
    } elseif(strlen(trim($_POST["password"])) < 6){
        $errors[] = "password should be min 6 characters.";
    } else{
        $password = trim($_POST["password"]);
    }    
    // Validate confirm password
    if(empty(trim($_POST["confirm_password"]))){
        $errors[] = "confirm pass.";     
    } else{
        $confirm_password = trim($_POST["confirm_password"]);
        if($password != $confirm_password){
            $errors[] = "pass no matches.";
        }
    }
    
    // Validate Email
    if(filter_var($email, FILTER_VALIDATE_EMAIL)){
        $email = $_POST["email"];
    } else {
        $errors[] = "invalid email type.";
    }
    // Validate Email
    if(empty(trim($_POST["email"]))){
        $errors[] = 'email required.';
    }else {
            $email = filter_var($_POST["email"], FILTER_SANITIZE_EMAIL);
    }   
    
    if(empty($errors)){
        //if no errors
        //Do everythin else in here 
        //Do insert query after you are done redirect to profile page 
       header("Location: profile.php");
       exit();
    }
}
$Name=$Name=$username=$password=$confirm\u password=
$email=“”;
如果($\服务器[“请求\方法”]=“发布”){
//验证名称。
如果(为空(修剪($_POST[“firstName”])){
$errors[]=“需要名称”;
}否则{
$Name=$_POST[“firstName”];
}
//验证lastName。
如果(为空(修剪($_POST[“lastName”])){
$errors[]=“需要姓氏”;
}否则{
$姓氏=$_POST[“lastName”];
}
//验证用户名
如果(!preg_match(“/^[a-zA-Z]+$/”,$_POST[“username”])){
$errors['username']=“仅允许字母,不允许空格或特殊字符”;
}
//从数据库验证用户名,以查看用户名是否已存在。
//您可以检查电子邮件是否正常。
如果(为空(修剪($_POST[“username”])){
$errors[]=“请输入用户名。”;
}否则{
//准备select语句
$sql=“从用户名=:username的用户中选择id”;
如果($stmt=$pdo->prepare($sql)){
//将变量作为参数绑定到准备好的语句
$stmt->bindParam(“:username”,$param_username,PDO::param_STR);
//设置参数
$param_username=trim($_POST[“username]”);
//尝试执行准备好的语句
如果($stmt->execute()){
如果($stmt->rowCount()==1){
$errors[]=“此用户名已被使用。”;
}否则{
$username=trim($_POST[“username”]);
}
}否则{
echo“哎呀!出现问题。请稍后再试。”;
}
//结束语
$stmt->closeCursor();
}
}
//验证密码
如果(为空(修剪($_POST[“password”])){
$errors[]=“输入密码。”;
}elseif(strlen(trim($_POST[“password”]))<6){
$errors[]=“密码应至少包含6个字符。”;
}否则{
$password=trim($_POST[“password”]);
}    
//验证确认密码
如果(为空(修剪($_POST[“确认密码”])){
$errors[]=“确认通过。”;
}否则{
$confirm_password=trim($_POST[“confirm_password”]);
如果($password!=$confirm\u password){
$errors[]=“不传递匹配项。”;
}
}
//验证电子邮件
if(过滤变量($email,过滤验证电子邮件)){
$email=$_POST[“email”];
}否则{
$errors[]=“无效的电子邮件类型。”;
}
//验证电子邮件
如果(空(修剪($_POST[“email”])){
$errors[]=“需要电子邮件”;
}否则{
$email=filter\u var($\u POST[“email”]、filter\u SANITIZE\u email);
}   
if(空($errors)){
//如果没有错误
//这里的一切都做了吗
//完成后插入查询重定向到配置文件页面
标题(“位置:profile.php”);
退出();
}
}
要获取eRoom,请执行以下操作:

<?php if(isset($errors)) {?>
<div class="error">
  <?php echo implode('<br/>', $errors); ?>
</div>  
<?php } unset($_SESSION['errors']); ?>

如果您的html表单位于同一页面中,请在此处输入:

<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> 
   //inputs etc..
</form>

非常感谢!这帮了我很大的忙!不仅找出了我的错误,而且意识到我的代码有一个结构是非常重要的!再次感谢
<form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post"> 
   //inputs etc..
</form>