使用ajax的php-mysql登录系统

标签 php jquery mysql ajax

我最近开始学习php,所以我不太擅长它。我一直在尝试使用 php/ajax 创建一个登录系统。我已尽我所能,但似乎可以找出实际问题的根源。即使我已经将其添加到 url 中,Ajax 也无法从我的 process.php 文件中获取数据。唯一执行的代码是来自索引脚本的代码,而不是来自进程的代码。我的数据库连接没问题。只是ajax和process.php之间似乎没有通信。它只是执行 Ajax 中的“else”(data==true) 代码。很抱歉我可能无法很好地表达自己的意思,但我只是希望您能理解我的意思。 以下是我创建的文件。

这是member.php类

       <?php
        class member {

       public $table;
       public function __construct(){

       $this->table = "users";   


         }


       //login check
      public function check($username,$password,$conn){

       $this->table = "users";
       //$password_hash = md5($password);

       $stmt = $conn->prepare("SELECT * FROM ".$this->table." WHERE 
       Username='$username' AND Password='$password' LIMIT 1");
       $stmt->execute();
                    if($stmt->rowCount() > 0)
                    {

                      while($row = $stmt->fetch(PDO::FETCH_ASSOC))
                      {
                            // print_r($row);
                                 $_SESSION['id'] = $row['id'];
                                 ;
                                 $_SESSION['email'] = $row['email'];

                                 return true;
                      }
                    } else {
                         return false; 

                   }

      }


     }

    ?>

这是 process.php 文件

    <?php
     session_start();

    require_once('member.php');

   //for login
   if(isset($_POST['login'])){
   $username = $_POST['username'];
   $password = $_POST['password'];


   if($username ==""){
    echo "Please enter your email";
   }
   elseif($password == ""){
    echo "Please enter your password";
   }
   else{

    //connect to database
        require_once('db.php');

        //instantiate the member class
        $member = new member();

        $login_check = $member->check($username,$password,$conn);
        if($login_check == true){
            echo true;

        }
        else{
            echo "Invalid email or password";
          }
         }

         }

            ?>

这是包含 ajax 代码的索引文件

    <?php
     //session_start();
     include('header.php');
     require_once('db.php');
     require('process.php'); 


    ?>
   <html lang="en">
   <head>
    <title>Login/Signup</title>

 </head>
 <body>
    <div class="container">
            <div class="content">
            <div class="form">
                <div id = "message"></div>
                <ul class="tab">
                    <li><a href="">LOGIN</a></li>
                    <li><a href="">SIGNUP</a></li>
                </ul>
                <div class="tab-content">
                    <div class="login-tab">
                        <form   id="login_form" method="post" class="login- 
 form"  >
                            <div class="">
                                <input type="text" id = "username" 
 name="username" class="form-control" placeholder="Enter your Username">
                            </div>
                            <div class="">
                                <input type = "password" id = "password" 
 name="password" class="form-control" placeholder="Enter your Password">
                            </div>
                            <div><button type = "submit" id = "login" 
 name="login" class="btn btn-primary" >login</button></div>
                        </form>
                        <div class="clearfix"></div>
                        <p>Or Login with</p>
                        <ul class="alt-login">
                            <li><a href=""><img src=""></a></li>
                            <li><a href=""><img src=""></a></li>
                            <li><a href=""><img src=""></a></li>
                        </ul>
                    </div>
                    <div class="clearfix"></div>
                    <div class="tab_signup">
                        <form>

                        </form>
                    </div>

                </div>
            </div>
        </div>
    </div>
  </body>


  <script type="text/javascript">
    $( document ).ready(function() {
  $("#login").click(function(e){
    e.preventDefault();


    var username = $("#username").val();

    var password = $("#password").val();



         var data = $("login_form").serialize();



         $.ajax({
        type : "POST",
        url: 'process.php',
        data : data,
        success: function(data){

         if(data==true){
            $("#message").addClass('alert alert-success');
        $("#message").html("Login successful");

        $("#login").html('Redirecting..');

        window.location ="dashboard.php";
         }  
         else{
            //alert(data);
            $("#message").addClass('alert alert-danger');

            $("#message").html('login failed');
             $("#login").html('Failed');
         } 


        },
       error : function(jqXHR,textStatus,errorThrown){
             if(textStatus ='error'){
                alert('Request not completed');
             }
            $("#login").html('Failed');
        },
        beforeSend :function(){

        $("#message").removeClass('alert alert-danger');
        $("#message").html('');

        $("#login").html('Logging in..');
        },
     });


    // }

    });



   });
  </script>
  </html>   

P.S 我现在不关心对密码进行哈希处理,因为我仍在测试中。

最佳答案

您在 Ajax 中使用 GET 方法传递数据,但在 process.php 文件中检索数据时使用 POST 。您需要更改ajax调用代码并应使用post方法。此外,serialize 函数不会附加您需要手动推送的登录输入元素。我已经更新了代码,如下所示:

            $("#login").click(function (e) {
                e.preventDefault();
                var data = $("#login_form").serializeArray();
                data.push({ name: this.name, value: this.id });
                console.log(data);
                $.ajax({
                    type: "POST",
                    url: 'process.php',
                    data: data,
                    success: function (data) {
                        if (data == true) {
                            $("#message").addClass('alert alert-success');
                            $("#message").html("Login successful");
                            $("#login").html('Redirecting..');
                            window.location = "dashboard.php";
                        } else {
                            $("#message").addClass('alert alert-danger');
                            $("#message").html('login failed');
                            $("#login").html('Failed');
                        }
                    },
                    error: function (jqXHR, textStatus, errorThrown) {
                        if (textStatus = 'error') {
                            alert('Request not completed');
                        }
                        $("#login").html('Failed');
                    },
                    beforeSend: function () {

                        $("#message").removeClass('alert alert-danger');
                        $("#message").html('');

                        $("#login").html('Logging in..');
                    },
                });
            });

您可以按原样更新代码,它应该可以正常工作。希望对您有帮助。

关于使用ajax的php-mysql登录系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55210508/

相关文章:

javascript - 将 SQL 表中的值存储到不同的 PHP 数组中

php - Codeigniter ajax使用ajax代码将数据发送到 Controller

php - MySQL DELETE 语句无法识别来自 PHP $id 变量的 empid 数字

mysql - 拉维尔 : generate migrations from 2 MySQL databases

php - 如何使用php web服务获取mysql数据库中的数据

javascript - jquery 对象的 "content"是在创建时立即设置的吗?

javascript - 在表格内单击按钮时jquery背景颜色更改

JavaScript - 获取滚动值并将其转换为动画元素

mysql - 选择没有关系的记录

php - 无法连接 : Access denied for user shout1@localhost (using password:YES) 'Error PHP/MySQL