Я создаю мой смены пароля сайта на мой сайт и у меня есть некоторые проблемы с кодом ...PHP склепа(), UPDATE и Сравнения
По какой-то причине у меня есть трудности с паролями сравниваемых и заменены db после их шифрования.
Я хотел это:
Либо получить пароль текущих пользователей и сравнить его с входным значением $ oldpass или сравнить входное значение $ oldpass с паролем, сохраненным в базе данных для текущего пользователя.
После проверки того, соответствуют ли $ oldpass и пароль из базы данных, и если они совпадают, введите входное значение $ newpass и $ repeatpass, сравните их и если они совпадут, тогда crypt() $ newpass и обновите базу данных с новым паролем.
Я даже не уверен, что пароли даже шифруются.
Также в коде я сравниваю $ oldpass с $ _SESSION ['password'], который не является паролем из db, я не могу понять, как вызвать пароль из db.
<?php
include 'check_login_status.php';
$u="";
$oldpass=md5($_POST['oldpass']);
//stripping both strings of white spaces
$newpass = preg_replace('#[^a-z0-9]#i', '', $_POST['newpass']);
$repeatpass = preg_replace('#[^a-z0-9]#i', '', $_POST['repeatpass']);
//get the username from the header
if(isset($_GET["u"])){
$u = preg_replace('#[^a-z0-9]#i', '', $_GET['u']);
} else {
header("location: compare_pass.php?u=".$_SESSION["username"]);
exit();
}
// Select the member from the users table
$sql = "SELECT password FROM users WHERE username='$u' LIMIT 1";
mysqli_query($db_conx, $sql);
$user_query = mysqli_query($db_conx, $sql);
// Now make sure that user exists in the table
$numrows = mysqli_num_rows($user_query);
if($numrows < 1){
echo "That user does not exist or is not yet activated, press back";
exit();
}
if ($oldpass == $_SESSION['password']) {
echo "session and oldpass are matching";
} else {
echo "Session and oldpass do not match!";
}
$isOwner = "no";
//check if user is logged in owner of account
if($u == $log_username && $user_ok == true){
$isOwner = "yes";
}
$newpass = password_hash($newpass, PASSWORD_BCRYPT);
if (isset($_POST["submit"]) && ($isOwner == "yes") && ($user_ok == true) && ($newpass == $repeatpass)) {
$newpass = password_hash($newpass, PASSWORD_BCRYPT);
$sql = "UPDATE users SET `password`='$newpass' WHERE username='$u' LIMIT 1";
}
if (mysqli_query($db_conx, $sql)) {
echo "Record updated successfully";
} else {
echo "Error updating record: " . mysqli_error($db_conx);
}
?>
<h3>Create new password</h3>
<form action="" method="post">
<div>Current Password</div>
<input type="text" class="form-control" id="password" name="oldpass" ><?php echo "{$oldpass}"; ?>
<div>New Password</div>
<input type="text" class="form-control" id="password" name="newpass" ><?php echo "{$newpass}"; ?>
<div>Repeat Password</div>
<input type="text" class="form-control" id="password" name="repeatpass" ><?php echo "{$repeatpass}"; ?>
<br /><br />
<input type="submit" name="submit" value="Submit">
<p id="status" ></p>
</form><?php echo "{$oldpass}, {$_SESSION['password']}"; ?>
<pre>
<?php
var_dump($_SESSION);
var_dump($oldpass);
var_dump($newpass);
var_dump($repeatpass);
?>
</pre>
Какая у вас версия php? – Mihai
Моя версия PHP - 5.6.3. – EntangledQuantum
Вы усложняете себя, по какой-либо причине вы не используете функцию хэширования по умолчанию в php> 5.5? https://php.net/manual/ro/function.password-hash.php – Mihai