创新实训(七):用户管理之信息修改

实现了一个密码找回功能,通过用户输入用户名来发送重置密码的邮件,
一.项目展示:

修改信息:

  1. 检查参数
    首先,代码检查是否在URL中传递了参数 p:
php
if (!isset($_GET['p'])) {
    become404Page();
}

如果没有传递 p 参数,函数 become404Page() 会被调用,可能会显示一个404错误页面。

  1. 重置密码的功能函数
    接下来是 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());
}
  1. 前端表单和脚本
    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,然后输出页面尾部。

posted @   ighshssjjsjs  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示