使用PHP验证注册表单


Validating signup forms using PHP

我不知道为什么提交表单后没有显示任何内容。我想我了解PHP表单验证的大部分,但我不确定我在哪里出错。我也有JS验证,但这是一个分配,所以我必须做这两个。

我的表单看起来像:

<?php include 'connect.php';?>
        <form class="log-in-form" name="loginForm" action="sign-up-submit.php" method="post">
            <p class="form-subtitle">Please create an account</p><br>
            <input class="form-text" onfocus="this.placeholder = ''" type="text" placeholder="First Name" name="signupFirstName" id="signupFirstNameID"/><br>
            <input class="form-text" onfocus="this.placeholder = ''" type="text" placeholder="Last Name" name="signupLastName" id="signupLastNameID"/><br>
            <input class="form-text" onfocus="this.placeholder = ''" type="email" placeholder="Email Address" name="loginEmail" id="emailID" /><br>
            <input class="form-text" onfocus="this.placeholder = ''" type="date" placeholder="Date of birthday"  name="loginDate" id="dateID"/><br>
            <input class="form-text" onfocus="this.placeholder = ''" type="password" placeholder="Password" name="loginPass" id="pwdID"/><br>
            <input class="form-text" onfocus="this.placeholder = ''" type="password" placeholder="Verify Password" name="loginPassVerify" id="pwdVerifyID"/><br>
            <input class="form-button" type="submit" value="Create Account" />
        </form>

和我的表单验证看起来像

<?php
$firstNameError = $lastNameError = $emailError = $dateError = $passwordError = $passVerifyError = "";
$firstName = $lastName = $email = $date = $password = $passVerify = "";
  if (isset($_POST["signupFirstName"])) {
    $firstNameError = "The first name is required";
  } else {
    $firstName = test_input($_POST["signupFirstName"]);
    echo ($firstName);
  }
  if (isset($_POST["signupLastName"])) {
    $lastNameError = "The last name is required";
  } else {
    $lastName = test_input($_POST["signupLastName"]);
    echo ($lastName);
  }
  if (isset($_POST["loginEmail"])) {
    $emailError = "An email address is required";
  } else {
    $email = test_input($_POST["loginEmail"]);
    echo ($email);
  }
  if (isset($_POST["loginDate"])) {
    $dateError = "You must enter a date of birth";
  } else {
    $date = test_input($_POST["loginDate"]);
    echo ($date);
  }
  if (isset($_POST["loginPass"])) {
    $passwordError = "Password is required";
  } else {
    $password = test_input($_POST["loginPass"]);
    echo ($password);
  }
  if (isset($_POST["loginPassVerify"])) {
    $passVerifyError = "You must verify your password";
  } else {
    $passVerify = test_input($_POST["loginPassVerify"]);
    echo ($passVerify);
  }
function test_input($data) {
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}
?> 

这可能有助于简化一些脚本和表单名称。你有很多重复,可以通过循环来减轻:

简单验证示例:

<?php
    // Store your errors just in an array function because you could theoretically,
    // in future, create a database-driven error system that would return
    // an error code here based on a library of codes.
    function error_code($key = false)
        {
            $error["fname"]     =   "The first name is required";
            $error["lname"]     =   "The last name is required";
            $error["email"]     =   "An email address is required";
            $error["dob"]       =   "You must enter a date of birth";
            $error["password"]  =   "Password is required";
            $error["verify"]    =   "You must verify your password";
            return (!empty($error[$key]))? $error[$key] : "Unknown Error.";
        }
    // I like to return false if empty, may or may not help you
    function sanitize($data = false)
        {
            $data = trim($data);
            $data = stripslashes($data);
            // I personally like to turn quotes to special chars too
            $data = htmlspecialchars($data,ENT_QUOTES);
            return (!empty($data))? $data : false;
        }
    // Check that something has been submitted.
    if(isset($_POST['fname'])) {
            // Just loop through all your post values so you don't
            // need so many if/else repetitions
            foreach($_POST as $key => $value) {
                    // Will return some value or false
                    $value  =   sanitize($value);
                    // write to page if not false or else write an error code
                    echo ($value != false)? $value : error_code($key);
                }
        }
?>

形式:

<!-- I would suggest simplifying your id & name values, makes it a bit cleaner -->
<form class="log-in-form" name="loginForm" action="" method="post">
    <p class="form-subtitle">Please create an account</p><br>
    <input class="form-text" onfocus="this.placeholder = ''" type="text" placeholder="First Name" name="fname" id="fname" /><br>
    <input class="form-text" onfocus="this.placeholder = ''" type="text" placeholder="Last Name" name="lname" id="lname"/><br>
    <input class="form-text" onfocus="this.placeholder = ''" type="email" placeholder="Email Address" name="email" id="email" /><br>
    <input class="form-text" onfocus="this.placeholder = ''" type="date" placeholder="Date of birthday"  name="dob" id="dob"/><br>
    <input class="form-text" onfocus="this.placeholder = ''" type="password" placeholder="Password" name="password" id="password"/><br>
    <input class="form-text" onfocus="this.placeholder = ''" type="password" placeholder="Verify Password" name="verify" id="verify"/><br>
    <input class="form-button" type="submit" value="Create Account" />
</form>