2012-09-05 27 views
1

我有一個用簡單的形式訪問的PHP登錄腳本:PHP登錄腳本不給預期的結果,或任何

<?php 
session_start(); 
try{ 
    $user = 'root'; 
    $pass = null; 
    $pdo = new PDO('mysql:host=localhost; dbname=divebay;', $user, $pass); 

    if(isset($_SESSION['loggedin'])){ 

     echo "1"; //already logged in 
    } 


    else{ 
     $username = $_POST['username']; 
     $password = sha1($_POST['password']); 

     $ucheck = $pdo->prepare('SELECT * FROM user WHERE username = ?'); 
     $ucheck->bindValue(1, $username); 
     $ucheck->execute(); 

     if($ucheck->fetch(PDO::FETCH_OBJ)){ 
      $stmt = $pdo->prepare('SELECT * FROM user WHERE username = ? AND password = ?'); 
      $stmt->bindValue(1, $username); 
      $stmt->bindValue(2, $password); 

      if($stmt->fetch(PDO::FETCH_OBJ)){ 
       $row = $stmt->fetch(PDO::FETCH_ASSOC); 

       $_SESSION['username'] = $row['username']; 
       $_SESSION['loggedin'] = 'YES'; 
       $_SESSION['location'] = $row['location']; 
       echo "2"; //logged in 

      } 
      else{ 
       echo "3"; //password incorrect 
      } 
     } 
     else{ 
      echo "4"; //user does not exist 
     } 

    } 
}catch(PDOException $e){ 
    echo $e->getMessage(); 
} 

?> 

,但是當我嘗試使用我剛剛創建的帳戶來運行它,並有證實存在於數據庫中,我沒有從這個腳本得到任何迴應。我希望它回聲2鑑於登錄信息是正確的,但我什麼也沒得到

任何人都可以提出什麼ive做錯了嗎?

+3

你可以把'error_reporting(E_ALL); ini_set(「display_errors」,1);'在腳本的頂部,看看它是否顯示任何東西? – bretterer

+0

我會把我的錢放在'$ pdo'爲false或null而不是對象:) –

回答

1

看起來你忘了​​聲明:

if($ucheck->fetch(PDO::FETCH_OBJ)){ 
     $stmt = $pdo->prepare('SELECT * FROM user WHERE username = ? AND password = ?'); 
     $stmt->bindValue(1, $username); 
     $stmt->bindValue(2, $password); 

     // Execute it!!! 
     if ($stmt->execute()) { 
      $row = $stmt->fetch(PDO::FETCH_OBJ); 

      if ($row) { 
      // And don't call fetch() again, since you would already have advanced 
      // the record pointer in the first fetch() above. If one record was returned, 
      // this one would always be FALSE. 
      //$row = $stmt->fetch(PDO::FETCH_ASSOC); 

      $_SESSION['username'] = $row['username']; 
      $_SESSION['loggedin'] = 'YES'; 
      $_SESSION['location'] = $row['location']; 
      echo "2"; //logged in 
      } 
      // else execute failed... 
     } 
+1

雖然沒有'execute()'它應該仍然顯示'3',因爲結果是空的。 –

0

你肯定session.use_cookies = 1在php.ini?

請確保名稱是PHPSESSION cookie。