php登录脚本没有给出预期的结果,或任何

时间:2012-09-05 01:49:53

标签: 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,但我什么都没得到

有谁能建议我在这里做错了什么?

2 个答案:

答案 0 :(得分:1)

您似乎忘记了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);

        // 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 :(得分:0)

你确定在php.ini中有session.use_cookies = 1吗?

请确保名称是PHPSESSION cookie。