javascript - 尝试使用 jquery、ajax 和 php 进行登录时不要打开页面

标签 javascript php jquery html ajax

我有一个包含登录表单的文件“index.html”,一个从登录表单获取用户名和密码并重定向到检查数据库登录的文件“connectdb.php”的文件“dash.js”,以及如果成功,则在文件“stock.php”中启动一个 session 。问题是,当我尝试登录时,它重定向到文件“stock.php”,但它再次发送 index.html,不显示页面“stock.php”。密码和用户名正确。我不知道我做错了什么。 这是我的代码。

破折号

$('#btnlogin').click(function() {
    var username = $('#user').val();
    var password = $('#pass').val();
    console.log("passsas qaqiioooo" + username + "- " + password);
    $.ajax({
        type: 'POST',
        url: 'connectdb.php',
        data: {user: username, pass: password},
        success: function(data){
                window.location="stock.php";
        },
        error: function(jqXHR, textStatus, errorThrown){
            alert('deu barraca: ' + textStatus);
        }
    });
});

connectdb.php

<?php

$server = 'localhost';
$user = 'root';
$password = '********';
$database = '***********';

$con = mysqli_connect($server, $user, $password, $database);

if (!$con) {
  die('Nao e possivel conectar a base de dados: ' . mysqli_error($con));
}


if (isset($_POST['user']) && isset($_POST['pass'])) {
      $myusername = $_POST['user'];
    $mypassword = $_POST['pass'];
    $myusername = stripslashes($myusername);
    $mypassword = stripslashes($mypassword);
    $myusername = mysql_real_escape_string($myusername);
    $mypassword = mysql_real_escape_string($mypassword);
    $sql="SELECT * FROM user WHERE username='$myusername' and password='$mypassword'";
    $result=mysqli_query($con,$sql);

    $count=mysqli_num_rows($result);

    // If result matched $myusername and $mypassword, table row must be 1 row
    if($count==1){
        $_SESSION['myusername'] = $myusername;
        $_SESSION['mypassword'] = $mypassword;
    }
    else {
        echo "Wrong Username or Password";
    }
}
?>

股票.php

<?php
session_start();
if(!isset( $_SESSION['myusername'] )){
    header("location:index.html");
}
?>

<html>
<body>
Login Successful
</body>
</html>

抱歉我的英语不好。

最佳答案

我在这里看到的问题是您的 $.ajax success 事件在每种情况下都会被触发。无论您的数据库连接是否失败,您的登录数据都是正确的还是不正确的。 $.ajax 将始终成功地从您的 connectdb.php 获得有效响应。
有不同的方法可以让它发挥作用,这里是我的简单建议:

1. 在您的 connectdb.php 文件中,确保您始终使用 echo 返回一些内容:

// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
    $_SESSION['myusername'] = $myusername;
    $_SESSION['mypassword'] = $mypassword;
    echo "success";
}
else 
{
    echo "login_failed";
}


2. 在您的 $.ajax 函数中检查返回值:

$('#btnlogin').click(function() {
    var username = $('#user').val();
    var password = $('#pass').val();
    console.log("passsas qaqiioooo" + username + "- " + password);
    $.ajax({
        type: 'POST',
        url: 'connectdb.php',
        data: {user: username, pass: password},
        success: function(data){

            //debug the response:
            console.log(data);

            if(data == "success")
            {
                window.location="stock.php";
            }
            else if(data == "login_failed")
            {
                alert("login failed!");
            }
            else
            {
                alert("unknown response: " + data);
            }
        },
        error: function(jqXHR, textStatus, errorThrown){
            alert('deu barraca: ' + textStatus);
        }
    });
});


注意:$.ajaxdataType: "json" 一起使用会更好。但我假设您总体上对 AJAX 还很陌生,所以我的解决方案非常简单。


更新 - 发现另一个问题:

3. 您没有在 connectdb.php 中启动您的 session,因此您的 session vars 永远不会保存到 session :

session_start(); // <-- start the session here
$server = 'localhost';
$user = 'root';
$password = '********';
$database = '***********';
/* 
... 
*/

关于javascript - 尝试使用 jquery、ajax 和 php 进行登录时不要打开页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25710261/

相关文章:

javascript - 使用 jQuery 切换复杂弹出式样式 css 菜单的可见性

javascript - 打印原型(prototype)输出(以编程方式)

javascript - Jquery IE7 ( :"Visible") 验证器不工作

Javascript 将表单发送到 PHP

PHP循环几个月,从12月开始

javascript - 将外部图像拖过时在拖放区(文件输入)中添加类

jQuery 前置方法不适用于输入

javascript - jquery附加按钮单击显示文本然后消失

javascript - 将 JSON 对象附加到加密文本文件 PHP

php - 如何在 PHP 中保护数据库密码?