登录表单的 jQuery 验证 (Ajax)

时间:2021-06-10 04:41:50

标签: php jquery ajax jquery-validate

对于我的生活,我无法理解为什么这不起作用。我有以下代码

script.js

$("#login").validate({
    rules: {
      username: {
        required: true,
        minlength: 4,
        maxlength: 24,
        remote: {
          url: "../core/login.php",
          type: "post"
        }
      },
      password: {
        required: true,
        minlength: 8,
        remote: {
          url: "../core/login.php",
          type: "post"
        }
      }
    },
    messages: {
      username: {
        required: "Username Required",
        remote: "Username invalid"
      },
      password: {
        required: "Password Required",
        remote: "Password invalid"
      }
    }
  });

登录.php

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    require_once 'db.php';
    if (isset($_POST['username'])) {
        $username = $_POST['username'];
        $sql = "SELECT * FROM users WHERE username='$username'";
        $results = mysqli_query($conn, $sql);
        if (mysqli_num_rows($results) == 1) {
            echo 'true';
        } else {
            echo 'false';
        }
    }
    if (isset($_POST['password'])) {
        $username = $_POST['username'];
        $password = $_POST['password'];
        $sql = mysqli_query($conn, "SELECT password FROM users WHERE username='$username'");
        $results = mysqli_fetch_array($sql);
        $hashed_password = $results['password'];
        if(password_verify($password, $hashed_password)) {
            echo 'true';
        } else {
            echo 'false';
        }
    }
} else {
    header('HTTP/1.0 403 Forbidden');
}

所以问题来了。本质上,我试图通过 ajax 验证用户名和密码,因为表单在弹出窗口中。如果在数据库中找不到匹配的用户名,将显示“用户名无效”。这部分工作得很好。

现在,当我尝试验证密码时,问题出在哪里。出于某种原因,我不明白为什么它没有得到 $username = $_POST['username'];。但例如,如果我在密码部分手动定义 $username = 'SomeUser2021';,它将开始正确验证密码。

此外,如果有人知道如何显示一个简单的错误消息,而不是像“用户名或密码不正确”这样的 2 个单独的错误消息,那就太好了。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:-2)

只是复制你的代码。如果您想要单个响应“用户名或密码不正确”,您可以使用一个函数来验证这两个值。

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    require_once 'db.php';
   if (isset($_POST['username']) && isset($_POST['password'])) {
        $username = $_POST['username'];
        $password = $_POST['password'];
        $sql = "SELECT * FROM users WHERE username='$username' AND password='$username'";
        $results = mysqli_query($conn, $sql);
        if (mysqli_num_rows($results)) {
            echo 'true';
        } else {
            echo 'false';
        }
    } else {
      echo 'false';
    }
} else {
    header('HTTP/1.0 403 Forbidden');
}

此外,在表单验证中,您可以对用户名和密码进行一次检查。

相关问题