任务18 优化跳转目标

当管理员修改其他会员资料的时候,修改完后,应跳转到修改对应用户的那一页数据
image.png
我们可以使用一个标识符来实现
首先在admin.php中
image.png
在nav.php中
image.png
在modify.php中
如果 $source不存在,或者$source既不等于admin也不等于member
那么页面的来源是不对的
image.png
在修改页面点击提交后,是postModify.php处理修改请求的,但是在postModify.php中,修改完成后的url没有回到admin.php的
image.png
我们可以根据$source的情况来决定url是跳转回admin.php,那么我们怎么在postModify.php中拿到$source呢?现在$source是在modify.php中的。
可以通过隐藏域来解决。
在modify.php中
image.png
在postModify.php中,添加
image.png
image.png
但是现在还有一个问题,需要把当前页码也传递才行
在admin.php中
image.png
在modify.php中
image.png
image.png
在postModify.php中
image.png
image.png
然后修改一个会员资料,观察结果,是否返回修改该会员的那一页数据

任务19 注册时使用Ajax验证用户名是否有效

19.1 修改singup.php

这里我们使用JQuery中的ajax方法
在singup.php中
先引入JQuery
image.png
给用户名的表单绑定失去焦点事件
image.png
添加span标签用于显示提示消息
image.png
编写checkUsername()事件处理函数
image.png
添加样式类
image.png

19.2 创建checkUsername.php

用于处理检查用户名是否可用的请求
image.png
完成后进行测试,填写用户名,然后
效果如下:
image.png
image.png
按F12,然后在控制台中的Network可以查看网络请求
填写用户名,然后点击其他地方,就可以看到确实是发送了请求
image.png

任务20 beforeSend的使用

从上一个任务我们可知,使用JQuery中的ajax()可以使网页无刷新进行网络请求
用户在填写完用户名点击其他地方后,则会去发起网络请求验证用户名是否可用,但目前我们这样做,用户并不清楚这一处理,所以我们可以加一个loading的动图,加强用户体验性。
先引入图片
image.png
在singup.php中
image.png
image.png
image.png
完成后进行测试
image.png
由于现在我们是在本地运行的,所以不会存在网络卡顿的状况,因此动图会一闪而过就隐藏了
可以在checkUsername.php
image.png
测试完后可以注释掉或者删除上图红框代码。

任务22 验证码的使用

在用户进行登录的时候使用验证码

22.1 创建code.php

code.php用于输出验证码图片

  1. <?php
  2. /**
  3. * 字母+数字的验证码生成
  4. */
  5. // 开启session
  6. session_start();
  7. //1.创建黑色画布
  8. $image = imagecreatetruecolor(100, 30);
  9. //2.为画布定义(背景)颜色
  10. $bgcolor = imagecolorallocate($image, 255, 255, 255);
  11. //3.填充颜色
  12. imagefill($image, 0, 0, $bgcolor);
  13. // 4.设置验证码内容
  14. //4.1 定义验证码的内容
  15. $content = "ABCDEFGHIJKLMNPQRSTUVWXYZabcdefghjkmnpqrstuvwxyz123456789";
  16. //4.1 创建一个变量存储产生的验证码数据,便于用户提交核对
  17. $captcha = "";
  18. for ($i = 0; $i < 4; $i++) { //验证码长度为4
  19. // 字体大小
  20. $fontsize = 10;
  21. // 字体颜色
  22. $fontcolor = imagecolorallocate($image, mt_rand(0, 120), mt_rand(0, 120), mt_rand(0, 120));
  23. // 设置字体内容
  24. $fontcontent = substr($content, mt_rand(0, strlen($content)), 1);
  25. $captcha .= $fontcontent;
  26. // 显示的坐标
  27. $x = ($i * 100 / 4) + mt_rand(5, 10);
  28. $y = mt_rand(5, 10);
  29. // 填充内容到画布中
  30. imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
  31. }
  32. $_SESSION["captcha"] = $captcha;
  33. //4.3 设置背景干扰元素
  34. for ($i = 0; $i < 200; $i++) {
  35. $pointcolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
  36. imagesetpixel($image, mt_rand(1, 99), mt_rand(1, 29), $pointcolor);
  37. }
  38. //4.4 设置干扰线
  39. for ($i = 0; $i < 3; $i++) {
  40. $linecolor = imagecolorallocate($image, mt_rand(50, 200), mt_rand(50, 200), mt_rand(50, 200));
  41. imageline($image, mt_rand(1, 99), mt_rand(1, 29), mt_rand(1, 99), mt_rand(1, 29), $linecolor);
  42. }
  43. //5.向浏览器输出图片头信息
  44. header('content-type:image/png');
  45. //6.输出图片到浏览器
  46. imagepng($image);
  47. //7.销毁图片
  48. imagedestroy($image);

22.2 显示和设置验证码

在login.php中
image.png
效果如下:
image.png

22.3 前端验证码校验

image.png
测试,输入用户名和密码后直接提交,效果如下:
image.png

22.4 后端验证码校验

在postLogin.php中
image.png
完成后进行测试。