Скрипт за смяна на парола

vinsbg

Registered
Здравейте,

опитвам се един елементарен скрипт за смяна на парола да си направя, но нещо не сработва. Няма грешки, няма нищо... не записва/променя нищо в базата.
Това е самия скрипт
Код:
    if(empty($_SESSION['id'])) 
    { 
        header("Location: userAction.php"); 
        die("Redirecting to userAction.php"); 
    } 
    if(isset($_POST['submit']))
    {

	//basic validation
	if(strlen($_POST['password']) < 3){
		$error[] = 'Паролата е прекалено къса.';
	}

	if(strlen($_POST['passwordConfirm']) < 3){
		$error[] = 'Втората парола е прекалено къса.';
	}

	if($_POST['password'] != $_POST['passwordConfirm']){
		$error[] = 'Паролите не съвпадат.';
	}

	if(!isset($error))
	{
		$hashedpassword = $user->password_hash($_POST['password'], PASSWORD_BCRYPT);

		try {

			$stmt = $pdo->prepare("UPDATE users SET password = :hashedpassword WHERE id = :user_id");
			$stmt->execute(array(
				':hashedpassword' => $hashedpassword,
				':user_id' => $_SESSION['id']
			));
			header('Location: userAction.php?action=resetAccount');
			exit;

		//else catch the exception and show the error.
		} catch(PDOException $e) {
		    $error[] = $e->getMessage();
		}

	}
     }
а това е формата
Код:
 <form action="editAccount.php" method="post"> 
<div class="col-sm-5">
	<div class="input-group">
		<span class="input-group-addon">Email:</span>
			<input type="text" class="form-control" placeholder="'.$row['email'].'">
	 </div>
	 <div class="input-group">
	        <span class="input-group-addon">Парола:</span>
	                 <input type="password" name="password" class="form-control" placeholder="парола">
	 </div>
     	         <button class="btn btn-primary custom-button btn-block" type="submit"><i class="fa fa-check"></i> Запази</button>
	  </div>                            
          <div class="col-sm-5">
                <div class="input-group">
                        <span class="input-group-addon">Потребител:</span>
                              <input type="text" class="form-control" name="username" placeholder="'.$row['username'].'" disabled>
                </div>
                 <div class="input-group">
	                 <span class="input-group-addon">Повтори паролата:</span>
	                       <input type="password" name="passwordConfirm" class="form-control" placeholder="Парола">
	         </div>			                                
	  </div>			                            
     </div>			                        
</form>
Някакви идеи какъв може да е проблема?
 
if(!isset($error))...

Функциите isset() и empty() проверяват различни неща. Съдейки по фрагмента ти, масива за грешките е деклариран, а проверката по-долу трябва да бъде дали масива е праен, а не дали съществува...
 
Добре .. смених го на - if(!$error) ...

Другото, което проверих е с var_dump($hashedpassword); връща - NULL

var_dump($_POST['password'] - връща паролата.
 
Ем явно проблема ти е в този обект $user - или нямаш инстанция, или реализацията на метода нещо не е сработила. Ако си на PHP 5.5+ - ползвай директно функциите на PHP

PHP:
$hashedpassword = password_hash($_POST['password'], PASSWORD_BCRYPT);
 
Ползвам същото при регистрация и там проблем няма.. ето това е часта от регистрацията
Код:
if(!isset($error)){

		$hashedpassword = $user->password_hash($_POST['password'], PASSWORD_BCRYPT);

		$activasion = md5(uniqid(rand(),true));

		try {

			//insert into database with a prepared statement
			$stmt = $pdo->prepare('INSERT INTO users (username,password,email,active) VALUES (:username, :password, :email, :active)');
			$stmt->execute(array(
				':username' => $_POST['username'],
				':password' => $hashedpassword,
				':email' => $_POST['email'],
				':active' => $activasion
			));

			header('Location: userAction.php?action=joined');
			exit;

		//else catch the exception and show the error.
		} catch(PDOException $e) {
		    $error[] = $e->getMessage();
		}

	}

edit:
Оправих го. Прблема беше в тъпия <button> ... понеже не е <input type="submit....> :( :?
 

Back
Горе