验证后仍提交数据返回 false


data still submits after validation return false

我一直在尝试创建一个注册表单,我已经尝试了几种方法,但我最后添加到其中的是 else if ($status = "OK") 行。以下是我代码的一部分,请帮助我仍然是编码新手;

<?php
$surnameErr = $firstnameErr = $usernameErr = $emailErr = $passwordErr = $password1Err = "";
$surname = $firstname = $username = $email = $password = $password1 = "";
$status = "OK";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["surname"])) {
     $surnameErr = "Surname is required";
     $status = "NOTOK";
   } 
   else {
     $surname = test_input($_POST["surname"]);
        if (!preg_match("/^[a-zA-Z ]*$/",$surname)) {
        $surnameErr = "Only letters and white space allowed"; 
        $status = "NOTOK";
        }
   }
   if (empty($_POST["firstname"])) {
       $firstnameErr = "First Name is required";
       $status = "NOTOK";
   } 
   else {
     $firstname = test_input($_POST["firstname"]);
        if (!preg_match("/^[a-zA-Z ]*$/",$firstname)) {
            $firstnameErr = "Only letters and white space allowed";
            $status = "NOTOK";
        }
   }
   if (empty($_POST["username"])) {
     $usernameErr = "Username is required";
     $status = "NOTOK";
   } else {
     $username = test_input($_POST["username"]);
   }
   if (empty($_POST["email"])) {
     $emailErr = "Email is required";
     $status = "NOTOK";
   } else {
     $email = test_input($_POST["email"]);
     if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $emailErr = "Invalid Email format"; 
        $status = "NOTOK";
        }
   }
   if (empty($_POST["password"])) {
     $passwordErr = "Password is required";
     $status = "NOTOK";
   } 
   if (empty($_POST["password1"])) {
     $password1Err = "Repeat password to confirm";
     $status = "NOTOK";
   }
   if ($password != $password1){
       echo "<script>alert('Password does not match')</script>";
       $status = "NOTOK";
   }
    $connection = mysqli_connect("localhost", "root", "", "church") or die(mysqli_error());
    $checkuser = mysqli_query ($connection,"SELECT * FROM signup WHERE username = '$username'");
    if (mysqli_num_rows ($checkuser) > 0){
        echo "<script>alert('$username already exist in our database, please enter another one')</script>";
        $status = "NOTOK";
    }
    $checkemail = mysqli_query ($connection,"SELECT * FROM signup WHERE email = '$email'");
    if (mysqli_num_rows ($checkemail) > 0){
        echo "<script>alert('$email already exist in our database, please enter another one')</script>";
        $status = "NOTOK";
    }
    else if ($status = "OK"){
        $password=md5($password);
        $datainsert = mysqli_query ($connection, "INSERT INTO signup (surname, firstname, username, email, password) VALUES ('$surname', '$firstname','$username','$email','$password')") or die(mysqli_error());
            echo "<script>alert('Sign Up Successful!')</script>";
        }
   }   
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

您的状况

if ($status = "OK") 

永远是真的,因为你正在做的是一个任务,而不是一个比较。您需要使用"=="来检查$status的值。

喜欢这个:

if ($status == "OK") 
    else if ($status = "OK"){

此行表示"将$status设置为"OK"的值并返回该值"。 除非您将$status设置为 PHP 认为为空的值(0、false、NULL、空字符串等),否则这将始终为 true。

它需要else if ($status == "OK"){才能工作。

附带说明一下,如果将常量或函数/方法调用放在测试的左侧,则可以避免此类错误。 由于您无法在正常执行期间为函数/方法调用或常量赋值,因此代码将失败并出现致命错误,这很容易调试。

    else if ("OK" = $status){ // Will fatal with a line number.  Fixable in 2 seconds flat