繁体   English   中英

JavaScript中的登录脚本失败

[英]Login script in javascript failed

我创建基于javascript和PHP的登录脚本。 但是我对此有疑问。

无论我通过表单发送的内容如何,​​都将重定向到user.php?u = loginfailed。 电子邮件和密码(我在数据库中拥有的密码)是否正确无关紧要。 如您所见,只有在正确输入电子邮件和密码后,才应打开页面“ user.php?u = X”。 但是就我而言,当我发送正确的数据和不正确的数据时,它将是相同的...总而言之,正确的数据应将我重定向到user.php?u = X,并且不正确的应在表格下方显示错误消息。

你怎么看待这件事?

的index.php

<?php
if(isset($_POST["e"])){
    include_once("../db/db_fns.php");
    $e = mysqli_real_escape_string($db_conx, $_POST['e']);
    $p = md5($_POST['p']);
    $ip = preg_replace('#[^0-9.]#', '', getenv('REMOTE_ADDR'));
    if($e == "" || $p == ""){
        echo "loginfailed";
        exit();
    } else {
        $sql = "SELECT id, username, password FROM users WHERE email='$e' AND activated='1' LIMIT 1";
        $query = mysqli_query($db_conx, $sql);
        $row = mysqli_fetch_row($query);
        $db_id = $row[0];
        $db_username = $row[1];
        $db_pass_str = $row[2];
        if($p != $db_pass_str){
            echo "loginfailed";
            exit();
        } else {
            $_SESSION['userid'] = $db_id;
            $_SESSION['username'] = $db_username;
            $_SESSION['password'] = $db_pass_str;
            setcookie("id", $db_id, strtotime( '+30 days' ), "/", "", "", TRUE);
            setcookie("user", $db_username, strtotime( '+30 days' ), "/", "", "", TRUE);
            setcookie("pass", $db_pass_str, strtotime( '+30 days' ), "/", "", "", TRUE); 
            $sql = "UPDATE users SET ip='$ip', lastlogin=now() WHERE username='$db_username' LIMIT 1";
            $query = mysqli_query($db_conx, $sql);
            echo $db_username;
            exit();
        }
    }
    exit();
}
?>
<script src="../js/main.js"></script>
<script src="../js/ajax.js"></script>
<script src="login.js"></script>
  <form id="loginform" onsubmit="return false;">
    <div>Email Address:</div>
    <input type="text" id="email" onfocus="emptyElement('status')" maxlength="88">
    <div>Password:</div>
    <input type="password" id="password" onfocus="emptyElement('status')" maxlength="100">
    <br /><br />
    <button id="loginbtn" onclick="login()">Log In</button> 
    <p id="status"></p>
    <a href="#">Forgot Your Password?</a>
  </form>

login.js

function emptyElement(x) {
    _(x).innerHTML = "";
}

function login() {
    var e = _("email").value;
    var p = _("password").value;
    if (e == "" || p == "") {
        _("status").innerHTML = "Fill out all of the form data";
    } else {
        _("loginbtn").style.display = "none";
        _("status").innerHTML = 'please wait ...';
        var ajax = ajaxObj("POST", "index.php");
        ajax.onreadystatechange = function() {
            if(ajaxReturn(ajax) == true) {
                if(ajax.responseText == "loginfailed") {
                    _("status").innerHTML = "Login unsuccessful, please try again.";
                    _("loginbtn").style.display = "block";
                } else {
                    window.location = "user.php?u="+ajax.responseText;
                }
            }
        }
        ajax.send("e="+e+"&p="+p);
    }
}

试试这个:尝试警告ajax.responseText ,看看它是否返回正确的结果而没有错误。 用户还可以在比较响应if(ajax.responseText.trim() == "loginfailed")之前进行trim ,例如: if(ajax.responseText.trim() == "loginfailed")
为什么不使用Jquery,因为它非常简单易用。

我相信您错过了退货,因此无论如何您都在提交表格。 不要忘记让login()函数返回false,因此它不会提交。

尝试<button id="loginbtn" onclick="return login();">Log In</button>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM