1

我一直在尝试自己解决问题,但无济于事。下面是我的代码:

检查登录.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";
    }

 ?>

索引.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 -->

当我输入错误时,它会给出用户名或密码错误,但是当我输入正确时,它会给出用户名或密码错误。有任何想法吗?谢谢。

4

4 回答 4

2

第一个问题是在 ajax 调用中,您正在设置:

user_name:$('#username').val()

那应该没有下划线,例如:

username:$('#username').val()

第二个问题是您需要将yes比较更改为Yes

if(data=='Yes'){ 
于 2013-07-04T18:36:11.863 回答
0

"PDOStatement::rowCount() 返回受相应 PDOStatement 对象执行的最后一个 DELETE、INSERT 或 UPDATE 语句影响的行数。

如果关联 PDOStatement 执行的最后一条 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。然而,这种行为并不能保证适用于所有数据库,并且不应依赖于可移植应用程序。”

如此处所述:http: //php.net/manual/de/pdostatement.rowcount.php

猜猜这可能是你的错误。

编辑:而是尝试 COUNT(*) 适合的行。

另一种解决方案可能是: https ://stackoverflow.com/a/2304377/1386873

于 2013-07-04T18:27:08.270 回答
0

我认为您需要更改以下行:

function(data) { if data = 'yes' 

function(data) { if data = 'Yes' 
于 2013-07-04T18:30:21.520 回答
0

可能您必须添加 $.trim(),以便在发送到服务器之前修剪您的数据,例如:

用户名:$.trim($('#username').val())

于 2013-07-04T20:01:16.227 回答