簡體   English   中英

如何拋出驗證錯誤

[英]how to throw validation error

registration_from.php

     <!DOCTYPE HTML>
        <html>
       <head>
        <title>Register</title>
       </head>
       <body>
        <form action="" method="POST">
        Name: 
        <input type="text" name="name">
        <br/> <br/>
        Username: 
        <input type="text" name="username">
        <br/> <br/>
        Password:
        <input type="password" name="password">
        <br/> <br/>

        Email: 
        <input type="text" name="email">
        <br/> <br/>
        <input type="submit" name="submit" value="Register">
    </form>
</body>
  </html>
   <?php
  require('connect.php');
  require('validation.php');
$name = $_POST['name'];
$username = $_POST['username'];
$password = $_POST['password'];

$email = $_POST['email'];

   if(isset($_POST["submit"])){
    if($query = mysqli_query($connect,"INSERT INTO users 
 (`id`,`name`,`username`, `password`, `email`) VALUES ('','".$name."', 
    '".$username."', '".$password."', '".$email."')")){
        echo "Success";
    }else{
        echo "Failure" . mysqli_error($connect);
      }
      }
 ?>

validation.php

     <?php
   // define variables and set to empty values
    $nameErr = $emailErr = $userErr = $passwordErr = "";
     $name =  $email = $username =$password = "";


     if (isset($_POST['submit'])) {
     if (empty($_POST["name"])) {
        $nameErr = "Name is required";
      } else {
       $name = test_input($_POST["name"]);
       // check if name only contains letters and whitespace
      if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
       $nameErr = "Only letters and white space allowed"; 
       }
       }

      if (empty($_POST["email"])) {
        $emailErr = "Email is required";
       } else {
      $email = test_input($_POST["email"]);
        // check if e-mail address is well-formed
       if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $emailErr = "Invalid email format"; 
       }
       }

        if (empty($_POST["username"])) {
      $userErr = "Username is required";
     } else {
      $username = test_input($_POST["username"]);
     }

     if (empty($_POST["password"])) {
       $passwordErr = "Password is required";
     } else {
       $password= test_input($_POST["password"]);
      }

  }

   function test_input($data) {
     $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
    }
   ?>

connect.php

  <?php
  $connect = mysqli_connect("localhost", "root", "","php_forum") 
  or die("Error " . mysqli_error($connect)); 
    ?>

我正在使用四個輸入來開發一個簡單的注冊,即名稱,用戶名,密碼,電子郵件。當用戶填寫表格並單擊提交按鈕時,所有填寫的數據都應保存在數據庫中,這在我的數據庫中可以正常工作情況下,但是當用戶不會填寫任何數據並且如果用戶只是單擊提交按鈕時,錯誤消息應該顯示為“所有字段都是必需的”,但是在我的情況下,即使我單擊提交按鈕而未輸入任何值,消息我越來越成功,所有空值都將存儲在數據庫中,這是不應該發生的,我的輸出應該是:如果我填寫表格n單擊提交按鈕,那么所有數據都應該存儲在數據庫中,如果我單擊提交按鈕如果不填寫任何值,則錯誤應拋出“要填寫的所有字段”,並且數據庫中不應存儲任何空值,請任何人都可以指導我應進行哪些更改,以便獲得所需的輸出。

 <?php // define variables and set to empty values $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?> <h2>PHP Form Validation Example</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> Name: <input type="text" name="name"> <br><br> E-mail: <input type="text" name="email"> <br><br> Website: <input type="text" name="website"> <br><br> Comment: <textarea name="comment" rows="5" cols="40"></textarea> <br><br> Gender: <input type="radio" name="gender" value="female">Female <input type="radio" name="gender" value="male">Male <input type="radio" name="gender" value="other">Other <br><br> <input type="submit" name="submit" value="Submit"> </form> <?php echo "<h2>Your Input:</h2>"; echo $name; echo "<br>"; echo $email; echo "<br>"; echo $website; echo "<br>"; echo $comment; echo "<br>"; echo $gender; ?> 

請在會話中添加錯誤,並在表單文件中打印會話。

在validation.php中

$nameErr = $emailErr = $userErr = $passwordErr = "";
$name =  $email = $username =$password = "";
if (isset($_POST['submit'])) {

 $name = $_POST["name"];
 $email = $_POST["email"];
 $username = $_POST["username"];
 $password = $_POST["password"];

if($name == '' ||  $email == '' || $username == '' || $password == "") 
 {
  echo "ALL FIELDS ARE NECESSARY";
  exit();
 }

     if (empty($_POST["name"])) {
        $nameErr = "Name is required";
      } else {
       $name = test_input($_POST["name"]);
       // check if name only contains letters and whitespace
      if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
       $nameErr = "Only letters and white space allowed"; 
       }
       }

      if (empty($_POST["email"])) {
        $emailErr = "Email is required";
       } else {
      $email = test_input($_POST["email"]);
        // check if e-mail address is well-formed
       if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $emailErr = "Invalid email format"; 
       }
       }

        if (empty($_POST["username"])) {
      $userErr = "Username is required";
     } else {
      $username = test_input($_POST["username"]);
     }

     if (empty($_POST["password"])) {
       $passwordErr = "Password is required";
     } else {
       $password= test_input($_POST["password"]);
      }

  }

registration_from.php

if(isset($_SESSION['error]) && !empty($_SESSION['error])){
   echo $_SESSION["error"]
 }

如果您不介意添加更多代碼,則代碼會像這樣:

在您的registration_form.php中

<?php
require('validation.php'); // Require first to do validation before queries
require('connect.php');

// Remove the part where you set variables to $_POST params
// Variables are already set inside validation.php

/**
* Then, I recommend moving queries to **connect.php**
* to have all your sql functions inside one file.
* Also moving the inserting of data to a function for easy grouping/calling
*/

if (isset($_POST["submit"]) {
    // Check if validation does not fail
    if ($emailErr == "" || $nameErr == "" || $userErr == "" || $passwordErr == "") {
        // Call to insert function
        doInsert($name, $email, $username, $password);
    } else {
        echo $emailErr . " " . $nameErr . " " . $userErr . " " . $passwordErr;
    }
}

?>

在您的connect.php中

function doInsert($name, $email, $username, $password) {
    $connect = mysqli_connect("localhost", "root", "","php_forum")
        or die("Error " . mysqli_error($connect));

    $sql = "INSERT INTO users(`id`,`name`,`username`, `password`, `email`)
            VALUES ('','".$name."', '".$username."', '".$password."', '".$email."')";

    $query = mysqli_query($connect, $sql);

    if ($query) {
        echo "Success";
    } else {
        echo "Failure " . mysqli_error($connect);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM