30.6.6 更改密码
点击"Change Password"按钮将触发change-password动作,该动作触发如下所示的代码:
case'change-password':
display_password_form();
break;
display_password_form()函数(来自output_fns.php函数库)只是显示一个可供用户修改密码的表单。该表单如图30-9所示。
图 30-9 display_password_form()函数允许用户更改密码
当用户点击表单底部的"Change Password"按钮时,将触发store-change-password动作。该动作代码如下所示:
case'store-change-password':
if(change_password(get_email(),$_POST['old_passwd'],
$_POST['new_passwd'],$_POST['new_passwd2'])){
echo"<p style=\"padding-bottom:50px\">OK:Password
changed.</p>";
}else{
echo"<p style=\"padding-bottom:50px\">Sorry,your
password could not be changed.</p>";
display_password_form();
}
break;
可以看到,以上代码将使用change_password()函数来更改密码并向用户报告密码更改是否成功。change_password()函数可以在user_auth_fns.php函数库中找到。该函数的代码如程序清单30-13所示。
程序清单30-13 user_auth_fns.php函数库中的change_password()函数——该函数可以校验并更新用户密码
function change_password($email,$old_password,$new_password,
$new_password_conf){
//change password for email/old_password to new_password
//return true or false
//if the old password is right
//change their password to new_password and return true
//else return false
if(login($email,$old_password)){
if($new_password==$new_password_conf){
if(!($conn=db_connect())){
return false;
}
$query="update subscribers
set password=sha1('".$new_password."')
where email='".$email."'";
$result=$conn->query($query);
return$result;
}else{
echo"<p>Your passwords do not match.</p>";
}
}else{
echo"<p>Your old password is incorrect.</p>";
}
return false;//old password was wrong
}
该函数与我们前面所看到的密码设置和修改函数类似。它比较用户输入的两个密码,判断是否一致,如果一致,则在数据库中更改该用户的密码。