我一直试图自己解决这个问题,但没有成功。以下是我的代码:
checklogin.php
<?php
session_start();
// Connect to db
include('db.php');
$stmt = $conn->prepare('SELECT * FROM users WHERE username = :username AND password = :password');
$stmt->execute(array(':username' => $_POST['username'], ':password' => $_POST['password']));
$result = $stmt->fetch(PDO::FETCH_ASSOC);
$affected_rows = $stmt->rowCount();
//$stmt->setFetchMode(PDO::FETCH_ASSOC);
//$affected_rows = $stmt->fetchColumn();
$username = $_POST['username'];
$password = $_POST['password'];
/*
if($affected_rows == 1) {
/*while($affected_rows = $result){
//add the user to our session variables
$_SESSION['username'] = $username;
if($affected_rows['authority'] == 'admin'){
$_SESSION['authority'] == 'admin';
header("Location: main.php");
exit;
}
if($affected_rows['authority'] == 'doctor'){
$_SESSION['authority'] == 'doctor';
header("Location: pages/doctor/index.php");
exit;
}
if($affected_rows['authority'] == 'nurse'){
$_SESSION['authority'] == 'nurse';
header("Location: pages/nurse/index.php");
exit;
}
}
echo 'OK';
}
else if($username == '' || $password == '' ){
echo 'Blank fields!';
}
else {
print 'access is not allowed !!!';
} // end of $affected_rows
*/
if($affected_rows > 0){
echo "Yes";
}
else{
echo "No";
}
?>
index.php
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.js"></script>
<script language="javascript">
$(document).ready(function(){
$("#loginForm").submit(function(){
$("#report").removeClass().addClass('loader').html('<img src="images/ajax-loader.gif">').fadeIn(1000);
$.post("checklogin.php",{ user_name:$('#username').val(),password:$('#password').val()},function(data){
if(data=='yes'){
$("#report").fadeTo(200,1,function(){
$(this).html('Logging in.....').addClass('log').fadeTo(900,1,function(){
document.location='main.php';
});
});
} else {
$("#report").fadeTo(200,1,function(){
$(this).html('Username or password error.').addClass('error').fadeTo(900,1);
});
}
});
return false;
});
$("#password").blur(function(){
$("#loginForm").trigger('submit');
});
});
</script>
</head>
<body>
<div class="container">
<form class="form-signin" action="checklogin.php" method="post" id="loginForm">
<h2 class="form-signin-heading">User Login</h2>
<input type="text" class="input-block-level" placeholder="Username" name="username" id="username">
<input type="password" class="input-block-level" placeholder="Password" name="password" id="password">
<label class="checkbox">
<input type="checkbox" value="remember-me"> Remember me
</label>
<button class="btn btn-large btn-primary" type="submit" name="login" id="login">Sign in</button>
<div id="report"></div>
</form>
</div> <!-- /container -->
当我输入错误时,它会显示用户名或密码错误,但当我输入正确时,会显示用户名和密码错误。有什么想法吗?谢谢
第一个问题是ajax调用,您正在设置:
user_name:$('#username').val()
应该没有下划线,例如:
username:$('#username').val()
第二个问题是您需要将yes
比较更改为Yes
:
if(data=='Yes'){
"PDOStatement::rowCount()返回受相应PDOStatement对象执行的最后一条DELETE、INSERT或UPDATE语句影响的行数。
如果关联的PDOStatement执行的最后一条SQL语句是SELECT语句,则某些数据库可能会返回该语句返回的行数。然而,并非所有数据库都能保证这种行为,便携式应用程序也不应依赖这种行为。"
如本文所述:http://php.net/manual/de/pdostatement.rowcount.php
我猜这可能是你的错误。
编辑:相反,尝试计数(*)适合的行。
另一种解决方案可能是:https://stackoverflow.com/a/2304377/1386873
我认为您需要更改以下行:
function(data) { if data = 'yes'
至
function(data) { if data = 'Yes'
可能是您必须添加$.trim(),用于在发送到服务器之前修剪数据,例如:
user_name:$.trim($('#username').val())