2013-09-10 3 views
0

Прежде всего. Я знаю, что bcrypt - лучшая альтернатива, и у меня есть версия кода, у которой есть bcrypt, это просто godaddy, не поддерживает bcrypt. Поэтому я должен придерживаться этой версии на данный момент.Обновление пароля в базе данных

Так что я пытаюсь иметь форму, которая обновляет/изменяет пароль пользователя. Конечно, это не обновление.

код разделен на части формы:

<?php 
      if(empty($_POST) === false) { 

       if(empty($_POST['current_password']) || empty($_POST['password']) || empty($_POST['password_again'])){ 

        $errors[] = 'All fields are required'; 

       }else if($bcrypt->verify($_POST['current_password'], $user['password']) === true) { 

        if (trim($_POST['password']) != trim($_POST['password_again'])) { 
         $errors[] = 'Your new passwords do not match'; 
        } else if (strlen($_POST['password']) < 6) { 
         $errors[] = 'Your password must be at least 6 characters'; 
        } else if (strlen($_POST['password']) >18){ 
         $errors[] = 'Your password cannot be more than 18 characters long'; 
        } 

       } else { 
        $errors[] = 'Your current password is incorrect'; 
       } 
      } 

      if (isset($_GET['success']) === true && empty ($_GET['success']) === true) { 
       echo '<p>Your password has been changed!</p>'; 
      } else {?> 
      <h1>Change Password</h1> 
      <fieldset> 
      <legend>Log In</legend> 
       <?php 
       if (empty($_POST) === false && empty($errors) === true) { 
        $users->change_password($user['id'], $_POST['password']); 
        header('Location: change-password.php?success'); 
       } else if (empty ($errors) === false) { 

        echo '<p>' . implode('</p><p>', $errors) . '</p>'; 

       } 
       ?> 
       <form action="" method="post"> 
        <table border="0"> 
        <tr> 
        <td width="200"> 
        Current password: 
        </td> 
        <td> 
        <input type="password" name="current_password"> 
        </td> 
        </tr> 
        <tr> 
        <td> 
        New password: 
        </td> 
        <td> 
        <input type="password" name="password"> 
        </td> 
        </tr> 
        <tr> 
        <td> 
        New password again: 
        </td> 
        <td> 
        <input type="password" name="password_again"> 
        </tr> 
        </table> 
        <br> 
        <input type="submit" value="Change password"> 

       </form> 
      <?php 
      } 
      ?> 
      </fieldset> 

и код PHP:

public function change_password($user_id, $password) { 

     //global $bcrypt; 

     /* Two create a Hash you do */ 
     $timeNew  = time(); 
     $email_codeNew = hash("sha256", $username + microtime()); 
     $password_hash = hash("sha256", $password); 

     $query = $this->db->prepare("UPDATE `users` SET `password` = ?, `email_code` = ?, `time` = ? WHERE `id` = ?"); 

     $query->bindValue(1, $password_hash); 
     $query->bindValue(2, $email_codeNew); 
     $query->bindValue(3, $timeNew); 
     $query->bindValue(4, $user_id);    

     try{ 
      $query->execute(); 
      return true; 
     } catch(PDOException $e){ 
      die($e->getMessage()); 
     } 

    } 
+2

Что происходит вместо этого? Есть ли выход из браузера? Вы проверили, чтобы убедиться, что все, что вы думаете, существует? – DiMono

+1

Вы определили, что предполагаемая строка в базе данных не обновляется, но что делает * делает код? Есть ли сообщение об ошибке? Что-нибудь в ваших журналах? Когда вы его отлаживаете, в какой момент это происходит? Каковы соответствующие значения времени выполнения, когда это происходит? – David

+0

Вывод Браузера пустой, а не ошибки или успех. Он показывает пробел. – patgarci

ответ

0

Я высмеивал на страницу PHP, которая делает это - она ​​также была протестирована и работает и я бы предположил, что это может быть из-за того, как вы использовали === alot в своих функциях, и я не уверен в возврате этих функций, поскольку их нет здесь, но, надеюсь, если вы запустите приведенный ниже код, вы можете добавить и настроить код, который у вас есть,

EDIT Для тестирования текущего пароля всегда пароль и функция пароля пароля всегда будет проходить.

<?php 

/** 
* @author - Sephedo 
* @for - patgarci @ Stackoverflow 
* @question - http://stackoverflow.com/questions/18728434/updating-the-password-in-the-database 
*/ 

function verifyPassword($password) 
{ 
    return ($password == 'password')? true : false; 
} 

function changePassword($password) 
{ 
    return true; 
} 

if(! empty($_POST)) 
{ 
    // check if all of the fields exists and are not empty 
    if(empty($_POST['current_password']) or empty($_POST['password_new']) or empty($_POST['password_again'])) 
    { 
     $errors[] = "All fields are required"; 
    } 
    elseif(verifyPassword($_POST['current_password'])) // check if the password is valid. 
    { 
     $_POST['password_new'] = trim($_POST['password_new']); 
     $_POST['password_again'] = trim($_POST['password_again']); 

     // check for matching password 
     if($_POST['password_new'] != $_POST['password_again']) $errors[] = "Your passwords do not match"; 

     // check for min limit 
     if(strlen($_POST['password_new']) < 6) $errors[] = "Your new password needs to be at least 6 characters"; 

     // check for min limit 
     if(strlen($_POST['password_new']) > 18) $errors[] = "Your new password needs to be at less than 18 characters"; 

     // Make sure no errors have occured and change password returns true 
     if(! isset($errors) and ! changePassword($_POST['password_new'])) 
     { 
      $errors[] = "An unknown error has occured, please try again"; 
     } 
    } 
    else 
    { 
     $errors[] = "Your current password is invalid"; 
    } 

    // DISPLAY ERRORS 
    if(! isset($errors)) 
    { 
     echo "<span>Your password has been changed!</span>"; 
    } 
    else 
    { 
     foreach((array) $errors as $error) 
     { 
      echo "<span>$error</span><br />"; 
     } 
    } 
} 

?> 

<form method="POST" > 
<fieldset> 
<legend>Change Password</legend> 
<label for="current_password">Current Password</label> <input type="password" name="current_password" /> 
<label for="password_new">New Password</label> <input type="password" name="password_new" /> 
<label for="password_again">Current Password</label> <input type="password" name="password_again" /> 
<input type="submit" value="Save Changes" /> 
</fieldset> 
</form> 
Смежные вопросы