如何使用filter_var验证用户输入?

时间:2017-07-03 22:40:23

标签: php forms validation

我正在创建一个基本的注册表单,我想验证用户输入。我已经阅读了很多不同的方法。首先,我的工作不起作用,因为当它不是有效的电子邮件时,它回应“电子邮件是有效的”。我真的希望能找到最有效,最简洁的方法!

所以我的两个问题是:

1。)我的代码中是否有错误表明它是有效的电子邮件,即使它不是?

2.。)如何尽可能提高效率?

以下是代码:

<?php
include('functions.php');

$server = "localhost";
$auth = "root";
$pass = "password";
$db = "users";

$conn = connect_to_db($server, $auth, $pass, $db);

$signup = isset($_POST['submit']);
$output = NULL;

if( $signup ){
  $username = htmlspecialchars($_POST['username']);
  $password = md5($_POST['password']);
  $email = $_POST['email'];
  if( filter_var($email, FILTER_VALIDATE_EMAIL) && !empty($username) && !empty($password) && !empty($email) ){
    echo 'Email is valid';
      $sql = "SELECT username FROM info WHERE username = '$username'";
      $result = mysqli_query($conn, $sql);
      if( mysqli_num_rows($result) > 0 ){
        echo "Sorry, there is already an account registered with that username";
      } else {
        $sql = "INSERT INTO info (username, password, date_created) VALUES ('$username', '$password', NOW())";
        mysqli_query($conn, $sql);
        $output = "<p> Username: $username <br />" . "Password: $password </p>";
      }
  } elseif ( empty($username) || empty($password) ) {
        $output = "<p> Both fields are required </p>";
  }
  echo $output;
}


?>

<!DOCTYPE html>
<html>

<head>
  <title>My Website</title>
</head>

<body>

<form method="POST">
  <h1>Signup: </h1><br />
  Choose a username: <input type="text" name="username" /> <br />
  Choose a password: <input type="password" name="password" /> <br />
  Enter your email: <input type="email" name="email" /> <br />
  <input type="submit" name="submit" value="Signup" />
  <p>Already have an account? Login here: <br /> <a href="index.php">Login</a></p>
</form>

</body>
</html>

2 个答案:

答案 0 :(得分:-2)

Emm ..对于用户名和密码输入,您可以使用该函数并将其放在函数文件中:

 function makeItSafe($value) {
        htmlspecialchars($value);
        strip_tags($value);
        htmlentities($value, ENT_QUOTES);
        return $value;
    }

对于电子邮件,是的,您可以使用 filter_var 功能或使用 RegExp 方式..但在我看来,filter_var更易于使用:)

答案 1 :(得分:-2)

我使用下面的代码验证电子邮件地址。然后我要求用户确认他们的电子邮件以完成注册,因为没有真正的方法来确定电子邮件是否真实。

if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
    // invalid emailaddress
}

此外,您应该创建一个检查POST数据的函数。

function checkData($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}