Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jquery、ajax和php登录_Php_Jquery_Ajax - Fatal编程技术网

使用jquery、ajax和php登录

使用jquery、ajax和php登录,php,jquery,ajax,Php,Jquery,Ajax,我正在为学校做一个项目,我在登录时遇到了一些问题,我知道如何用不同的方式来做,但我想学习如何用这种方式来做 我真的不知道它为什么不工作(某些部分可能没有任何逻辑,这就是它不工作的原因),它总是在警报中显示错误消息“无效凭据” 这是我的密码: <html> <head> <meta charset="utf-8"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1

我正在为学校做一个项目,我在登录时遇到了一些问题,我知道如何用不同的方式来做,但我想学习如何用这种方式来做

我真的不知道它为什么不工作(某些部分可能没有任何逻辑,这就是它不工作的原因),它总是在警报中显示错误消息“无效凭据”

这是我的密码:

<html>
<head>
    <meta charset="utf-8">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script type="text/javascript">
        $(document).ready(function() {
            $('#loginform').submit(function(e) {
                e.preventDefault();
                $.ajax({
                    type: "POST",
                    url: 'loginFinal.php',
                    data: $(this).serialize(),
                    success: function(data) {
                        if (data === 'CORRECTO') {
                            window.location = 'index.php';
                        }
                        else {
                            alert('Invalid credentials');
                        }
                    }
                });
            });
        });
    </script>

</head>
<body>
    <form id="loginform" method="post">
        Username: <input type="text" name="username" id="username" value="">

        Password: <input type="password" name="password" id="password" value="">

        <input type="submit" name="loginsub" id="loginsub" value="Login">
    </form>
</body>
</html>

