30.6.6 更改密码

点击"Change Password"按钮将触发change-password动作,该动作触发如下所示的代码:


case'change-password':

display_password_form();

break;


display_password_form()函数(来自output_fns.php函数库)只是显示一个可供用户修改密码的表单。该表单如图30-9所示。

30.6.6 更改密码 - 图1

图 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

}


该函数与我们前面所看到的密码设置和修改函数类似。它比较用户输入的两个密码,判断是否一致,如果一致,则在数据库中更改该用户的密码。