2010-04-13 6 views
1

Ok 그래서 나는 PHP5와 mysqli를 사용하여 로그인 스크립트를 만들려고 노력하고 있는데, 나는 당신이 왜 그저 "오류를 반환하는 이유를 알려주는지 물어볼 것입니다 : 귀하의 사용자 이름과 비밀번호가 db "? 나는 그 계좌를 만들었을 때 분명히 그럴 수 있습니까? 아마 내가 놓친 것이 분명 할 것입니다. Heres는 코드 ...도움말 PHP 로그인이 제대로 작동하지 않습니까?

// 양식이

를 제출 한 경우 확인 (는 isset ($ _ POST [ '로그인'])) {

//Check if username and password are empty 
if ($_POST['username']!='' && $_POST['password']!='') 
{  
    //Create query to check username and password to database 
    $validate_user = $mysqli->query('SELECT id, username, password, active FROM users WHERE ="'.$mysqli->real_escape_string(md5($_POST['username'])).' AND password = "'.$mysqli->real_escape_string(md5($_POST['password'])).'"'); 

    //We check if the query returns true 
    if ($validate_user->num_rows == 1) 
    { 
     $row = $validate_user->fetch_assoc(); 

     //Check if the user has activated there account 
     if ($row['activated'] == 1) 
     { 
      $_SESSION['id'] = $row['id']; 
      $_SESSION['logged_in'] = true; 
      Header('Location: ../main/index.php'); 
     } 
     //Show this error if activation returns as 0 
     else { 
      $error = '<p class="error">Please activate your account.</p>'; 
     } 
    } 
     //Show this error if the details matched any in the db 
     else {  
      $error = '<p class="error">Your username and password are not in our database!</p>';   
     } 
    } 
     //Show this error if the username and password field have not been entered 
     else { 
      $error = '<p class="error">Please enter your username and password.</p>'; 
     } 

}

+0

어떤 형식으로 데이터베이스에 암호를 보관합니까? 사용자 이름과 암호 md5 해쉬 모두 유지 하시겠습니까? 그게 당신 스크립트가 기대하는 것이기 때문이죠. – jayarjo

+0

아니요, 내가 당신을 잡을 수 없습니다. 하 바보, 고마워, 나는 DB에서 사용자 이름을 해시하지 않고 여기에서 시도하기 때문에 그럴 것 같아. –

+0

흠 나는 사용자 이름 쿼리에서 "md5()"를 제거하여 문제를 해결 한 것 같지만 여전히 같은 오류가 발생했습니다 ... –

답변

3

경우 귀하의 질의는 다음과 같이 보입니다 :

SELECT ID, 사용자 이름, 암호, 활성 FROM 사용자 where "= '. md5().' 및 암호 = " '.md5 (< 비밀번호 >).'" ')

나는 그것이 있어야 확신 :

SELECT ID, 사용자 이름, 암호, 활성 사용자 FROM WHERE 이름 = "'. < 사용자 이름 >. ' 및 암호 = " '.md5 (< 비밀번호 >은).'" ')

+0

완벽! 그것은 바보 같은 실수, 미안해, 감사합니다 :) –

2

은 행은 아마

$validate_user = $mysqli->query('SELECT id, username, password, active FROM users WHERE ="'.$mysqli->real_escape_string(md5($_POST['username'])).' AND password = "'.$mysqli->real_escape_string(md5($_POST['password'])).'"'); 

은 다음과 같아야합니다

$validate_user = $mysqli->query('SELECT id, username, password, active FROM users WHERE username ="'.$mysqli->real_escape_string(md5($_POST['username'])).' AND password = "'.$mysqli->real_escape_string(md5($_POST['password'])).'"'); 
+0

멋진 잡기 친구 – nik

2

이 쿼리는 "사용자 이름을 포함하지 않는 = "WHERE 절 뒤에 있으므로 다음과 같아야합니다.

$mysqli->query('SELECT id, username, password, active FROM users WHERE username ="'.$mysqli->real_escape_string(md5($_POST['username'])).' AND password = "'.$mysqli->real_escape_string(md5($_POST['password'])).'"'); 
+0

감사합니다 너 이것을 밖으로 롤 –

관련 문제