2012-09-05 29 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。