2013-01-14 6 views
2

mysql을 사용하여 PHP에서 로그인 스크립트를 작업하고 있습니다 (예, 사용되지 않습니다.). 데이터베이스에서 정보를 검색하는 데 문제가 있습니다. 나는 정보를 입력하는 또 다른 스크립트를 가지고 있으며 완벽하게 잘 작동하지만 검색하는 경우 작동하지 않는 것 같습니다.PHP/mysql이 예상대로 검색되지 않습니다.

내가 작동하지 않는다고 말할 때, 데이터베이스에서 정보를 가져 오기 위해 사용하는 검색 기능이 정보를 올바르게 전달하지 못하거나 어쩌면 사용하지 않는 것일 수도 있습니다. 올바르게지나 갔다. 어느 쪽이든 문제는 전자 메일, 암호, 이름 및 성을 포함하는 User 유형의 개체를 검색해야한다는 것입니다.

아래는 모든 작업을 수행하는 PHP 파일의 간략한 버전과 문제가 될 수도 있고 아닐 수도있는 검색 기능입니다. 내가 이걸 실행할 때, 저장된 첫 번째 이름을 표시하는 대신 "First name is"이라는 메시지가 표시됩니다. 지금까지 문제 해결 등

는 :

  • 나는 아래의 경우에는 아무것도 반환하지 않습니다 불구하고 get_firstname() 함수가 작동하는지 확인했습니다.
  • 나는 다른 getter 함수에도 똑같은 것을 확인했다.
  • 검색 기능이 "무언가"를 반환하고 있음을 확인했습니다. 나는 을 테스트하여 사용자 대신 문자열을 반환하고 이 예상대로 반환되고 PHP 파일에서이를 사용할 수있었습니다.
  • 데이터베이스에 이미 저장되어있는 정보를 가지고 있다고 확인했습니다. .
  • 나는 retrieve 함수 에서 똑같은 것을 묻는 쿼리를 실행했고, 내가 원하는 것을 반환했다. 여기

코드입니다 :

<?php 
include_once '/home/Databases/User.php'; 
include_once '/home/Databases/dbUser.php'; 
include_once '/home/Databases/dbInfo.php'; 
connect(); 

$email = mysql_real_escape_string($_GET['email']); 
$password = mysql_real_escape_string($_GET['password']); 
$rememberme = mysql_real_escape_string($_GET['remember']); 

// does this user exist? 
$confirm = retrieve_dbUserByEmail($email); 
$name = $confirm->get_firstname(); 

// if they do exist 
if($confirm != false) { 
    echo "First name is ".$name; 
} 

// if user doesn't exist 
else { 
    header('Location: index.php?login=nonexistant'); 
    exit(); 
} 
?> 

그리고 여기 retrieve_dbUserByEmail 기능입니다 :

function retrieve_dbUserByEmail($email){ 
    connect(); 
    $email = mysql_real_escape_string($email); 
    $query = "SELECT * FROM dbUser WHERE email = '".$email."' LIMIT 1"; 
    $result = mysql_query($query); 
    if ($result==null) { 
     mysql_close(); 
     return false; 
    } 
    $result_row = mysql_fetch_assoc($result); 
    $user = new User($result_row['id'], $result_row['email'], $result_row['password'], $result_row['firstname'],$result_row['lastname']); 
    mysql_close(); 
    return $user; 
} 

이, 함수가 false를 반환하지 않습니다 검색, 요청을받은 몇 가지 질문에 대한 답변을 탈출하기 문자열은 한 번만 오류를 제거하지 않으며 "connect()"함수가 SQL 서버에 성공적으로 연결 (확인 됨)되었음을 나타냅니다. 또한, 유용하다면 (비록 내가 상상할 수는 없지만), 나는 아래에 나의 User 객체 클래스를 배치하고있다.

<?php 
class User { 
    private $id;   // Unique User ID 
    private $email;   // User Email 
    private $password;  // Password 
    private $firstname;  // First Name 
    private $lastname;  // Last Name 

    //Constructor Function 
    function __construct($id, $email, $password, $firstname, $lastname) { 
     $this->id = $id; 
     $this->email = $email; 
     $this->password = $password; 
     $this->firstname = $firstname; 
     $this->lastname = $lastname; 
    } 

    //Getter Functions 
    function get_id() { 
     return $this->id; 
    } 
    function get_email() { 
     return $this->email; 
    } 
    function get_password() { 
     return $this->password; 
    } 
    function get_firstname() { 
     return $this->firstname; 
    } 
    function get_lastname() { 
     return $this->lastname; 
    } 
?> 
+1

이메일 필드를 두 번 이스케이프 처리합니다. 당신은 아마 그것을하고 싶지 않을 것입니다. 이스케이프는 SQL을 어셈블 할 때 수행해야하며 입력 데이터를 위생하지는 않습니다. – staticsan

+0

@staticsan 제안에 감사드립니다, 나는 그것에 대해 궁금해하고있었습니다! 따라서 CRUD 함수 내에서만 이스케이프가 있어야한다고 말하면서 데이터를 가져올 때 반드시 그렇지는 않습니까? –

+0

* 사용자 입력 암호와 데이터베이스에 저장된 암호를 비교할 때 사실입니까? –

답변

1

나는 당신이 당신이 받고 있다고 생각하는 것은 당신이 실제로 얻고있는 것입니다 있는지 확인하려면 바로 new User(...) 전에 print_r($result_row)를 넣어이 디버깅 할 것이다.

또한 retrieve_dbUserByEmail()이 반환 된 후에 다시 print_r($confirm)을 사용하고있을 가능성이 있다고 생각하는지 확인하십시오.

+0

print_r ($ confirm)은 나에게 사용자 개체 ([id : User : 개인] => [전자 메일 : 사용자 : 개인] => [암호 : 사용자 : 개인] => [이름 : 사용자 : 개인] => [성 : 사용자 : 개인]). 그래서 그것이 그것이 User 객체를 얻는 것을 알고있는 동안, 객체는 비어 있거나 비어 있거나 null 인 것처럼 보입니다. –

+1

print_r ($ result_row)는 아무 것도 출력하지 않기 때문에 그 메모에 비어있는 것처럼 보입니다. 혼란스러워. –

0

편집 :

내가 겪고있는 문제의 원인을 파악했습니다. 오류가 내 양식입니다. 여전히 작동하지 않는 이유를 아직 알지 못했지만 어떤 이유로 양식이 제출시 변수를 올바르게 게시하지 않는 것 같습니다. 어쨌든 제 코드를 살펴본 모든 분들께 감사드립니다!

관련 문제