2016-04-24 4 views
-1

[SOLVED]что не так, я делаю в своём пароле пароля и пароль, который не проверяет пароль_varify?

Я делаю пароль хэшированным, когда пользователь регистрируется. это знак вверх форма:

  <form action="" method="post"> 
      <div class="form-group"> 
       <label for="username">username</label> 
       <input type="text" name="username" class="form-control">        
      </div> 
      <div class="form-group"> 
       <label for="password">password</label> 
       <input type="password" class="form-control" name="password">        
      </div>  
      <input type="submit" class="btn-default btn-primary" name="submit" value="submit"> 
     </form> 

это вставка в код дб запроса:

  //insert password into database 
      function insert_password(){ 

       global $connection; 
       $username = $_POST['username']; 
       $password = hash_password(); 
       //$username = $username; 
       //echo $hash_password; 
       //$password = $_POST['password'] 
       $query = "INSERT INTO hash_password(password,username) " ; 
       $query .= "VALUE ('{$password}','{$username}')" ; 
       $insert_password_query = mysqli_query($connection, $query); 
       error_check($insert_password_query); 
       echo 'password inserted into database'; 
      } 

хэш пароля функции:

   // hash password 
      function hash_password(){ 
       $password = $_POST['password']; 
       $hash_password = password_hash($password, PASSWORD_DEFAULT)."\n"; 
       //echo $hash_password; 
       return $hash_password; 
      } 

при входе в систему я использую код:

    if(isset($_POST['match_hashed_password_button'])) 
      { 
       $username = $_POST['match_username']; 
       $password = $_POST['match_hashed_password']; 
       $query = "SELECT * FROM hash_password WHERE username = '$username'"; 
       $select_username_query = mysqli_query($connection, $query); 
       error_check($select_username_query); 
       if(mysqli_num_rows($select_username_query)>0) 
       { 
        while ($row = mysqli_fetch_assoc($select_username_query)) 
        { 
         $db_username = $row['username']; 
         $db_password = $row['password']; 
        } 
        if(password_verify($password, $db_password)) 
        { 
         echo 'pass'; 
        } 

        else 
        { 
         echo 'fail'; 
        } 
       } 
      } 

ошибка проверка функция

  // error check 
      function error_check($result){ 
       global $connection; 
       if(!$result) 
        { 
         die("Query error " . mysqli_error($connection)); 
        } 
      } 

но он всегда возвращает сбой, если я ввожу правильные пароли. Я не понимаю, что я делаю неправильно. Пожалуйста, помогите мне.

С уважением Shayla

+0

Убедитесь, что ваше поле db для паролей имеет тип 'varchar (255)', поэтому оно может содержать весь хэш, и имейте в виду, что ваша процедура вставки может вставлять дубликаты пользователей с тем же именем. – martinstoeckli

+0

shalyala, пожалуйста, НЕ редактируйте ответы других людей, чтобы поблагодарить их. Вы уже благодарите их достаточно, повышая и принимая, как и вы. Редактирование ответа необходимо сохранить для обновления форматирования, удаления конфиденциальных данных или добавления новых сведений, которые добавляют или улучшают ответ. если вы принимаете и повышаете, вы даете им бонусную репутацию, которая намного полезнее, чем одно редактирование слова. – Nzall

ответ

3

Вы должны удалить ."\n" это слово из вашего hash_password функции. Вы вводите свой хэш-пароль, включая этот символ. поэтому ваш пароль не может совпадать с вашим хэш-кодом базы данных. просто удалите этот символ и запустите проект. он работает хорошо. enter image description here