2017-10-31 8 views
0

암호가 "admin"인 "admin"사용자가 포함 된 데이터베이스가 있습니다. db.php에서 RedBeaNPHP를 연결했습니다. DB : id,user,password,authority. 하지만 암호를 비교할 수는 없습니다. 무슨 일있어? 여기데이터베이스의 암호를 비교할 수 없습니다.

if(empty($errors)) 
    { 
     $user = R::find('users', 'login = ?' , array($data['login'])); 
     if($user) 
      { 
       $password_db = R::find('users', 'password = ?' , 
             array($data['password'])); 
       if($password_db) 
        { 
         echo 5555; 
        } 
      } else 
      { 
       echo 'Wrong password'; 
      } 

HTML 코드 :

<div id="login"> 
    <h1>Auth</h1> 
    <form name='form-login' method="post"> 
     <span class="fontawesome-user"></span> 
     <input type="text" name="user" placeholder="Username"> 
     <span class="fontawesome-lock"></span> 
     <input type="password" name="password" placeholder="Password"> 
     <input type="submit" value="Login" name="do_login"> 
    </form> 
+0

'$ data [ 'password']'에'trim() 사용을 시도하십시오. 문자열에서 공백을 제거합니다. –

+0

구체적으로 잘못 되었습니까? "잘못된 암호"메시지가 나타 납니까? 문제 해결을 수행 했습니까? 오류 메시지가 나타 납니까? '$ data','$ user','$ password_db'의 값은 무엇입니까? – showdev

+0

또한 RedBeanPHP에 익숙하지 않지만 코드 논리를 따르지 않습니다. 특정 사용자 이름을 가진 사용자를 찾은 다음 별도의 쿼리를 수행하여 특정 암호를 가진 사용자를 찾지 만 특정 사용자 이름/암호 쌍을 찾지 않은 것처럼 보입니다. 사용자가 없으면 "암호가 틀립니다"라고 표시됩니다. 암호를 찾지 못하면 아무 일도 일어나지 않습니다. 사용자 이름/비밀번호 쌍을 인증하려고하십니까? – showdev

답변

0

나는 문제가, 당신이 거기에 유효하지 않은 데이터를 전달하는 로그인으로 사용자를 찾는 것입니다 참조하십시오. $ 데이터가 post 데이터를 가질 것이라고 생각하십시오.

$user = R::find('users', 'login = ?' , array($data['user'])); 
+0

'$ data'에 게시 된 데이터가 포함되어 있다는 합리적인 가정하에 이는 가능한 해결책으로 보입니다. – showdev

0

와 Repalce

$user = R::find('users', 'login = ?' , array($data['login'])); 
// $data['login'] is not defined. 

더 결과가없는 경우 "찾기", 빈 배열을 배열을 반환하고 있음을 볼 수 있습니다 당신은 RedBean 문서 (https://redbeanphp.com/index.php?p=/finding)를 읽을 경우. 로그인 목적의 경우 FindOne은 첫 번째 행 또는 null 만 반환합니다. 로그인에 대해 이야기 할 때 코드에서 경제적이지 않습니다. 코드 및 SQL 삽입에 대해 잊지 않고 비교할 수있는 모든 종류의 비교 작업을 수행합니다.