我正在尝试使用 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 模板中包含应用程序 .js 吗?我会在哪里做这个?另外,如果你看看我的 jquery,我会在 DOM 准备好后立即加载表单 - 但在表单提交时......表单应该被删除 - 并且应该加载 login_success.php 。
UPDATE
检查登录.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();
}
?>
UPDATE
我认为我的 javascript 文件没有被加载。我放alert("here")
在 e.preventDefault 之前没有任何反应...我的 application.js 文件的第二行是否搞砸了?为什么没有加载?
我在这里找到了这个 - 这对任何人有帮助吗?
使用 script 标签加载的 JavaScript 文件本质上是阻塞的。下载和执行脚本时,页面上发生或加载的所有事情都会停止。请记住,这适用于每个脚本标签。某些现代浏览器可能允许您并行下载这些内容,但页面的其余部分仍然无法执行任何有意义的操作
UPDATE
I put echo "success"
在 checklogin.php 的 if 块内...像这样(在底部):
...
if($numRows === 1){
$_SESSION['username'] = $myusername;
echo "success";
}
else {
echo "Wrong Username or Password";
session_destroy();
}
?>
但它永远不会到达那里。如果我把它放在 if 语句之前,它会显示回显消息...这意味着在我的数据库中找不到该用户...或类似的东西?
UPDATE
Put var_dump($numRows)
after $numRows = $sql->num_rows;
像这样:
...
$numRows = $sql->num_rows;
var_dump($numRows);
if($numRows === 1){
$_SESSION['username'] = $myusername;
}
...
我得到 int(1) 作为响应...
UPDATE
更改 checklogin.php 中的 if 条件:
if($numRows === "int(1)"){
$_SESSION['username'] = $myusername;
}
else {
echo "Wrong Username or Password";
session_destroy();
}
else 块被执行,我看到“错误的用户名或密码”——正如我应该的那样。
UPDATE
将 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();
});
});
});
});
更正
上面的代码是正确的!我只需要重新启动服务器!谢谢!
UPDATE
发现新问题了,请教:简单的登录系统spa/php/mysql/jquery https://stackoverflow.com/questions/17157901/simple-login-system-spa-php-mysql-jquery