未定义变量:在PHP中

未定义变量:在PHP中,php,variables,pdo,undefined,Php,Variables,Pdo,Undefined,我是一个相当新的程序员,尤其是在PHP方面,因为我来自VB环境 下面是我遇到麻烦的函数,你可以看到我在评论中尝试了很多次。我想我会把评论留在那里,以防我的其他尝试更接近我 我以前从未使用过PDO,正如您所看到的,该功能几乎允许用户登录 如果$temp=$\u POST['password']这一行就是问题所在。显然$temp没有定义,但我不明白为什么,我甚至在函数的顶部声明了它。有人有什么想法吗 public function load_user_data() { $temp;

我是一个相当新的程序员,尤其是在PHP方面,因为我来自VB环境

下面是我遇到麻烦的函数,你可以看到我在评论中尝试了很多次。我想我会把评论留在那里,以防我的其他尝试更接近我

我以前从未使用过PDO,正如您所看到的,该功能几乎允许用户登录

如果$temp=$\u POST['password']这一行就是问题所在。显然$temp没有定义,但我不明白为什么,我甚至在函数的顶部声明了它。有人有什么想法吗

public function load_user_data() {

        $temp;
        $sql;

        try{

            // $STH = dbHandler::$DBH->prepare("SELECT * FROM tblCustomer WHERE email = :email");
            // $STH->bindValue(':email', $this->email); 
            // $STH->execute();
            // $posts = $STH->fetch(PDO::FETCH_ASSOC); //If only fetch 1 line use just "fetch" instead of "fetchAll"
            // echo '<pre>';
            // print_r($posts);
            // echo '</pre>';

            //--------

            $STH = dbHandler::$DBH->prepare("SELECT password FROM tblCustomer WHERE email = :email");
            $STH->bindValue(':email', $_POST['usermail']); 
            $STH->setFetchMode(PDO::FETCH_ASSOC);

            while($row = $STH->fetch()) {
                $temp = $row;
            }

            //$temp = $STH->fetch(['password']);

            // while($row = $STH->fetch()) {
            //     $temp = $row['password'];
            // }

            //--------

            // $sql = "SELECT password FROM tblCustomer WHERE email = :email";
            // $stmt = $PDO->query($sql); 
            // $row = $stmt->fetchObject();
            // $temp = $row->password;

            if($temp == $_POST['password']) {

                $STH = dbHandler::$DBH->prepare("SELECT * FROM tblCustomer WHERE email = :email");
                $STH->bindValue(':email', $this->email); 
                $STH->setFetchMode(PDO::FETCH_ASSOC);

                echo("we have reached here");

                while($row = $STH->fetch()) {
                    $firstname = $row['firstName'];
                    $lastname = $row['secondName'];
                    $title = $row['title'];
                    $companyname = $row['companyName'];
                    $email = $row['email'];
                    $phone = $row['phone'];
                    $email = $row['mobile'];
                    $startdate = $row['startDate'];
                    $isauthorised = $row['isAuthorised'];
                    $accstop = $row['accStop'];
                    $stopdate = $row['stopdate'];
                }
            }
        }
        catch (PDOException $e) {
            print $e->getMessage();
        }
    }
问题在于:

        $STH->execute();
首先,你需要做:

if ($temp = $STH->execute()) {
    // all the code that depends on finding a row goes here
    ...
}
在您尝试获取行之前

其次,如果查询与任何行都不匹配,那么while循环将永远不会进入主体,因此不会设置$temp。因为您显然只希望从查询中获得一行,所以不需要使用while。相反,要:

if ($temp['password'] == $_POST['password'])
在该区块内,您需要执行以下操作:

if ($temp = $STH->execute()) {
    // all the code that depends on finding a row goes here
    ...
}