1

我正在尝试使用 php/mysql/jquery 实现一个简单的登录系统。我希望它是一个单页应用程序,所以我的“index.php”有这个:

<?php session_start(); ?>

<!DOCTYPE html>
<html>
<head>
<title>it IT</title>
<script src="reqscripts/jquery.js" type="text/javascript"></script>
<script src="js/application.js" type="text/javascript"></script>
</head>
<body>
    <div id="main"></div>
</body>
</html>

我的 jquery 有这个:

js/application.js

$(document).ready(function() {
    $("#main").load("templates/indexforms.php");

    $("#login").submit(function(e) {
        e.preventDefault();
        $.post("checklogin.php", $(this).serialize(), function(){
            $("#main").load("templates/login_success.php");
            $("#login").remove();
            $("#register").remove();
        });
    });
});

这个表单被加载(templates/indexforms.php):

<?php session_start(); ?>

<form id="login" method="post" action="checklogin.php">
    <h1>Member Login</h1>
    <p>Username:<input name="myusername" type="text" id="myusername"></p>
    <p>Password:<input name="mypassword" type="password" id="mypassword"></p>
    <input type="submit" name="Submit" value="Login">
</form>

现在,当我尝试登录时 - 它卡住了localhost/~Eamon/checklogin.php(其中没有任何 html)并且呈现了一个完全空白的页面(根本没有源代码)。我需要在我的 indexforms.php 模板中包含 application .js 吗?我会在哪里做这个?此外,如果您查看我的 jquery,我会在 DOM 准备好后立即加载表单 - 但在提交表单时......应该删除表单 - 并且应该加载 login_success.php。

更新

检查登录.php

<?php

session_start();

$host="localhost"; // Host name
$username="xxx"; // Mysql username
$password="xxx"; // Mysql password
$db_name="itit"; // Database name
$tbl_name="members"; // Table name

// Connect to server and select databse.
$mysqli = new mysqli("$host", "$username", "$password", "$db_name")or die("cannot connect");

// Define $myusername and $mypassword
$myusername=$_POST['myusername'];
$mypassword=$_POST['mypassword'];

$sql = $mysqli->prepare("SELECT * FROM $tbl_name WHERE username=? and password=?");
$sql->bind_param('ss',$myusername,$mypassword);
$sql->execute();
$sql->store_result();//apply to prepare statement
$numRows = $sql->num_rows;

if($numRows === 1){
    $_SESSION['username'] = $myusername;
}
else {
    echo "Wrong Username or Password";
    session_destroy();
}
?>

更新

我不认为我的 javascript 文件正在加载。我把alert("here")e.preventDefault 放在前面,什么也没发生……我的 application.js 文件的第二行是不是搞砸了?为什么加载不出来?

我在这里找到了这个 - 这对任何人都有帮助吗?

使用 script 标签加载的 JavaScript 文件本质上是阻塞的。在下载和执行脚本时,页面上发生或加载的所有内容都会停止。请记住,这适用于每个脚本标签。一些现代浏览器可能会让你并行下载这些,但页面的其余部分仍然被阻止做任何有意义的事情

更新

我把echo "success"checklogin.php 的 if 块放在里面......像这样(在底部):

...

if($numRows === 1){
    $_SESSION['username'] = $myusername;
    echo "success";
}
else {
    echo "Wrong Username or Password";
    session_destroy();
}
?>

它永远不会到达那里。如果我把它放在 if 语句之前,它会显示回显消息......这意味着在我的数据库中找不到用户......或类似的东西?

更新

像这样放在var_dump($numRows)后面$numRows = $sql->num_rows;

...

$numRows = $sql->num_rows;
var_dump($numRows);

if($numRows === 1){
    $_SESSION['username'] = $myusername;
}
...

我得到 int(1) 作为响应...

更新

更改 checklogin.php 中的 if 条件:

if($numRows === "int(1)"){
    $_SESSION['username'] = $myusername;
}
else {
    echo "Wrong Username or Password";
    session_destroy();
}

else 块被执行,我看到“错误的用户名或密码”——正如我应该看到的那样。

更新

将 jquery 代码更改为此...仍然没有运气:

$(document).ready(function() {
    $("#main").load("templates/indexforms.php", function () {
        $("#login").submit(function(e) {
            e.preventDefault();
            $.post("checklogin.php", $(this).serialize(), function() {
                $("#main").load("templates/login_success.php");
                $("#login").remove();
                $("#register").remove();
            });
        });
    });
});

更正

上面的代码是正确的!我只需要重新启动服务器!谢谢!

更新

发现一个新问题,给你:简单的登录系统 spa/php/mysql/jquery

4

1 回答 1

1

尝试将 JavaScript 更改为:

$(document).ready(function()
{

  $("#main").load("templates/indexforms.php", function ()
  {

    $("#login").submit(function(e)
    {

      e.preventDefault();

      $.post("checklogin.php", $(this).serialize(), function()
      {
        $("#main").load("templates/login_success.php");
        $("#login").remove();
        $("#register").remove();
      });

    }
    )

  }
  )

}
)

请注意,脚本在添加提交事件之前等待直到indexforms.php加载(此时它正在尝试(几乎)同时执行此操作,因此在有任何元素之前运行)。#main#login$("#login").submit(...#login

于 2013-06-17T21:44:23.833 回答