创新实训(七):用户管理之信息修改
实现了一个密码找回功能,通过用户输入用户名来发送重置密码的邮件,
一.项目展示:
修改信息:
- 检查参数
首先,代码检查是否在URL中传递了参数 p:
php
if (!isset($_GET['p'])) {
become404Page();
}
如果没有传递 p 参数,函数 become404Page() 会被调用,可能会显示一个404错误页面。
- 重置密码的功能函数
接下来是 resetPassword() 函数,它主要负责处理密码重置逻辑:
php
function resetPassword() {
list($username, $check_code) = explode('.', base64url_decode($_GET['p']));
if (!isset($_POST['newPW']) || !validatePassword($_POST['newPW'])) {
return '操作失败,无效密码';
}
if (!isset($username) || !validateUsername($username)) {
return '不明错误';
}
if (!isset($check_code)) {
return '不明错误';
}
$newPW = $_POST['newPW'];
$user = queryUser($username);
if ($user == null) {
return '不明错误';
}
if ($check_code !== md5($user['username'] . '+' . $user['password'])) {
return '不明错误';
}
$newPW = getPasswordToStore($newPW, $user['username']);
DB::update("update user_info set password = '$newPW' where username = '{$user['username']}'");
return 'ok';
}
解码和验证参数:首先,通过 base64url_decode($_GET['p']) 解码 URL 参数,并使用 explode 分割为用户名和校验码。
验证新密码:检查 POST 请求中是否包含 newPW(新密码),并通过 validatePassword 函数验证其有效性。
验证用户名:通过 validateUsername 函数验证解码后的用户名。
查询用户信息:使用 queryUser 函数从数据库查询用户信息。
校验码验证:将用户名和旧密码通过 md5 生成校验码,与传递的校验码进行比较。
更新密码:调用 getPasswordToStore 对新密码进行加密后,更新数据库中的用户密码。
3. 提交表单逻辑
如果 POST 请求中有 reset 参数,则执行 resetPassword() 函数,并输出其返回结果:
php
if (isset($_POST['reset'])) {
die(resetPassword());
}
- 前端表单和脚本
HTML 部分定义了密码重置的表单:
html
<h2 class="page-header">更改密码</h2>
<form id="form-reset" class="form-horizontal">
<div id="div-password" class="form-group">
<label for="input-password" class="col-sm-2 control-label">新密码</label>
<div class="col-sm-3">
<input type="password" class="form-control" id="input-password" name="password" placeholder="输入新密码" maxlength="20" />
<input type="password" class="form-control top-buffer-sm" id="input-confirm_password" placeholder="再次输入新密码" maxlength="20" />
<span class="help-block" id="help-password"></span>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-3">
<button type="submit" id="button-submit" class="btn btn-secondary">提交</button>
</div>
</div>
</form>
JavaScript 部分用于验证表单输入并发送 AJAX 请求:
javascript
function validateResetPwPost() {
var ok = true;
ok &= getFormErrorAndShowHelp('password', validateSettingPassword);
return ok;
}
$(document).ready(function() {
$('#form-reset').submit(function(e) {
if (!validateResetPwPost()) {
return false;
}
$.post('<?=$_SERVER['REQUEST_URI']?>', {
reset : '',
newPW : md5($('#input-password').val(), "<?= getPasswordClientSalt() ?>")
}, function(res) {
if (res == 'ok') {
BootstrapDialog.show({
title : '提示',
message : '密码更改成功',
type : BootstrapDialog.TYPE_SUCCESS,
buttons: [{
label: '好的',
action: function(dialog) {
dialog.close();
}
}],
onhidden : function(dialog) {
window.location.href = '/login';
}
});
} else {
BootstrapDialog.show({
title : '提示',
message : res,
type : BootstrapDialog.TYPE_DANGER,
buttons: [{
label: '好的',
action: function(dialog) {
dialog.close();
}
}]
});
}
});
return false;
});
});
表单验证:当表单提交时,调用 validateResetPwPost 函数验证新密码。
发送请求:使用 $.post 方法将重置请求发送到当前 URL。
处理响应:根据服务器返回的结果显示不同的对话框,成功则跳转到登录页面。
输出页面头部、标题、输入提示以及表单的HTML,然后输出页面尾部。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端