2013-10-05 4 views
1

저는 VB 프로그래머, 특히 PHP 환경에서 꽤 새로운 프로그래머입니다.정의되지 않은 변수 : PHP에서

다음은 내가 몇 가지 시도 (의견 있음)를 보았으므로 문제가있는 기능입니다. 나는 이드가 내 다른 시도들과 더 가깝기 때문에 거기에 의견을 남기고 있다고 생각했다. 어디에 문제가

내가 전에 PDO를 사용하지 않고이 기능을 볼 수있는 거의 로그인 할 수있는 사용자 수 적이 없다.

라인 if($temp == $_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(); 
     } 
    } 

답변

3

문제는 여기에 있습니다 :

 $STH->execute(); 

당신이 행을 인출하기 전에 :

 $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; 
     } 

첫째, 당신은 할 필요가있다.

두 번째로 쿼리가 어떤 행과도 일치하지 않으면 while 루프가 본문에 들어 가지 않으므로 $temp은 설정되지 않습니다. 쿼리에서 한 행만 가져올 것으로 예상되므로 while을 사용할 필요가 없습니다. 대신, 수행

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

그 블록 내부에서, 당신은 수행해야합니다 :

if ($temp['password'] == $_POST['password']) 
관련 문제