使用javascript和php登录帐户时无法重定向

使用javascript和php登录帐户时无法重定向,javascript,php,Javascript,Php,目前,我正在开发一个网站,为我自己的目的。我是一个网络开发的初学者,所以请理解我,如果我没有得到这个正确的。请帮忙 单击html元素按钮 用于登录。见下面的代码: $(document).ready(function(){ $("#login").click(function(){ var username = document.getElementById("username").value; var pword = document.getElemen

目前,我正在开发一个网站,为我自己的目的。我是一个网络开发的初学者,所以请理解我,如果我没有得到这个正确的。请帮忙

单击html元素
按钮
用于登录。见下面的代码:

$(document).ready(function(){
    $("#login").click(function(){
        var username = document.getElementById("username").value;
        var pword = document.getElementById("password").value;          
        validateUser(username,pword);
    });
});


function validateUser(user,pass){
    var username =user;
    var pword =pass;
    var datasend = "username="+ username + "&password=" + pword;

    $.ajax({
        type:'POST',
        url:'../bench/php/login.php',
        data:datasend,
        crossDomain: true,
        cache:false,
        success:function(msg){
            alert("Hello World"); //Trying to pop up
            $('#username').val('');
            $('#pword').val('');
        }
    });
}
我第二次尝试单击按钮时成功触发了该按钮,将弹出
hello world
消息,但如果该页面使用WAMP服务器中MySQL中的帐户成功登录,则无法重定向该页面。以下是PHP中的代码:

<?php
// require("php/config.php");
include("config.php");
session_start();

if($_POST['username'] != '' && $_POST['password'] !='') {
    // username and password sent from form 
    echo $myusername = mysqli_real_escape_string($db,$_POST['username']);
    echo $mypassword = mysqli_real_escape_string($db,$_POST['password']); 

    //$sql = "SELECT user_id  FROM user WHERE username = '$myusername' and password = '$mypassword'";
    $sql = "SELECT * FROM user WHERE username = '$myusername' and password = '$mypassword'";
    $result = mysqli_query($db,$sql);
    $rows = mysqli_fetch_array($result);
    $count = mysqli_num_rows($result);

    // If result matched $myusername and $mypassword, table row must be 1 row
    if($count == 1) {
        session_regenerate_id();
        $_SESSION['login_user'] = $myusername; 
        header("Location: index.html");

    } else {
        echo '<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>';
        echo '<script type="text/javascript">';
        echo 'setTimeout(function () { swal("Oops!","Your Account Credentials is Invalid, Please Try Again!","error");';
        echo '}, 100);</script>';
    }
}
?>

问题是,即使第二次单击触发了
HELLO WORLD
警报,页面也不会重定向到
index.html

我不知道我做错了什么

我不知道为什么这不工作,我看到控制台,没有错误存在


有人能帮我吗?任何帮助都将不胜感激。感谢和问候。

ajax请求不会在响应的位置头之后重定向用户。
您需要在success回调中使用JS手动重定向用户,或者将表单提交更改为使用

,如果您想继续使用目前的AJAX设置(这很好),您需要做的是增强on success函数以读取PHP返回的结果

一个简单的例子

而不是

标题(“位置:index.html”)

echo“index.html”;
退出

然后将以下内容添加到on success功能中:

window.location.href=msg

这将开始让您了解AJAX调用和PHP服务器之间的关系

下一步

  • 不要让AJAX返回字符串(
    index.html
    ),而是使用它 返回一个信息数组,也许你想欢迎用户 有个人信息吗
  • 您不需要创建字符串(
    var datasend=“username=“+username+”&password=“+pword;”
    )并将其提供给AJAX调用,您可以发送一个数组
  • 确保您的密码未以明文形式存储在服务器上

  • 首先要确保的是,在发送Ajax请求时,PHP重定向头不起作用。 因此,您的问题的解决方案是:

    在PHP文件中更改这部分代码:

    header("Location: index.html");
    
    进入:

    然后在Ajax请求成功回调中:

    success:function(msg){
        if (msg == 'Success') {
            window.location = "/path/to/redirect";
        }
    }
    

    如果您对此仍有疑问,请告诉我。

    切勿以明文形式存储密码!。只存储密码哈希!使用PHP的和。如果您运行的PHP版本低于5.5(我真的希望您不是),那么可以使用获得相同的功能。首先,你有一个答案来解释为什么用户没有被重定向。但是,即使您正常发布表单(而不是使用ajax),您仍然会遇到问题。出于某种原因,您在转义用户名和密码时会回显它们。如果这样做,您将无法在之后使用
    header()
    ,因为在任何输出之前都需要发送头。仅使用php更安全吗,先生?@BooLaTeh,不,AJAX和其他任何东西一样“安全”。帖子就是帖子。无论是否使用Ajax,都没有区别。然而,使用Ajax通常会带来更好的用户体验,因为页面不需要在出错时重新加载。您好,先生!我可以问一个问题吗?我的php代码有一个错误,它说,未定义索引。哪一个是用户名和密码,如何修复??我已经看到了解决方案,
    isset
    但它不起作用,先生,我现在有了。顺便说一下,谢谢!
    success:function(msg){
        if (msg == 'Success') {
            window.location = "/path/to/redirect";
        }
    }