我有使用php和ajax登录的代码,希望能理解我的示例。 在php脚本中,您有 示例:echo'correcto',何时是echo json_编码(数组('error'=>true,'mensaje'=>“usuario o password incorrectos”)

给你:

echo json_encode(array(message => 'CORRECTO'));
你编写了js脚本

success: function(data) {
  if (data.message == 'CORRECTO') {
    window.location = 'index.php';
  }else{
   // other code
  }
}
仅在脚本上创建php,不使用类名。。只有php。当您拥有exist方法登录名时,将创建一个实例来初始化。。 在您的方法中,登录传递参数

$user = $_POST['username'];
$pass = $_POST['password'];

    <?php

    include_once "conexion.php";

     $user = $_POST['username'];
     $pass = $_POST['password'];
     if($_POST){
       $class = new Class();
        if( $class->login($user,$pass))
          echo json_encode(array(message => 'CORRECTO'));
        else
         echo json_encode(array(message => 'ERROR'));
     }

    ?>

// en your class when function
    function Login($user,$pass) {
            $success = false;           
            try {
                $con = new PDO( 'mysql:host=localhost;dbname=MY_DB_NAME', 'MY_USRNAME', 'MY_PSW' );
                $sql = "SELECT * FROM users WHERE username = ".$user." AND password = ".$pass." LIMIT 1";

                $stmt = $con->prepare( $sql );

                $stmt->execute();

                $valid = $stmt->fetchColumn();

                if( $valid ) {
                    $success = true;
                    session_start();
                    session_regenerate_id();
                    $_SESSION['user'] = $_POST['username'];
                    session_write_close();
                    $success = true;
                    exit();
                }
                $con = null;
                return $success;
            }
            catch (PDOException $e) {
                echo $e->getMessage();
                return false;
            }
        }
$user=$\u POST['username'];
$pass=$_POST['password'];
//当你上课的时候
函数登录($user,$pass){
$success=false;
试一试{
$con=newpdo('mysql:host=localhost;dbname=MY_DB_NAME','MY_USRNAME','MY_PSW');
$sql=“从username=“.$user.”和password=“.$pass.”限制1”的用户中选择*;
$stmt=$con->prepare($sql);
$stmt->execute();
$valid=$stmt->fetchColumn();
如果($有效){
$success=true;
会话_start();
会话_重新生成_id();
$\会话['user']=$\发布['username'];
会话写入关闭();
$success=true;
退出();
}
$con=null;
返回$success;
}
捕获(PDO$e){
echo$e->getMessage();
返回false;
}
}
我希望能帮助您

您是否可以执行var\u dump($\u请求)以查看您向服务器发送了什么

(我认为当您单击提交按钮时,页面会刷新?)

更新:

   function Login() {
            $success = false;           
            try {
                $con = new PDO( 'mysql:host=localhost;dbname=MY_DB_NAME', 'MY_USRNAME', 'MY_PSW' );
                $sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";

                $stmt = $con->prepare( $sql );

                $stmt->execute(array(':username'=>$_POST['username'], ':password'=>$_POST['password']));

                $valid = $stmt->fetchColumn();

                if( $valid ) {
                    $success = true;
                    session_start();
                    session_regenerate_id();
                    $_SESSION['user'] = $_POST['username'];
                    session_write_close();
                    echo ('CORRECTO');
                    exit();
                }

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

 Login();
1-更改“提交到”按钮:

<input type="button" name="loginsub" id="loginsub" value="Login">

使下面的代码使用准备好的语句。你的ajax看起来不错。下面的函数不是

更新代码:

   function Login() {
            $success = false;           
            try {
                $con = new PDO( 'mysql:host=localhost;dbname=MY_DB_NAME', 'MY_USRNAME', 'MY_PSW' );
                $sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";

                $stmt = $con->prepare( $sql );

                $stmt->execute(array(':username'=>$_POST['username'], ':password'=>$_POST['password']));

                $valid = $stmt->fetchColumn();

                if( $valid ) {
                    $success = true;
                    session_start();
                    session_regenerate_id();
                    $_SESSION['user'] = $_POST['username'];
                    session_write_close();
                    echo ('CORRECTO');
                    exit();
                }

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

 Login();

^并且必须执行函数才能发送响应。

您的脚本非常开放,甚至可以在
MYSQLI\uquot/code>或
PDO
API'中使用。您在哪里调用函数Login(),我不知道怎么做,或者整个文件loginFinal.php在哪里?请不要存储明文密码:(感谢您的回答,但您的更改始终会得到无效的凭据。我现在有以下内容:type:“POST”,url:'loginFinal.php',dataType:'json',data:$(this.serialize(),success:function(data){if(data.message='CORRECTO'){window.location='index.php';}else{alert}(“not correct”);}}}现在不能按“Login”按钮how call you method Login()?where and how??在php文件的顶部,只需输入以下代码即可查看ajax发送到php文件的内容:var_dump($_REQUEST);exit;在控制台中(使用inspect元素>控制台),您将看到Callye i始终打开控制台,但我没有收到响应。将粘贴的ur代码复制到php文件顶部,但复制到“你是否在控制台中看到ajax调用?仍然总是获得无效凭据,我认为问题在于我从未进入function登录,因为我在函数的第一行中放置了一个警报,但它从未出现,我是否应该在某个地方调用它?因为如果我删除“function Login(){”行和带括号的结束符,我会得到一个警告“http 500错误,服务器内部错误”是的。您需要在某个地方调用
Login()
函数才能使代码按要求工作。请确保只有
Login()
函数输出某些内容。PHP代码:另一个代码:已工作!谢谢!删除de”函数Login()也可以工作{“线路和收尾支架坏了,不知道为什么昨天不工作,因为我已经试过了。谢谢你的帮助!
   function Login() {
            $success = false;           
            try {
                $con = new PDO( 'mysql:host=localhost;dbname=MY_DB_NAME', 'MY_USRNAME', 'MY_PSW' );
                $sql = "SELECT * FROM users WHERE username = :username AND password = :password LIMIT 1";

                $stmt = $con->prepare( $sql );

                $stmt->execute(array(':username'=>$_POST['username'], ':password'=>$_POST['password']));

                $valid = $stmt->fetchColumn();

                if( $valid ) {
                    $success = true;
                    session_start();
                    session_regenerate_id();
                    $_SESSION['user'] = $_POST['username'];
                    session_write_close();
                    echo ('CORRECTO');
                    exit();
                }

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

 Login();