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;
}
?>
이메일 필드를 두 번 이스케이프 처리합니다. 당신은 아마 그것을하고 싶지 않을 것입니다. 이스케이프는 SQL을 어셈블 할 때 수행해야하며 입력 데이터를 위생하지는 않습니다. – staticsan
@staticsan 제안에 감사드립니다, 나는 그것에 대해 궁금해하고있었습니다! 따라서 CRUD 함수 내에서만 이스케이프가 있어야한다고 말하면서 데이터를 가져올 때 반드시 그렇지는 않습니까? –
* 사용자 입력 암호와 데이터베이스에 저장된 암호를 비교할 때 사실입니까? –