忘记密码未更新加上密码哈希
Forgot password not updated plus password hash
正在创建应用程序...目前一切正常。在我的注册系统中,使用了准备好的声明和密码散列,并且还尝试在我的表单字段中验证用户输入。为了完成这个系统,我需要创建一个忘记密码系统,这意味着用户可以请求新密码。
我做了一个包含所有文件的测试站点,这意味着我可以在将其添加到生产站点之前测试它是否有效。
使用 mysqli 忘记密码,一旦一切正常,我将更新为 prepared,因为我仍在学习 prepared 语句并以这种方式帮助我理解,所以不要判断。
我忘记密码时遇到的问题是密码更改后不会更新。看这个截图:http://prntscr.com/d5hage
也如上所述,在我的注册中使用了 http://prntscr.com/d5hbg1,并在我的登录中进行了验证。但是如何在我忘记的密码中使用散列或如何更新它。在我下面的代码中使用了 md5,我知道它已损坏。请在下面输入我所有的代码。
Reset_Password.php
<?php
// include connection
require_once('include/connection.php');
if(isset($_POST['submit'])){
$user_id = base64_decode($_GET['encrypt']);
$passnew = password_hash($password, $_POST['new_password'], PASSWORD_BCRYPT, array( 'cost' => 12 ) );
$sql = "UPDATE `olami560_test`.`user` SET `password` =? WHERE `user`.`id` =?";
$stmt = $con->prepare($sql);
$stmt->bind_param('si',$passnew, $user_id);
$stmt->execute();
if ($stmt->errno) {
echo "FAILURE!!! " . $stmt->error;
}
else echo "Password Changed Successfully.Click on link to login <a href='http://www.olaskee.co.uk/project/allocation/progress/index.php'>Login</a>{$stmt->affected_rows} rows";
$stmt->close();
}
?>
<form method="post" action="<?php echo $_SERVER['HTTP_REFERER']; ?>" >
<label>New Password</label>
<input type="password" name="new_password"/>
<input type="submit" name="submit" value="Reset" />
</form>
forgot_password.php
<?php
// include connection
require_once('include/connection.php');
if(isset($_GET) && !empty($_GET['email'])){
$email = mysqli_real_escape_string($con,$_GET['email']);
$query = "SELECT id
FROM `user`
WHERE `user_name` LIKE '".$email."'
OR `email` LIKE '".$email."'";
$result = mysqli_query($con,$query);
$Results = mysqli_fetch_array($result);
if(count($Results)>=1)
{
$query2 = "SELECT email
FROM `user`
WHERE `user_name` LIKE '".$email."'
OR `email` LIKE '".$email."'";
$result2 = mysqli_query($con,$query2);
$emailvalue = mysqli_fetch_array($result2);
//$token = md5(uniqid(rand(),true));
//$encrypt = md5($Results['id']);
$encrypt = base64_encode($Results['id']);
$message = "Your password reset link send to your e-mail address.";
$to = $emailvalue['email'];
$subject="Forget Password";
$from = 'leksmaster@gmail.com';
$body= 'Hi, <br/> User <br/>You Requested for Reset Password. <br><br>http://www.olaskee.co.uk/project/allocation/tms/reset_password.php?token='.$token.'&encrypt='.$encrypt.'&action=reset<br/> <br/>--<br>.olaskee<br>';
$headers = "From: " . strip_tags($from) . "\r\n";
$headers .= "Reply-To: ". strip_tags($from) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
mail($to,$subject,$body,$headers);
echo $message;
}
else
{
$message = "Account not found please signup now!!";
echo $message;
}
}
?>
我希望我已经提供了足够的解释让你理解。感谢任何输入。
好的,查看代码,我认为您需要查看一些内容。
在表单上更改此
<form method="post" action="<?php echo $_SERVER['HTTP_REFERER']; ?>" >
至
<form method="post" action="" >
这应该将表单提交给自己。
散列确实需要password_hash()
使用以下内容,它将帮助您入门
$passnew = password_hash( $password, $_POST['new_password'], PASSWORD_BCRYPT, array( 'cost' => 12 ) );
在重置密码的表单上,最好让用户输入两次新密码,这样您就可以检查他们是否重复了正确的密码。
if( $_POST[ 'pass1' ] == $_POST[ 'pass2' ] ) // Process else error
在您的 forgot_password.php 文件中,您调用了同一个 sql 语句两次。调用一次,检查行数是否大于一,如果是使用结果中的数据,则无需再次调用它来做同样的事情。
希望这能让你继续前进,祝你有美好的一天。
正在创建应用程序...目前一切正常。在我的注册系统中,使用了准备好的声明和密码散列,并且还尝试在我的表单字段中验证用户输入。为了完成这个系统,我需要创建一个忘记密码系统,这意味着用户可以请求新密码。
我做了一个包含所有文件的测试站点,这意味着我可以在将其添加到生产站点之前测试它是否有效。
使用 mysqli 忘记密码,一旦一切正常,我将更新为 prepared,因为我仍在学习 prepared 语句并以这种方式帮助我理解,所以不要判断。
我忘记密码时遇到的问题是密码更改后不会更新。看这个截图:http://prntscr.com/d5hage
也如上所述,在我的注册中使用了 http://prntscr.com/d5hbg1,并在我的登录中进行了验证。但是如何在我忘记的密码中使用散列或如何更新它。在我下面的代码中使用了 md5,我知道它已损坏。请在下面输入我所有的代码。
Reset_Password.php
<?php
// include connection
require_once('include/connection.php');
if(isset($_POST['submit'])){
$user_id = base64_decode($_GET['encrypt']);
$passnew = password_hash($password, $_POST['new_password'], PASSWORD_BCRYPT, array( 'cost' => 12 ) );
$sql = "UPDATE `olami560_test`.`user` SET `password` =? WHERE `user`.`id` =?";
$stmt = $con->prepare($sql);
$stmt->bind_param('si',$passnew, $user_id);
$stmt->execute();
if ($stmt->errno) {
echo "FAILURE!!! " . $stmt->error;
}
else echo "Password Changed Successfully.Click on link to login <a href='http://www.olaskee.co.uk/project/allocation/progress/index.php'>Login</a>{$stmt->affected_rows} rows";
$stmt->close();
}
?>
<form method="post" action="<?php echo $_SERVER['HTTP_REFERER']; ?>" >
<label>New Password</label>
<input type="password" name="new_password"/>
<input type="submit" name="submit" value="Reset" />
</form>
forgot_password.php
<?php
// include connection
require_once('include/connection.php');
if(isset($_GET) && !empty($_GET['email'])){
$email = mysqli_real_escape_string($con,$_GET['email']);
$query = "SELECT id
FROM `user`
WHERE `user_name` LIKE '".$email."'
OR `email` LIKE '".$email."'";
$result = mysqli_query($con,$query);
$Results = mysqli_fetch_array($result);
if(count($Results)>=1)
{
$query2 = "SELECT email
FROM `user`
WHERE `user_name` LIKE '".$email."'
OR `email` LIKE '".$email."'";
$result2 = mysqli_query($con,$query2);
$emailvalue = mysqli_fetch_array($result2);
//$token = md5(uniqid(rand(),true));
//$encrypt = md5($Results['id']);
$encrypt = base64_encode($Results['id']);
$message = "Your password reset link send to your e-mail address.";
$to = $emailvalue['email'];
$subject="Forget Password";
$from = 'leksmaster@gmail.com';
$body= 'Hi, <br/> User <br/>You Requested for Reset Password. <br><br>http://www.olaskee.co.uk/project/allocation/tms/reset_password.php?token='.$token.'&encrypt='.$encrypt.'&action=reset<br/> <br/>--<br>.olaskee<br>';
$headers = "From: " . strip_tags($from) . "\r\n";
$headers .= "Reply-To: ". strip_tags($from) . "\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
mail($to,$subject,$body,$headers);
echo $message;
}
else
{
$message = "Account not found please signup now!!";
echo $message;
}
}
?>
我希望我已经提供了足够的解释让你理解。感谢任何输入。
好的,查看代码,我认为您需要查看一些内容。
在表单上更改此
<form method="post" action="<?php echo $_SERVER['HTTP_REFERER']; ?>" >
至
<form method="post" action="" >
这应该将表单提交给自己。
散列确实需要password_hash()
使用以下内容,它将帮助您入门
$passnew = password_hash( $password, $_POST['new_password'], PASSWORD_BCRYPT, array( 'cost' => 12 ) );
在重置密码的表单上,最好让用户输入两次新密码,这样您就可以检查他们是否重复了正确的密码。
if( $_POST[ 'pass1' ] == $_POST[ 'pass2' ] ) // Process else error
在您的 forgot_password.php 文件中,您调用了同一个 sql 语句两次。调用一次,检查行数是否大于一,如果是使用结果中的数据,则无需再次调用它来做同样的事情。
希望这能让你继续前进,祝你有美好的一天。