首页 > 解决方案 > 使用 PHP 和 AJAX 登录:不工作。接收失败的警报不正确的凭据 - 但是没有收到任何错误

问题描述

我正在尝试建立一个成功的登录,创建一个登录会话'$_SESSION['user_id']'并在成功登录后:我想使用他们唯一的 user_id 参数将用户重定向到他们的 dashboard.php 页面。

IE 'dashboard.php?id=1'- 虽然我不完全确定如何在 URL 中传递唯一的用户 ID 参数(通过 ajax 方法),所以也可以使用一些帮助。

否则,如果登录不成功,我希望用户收到一条提示凭据无效的警报。

问题:我不断收到无效凭据警报,但没有看到任何错误。

我知道这不是最安全的方法,但是出于测试目的,我将密码作为 MD5 加密存储在我的表中。

这是我的 HTML 表单:

<form action="assets/secure_login.php" method="post" id="loginform"> 

<input type="text" placeholder="Username" id="username" name="username" class="login_input" required>   

<input type="password" placeholder="Password" id="password" name="password" class="login_input" required>  

<button type="submit" class="login_button" id="login_button">Login</button>   

</form> 

我的 AJAX:

<script>
$(document).ready(function() {
  $('#loginform').submit(function(e) {
    e.preventDefault();
    $.ajax({
       type: "POST",
       url: 'assets/secure_login.php',
       data: $(this).serialize(),
       success: function(data)
       {
          if (data === 'Login') {
            window.location = 'dashboard.php?id='+(not sure what to put here to generate unique user ID);
          }
          else {
            alert('Invalid Credentials');
          }
       }
   });
 });
});
</script>

这是我的包含数据库连接的 connect.php 文件:

<?php
   $dbhost = 'localhost';
   $dbuser = 'root';
   $dbpass = '';
   $dbname = 'myDatabase';
   $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname);

   if(! $conn ) {
      die('Could not connect: ' . mysqli_error());
   } ?>

PHP代码:

<?php
 include "connect.php";
 class Users {
 public $username = null;
 public $password = null;

 public function __construct( $data = array() ) {
     if( isset( $data['username'] ) ) $this->username = stripslashes(        strip_tags( $data['username'] ) );
     if( isset( $data['password'] ) ) $this->password = stripslashes( strip_tags( $data['password'] ) );
 }

 public function storeFormValues( $params ) {
    $this->__construct( $params ); 
 }

 public function Login() {
     $success = false;
     try{
        $con = new PDO(include 'connect.php');  
        $con->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
        $sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";
                    $user = username;

        $stmt = $con->prepare( $sql );
        $stmt->bindValue( "username", $this->username, PDO::PARAM_STR );
        $stmt->bindValue( "password", md5($this->password), PDO::PARAM_STR );
        $stmt->execute();

        $valid = $stmt->fetchColumn();

        if( $valid ) {
        $success = true;
                    session_start();


        session_regenerate_id();
        $_SESSION['user'] = $user['user'];
        session_write_close();
        echo ('Login');
        exit();

        }

        $con = null;
        return $success;
        }catch (PDOException $e) {
        echo $e->getMessage();
        return $success;
     }

 } }

请有人可以告诉我哪里出错或帮助我调整代码以使其正常工作吗?提前致谢。

标签: phpajax

解决方案


如果在 PHP 代码中登录成功,可以返回 JSON 格式的数据。您将在您的 javascript 代码中使用您的用户 ID 进行重定向。

例子 :

https://www.w3schools.com/js/js_json_php.asp

https://www.php.net/manual/tr/function.json-encode.php

https://www.php.net/manual/tr/function.json-decode.php


推荐阅读