2013-07-04 150 views
1

我一直在試圖自己解決這個問題無濟於事。下面是我的代碼:Ajax + PHP登錄腳本不能正常工作

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 --> 

當我輸入了錯誤的,它給了用戶名或密碼錯誤,但是當我輸入正確的它給我用戶名或密碼錯誤。有任何想法嗎?謝謝。

+0

密碼確實是以純文本的形式存儲的,還是應該用它來比較哈希? – MrCode

+0

嗯,我認爲後者,我是一個初學者,所以我不知道如何散列它。 –

回答

2

第一個問題是在Ajax調用,你」重新設定:

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

這應該是不帶下劃線,如:

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

第二個問題是,你需要改變你的yes比較Yes

if(data=='Yes'){ 
+0

你好這個作品老兄,謝謝! –

0

「PDOStatement對象:: rowCount時()返回受上一DELETE,INSERT,或者通過相應的PDOStatement對象執行對象UPDATE語句的行數。

如果由相關PDOStatement對象執行的最後一個SQL語句是SELECT語句中,某些數據庫可能會返回該語句返回的行數,但不能保證所有數據庫的行爲,並且不應該依賴於便攜式應用程序。

如這裏指出: http://php.net/manual/de/pdostatement.rowcount.php

是猜測,這可能是你的錯誤。

編輯:而不是嘗試COUNT(*)行擬合。

另一種解決辦法是: https://stackoverflow.com/a/2304377/1386873

0

我想你需要更改以下行:

function(data) { if data = 'yes' 

function(data) { if data = 'Yes' 
+0

不,它仍然沒有工作.. –

0

可能是你必須添加$ .trim() ,用於在發送到服務器之前修剪您的數據,例如:

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