PHP:composer自动加载机制;创建动态分页; 使用三方验证码库;

一.使用第三方验证码库

  • http://packagist.p2hp.com/packages/gregwar/captcha 可以用composer下载第三方验证码库
  • 下载好之后创建html页面加载第三方验证码库包,开启session会话和用户输入的验证码做对比是否正确。

代码块

  1. <?php
  2. //首先开启session会话
  3. session_start();
  4. //然后引入第三方验证码的自动加载文件
  5. require_once __DIR__ . '/vendor/autoload.php';
  6. use Gregwar\Captcha\CaptchaBuilder;
  7. $builder = new CaptchaBuilder;
  8. $builder->build()->save('captcha.jpg');
  9. ?>
  10. <!DOCTYPE html>
  11. <html lang="en">
  12. <head>
  13. <meta charset="UTF-8">
  14. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  15. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  16. <title>验证码验证</title>
  17. </head>
  18. <body>
  19. <input type="text" name="captcha" >
  20. <img src="<?php echo $builder->inline(); ?>" alt="" onclick="window.location.reload()">
  21. </body>
  22. </html>

二.composer自动加载机制

  • psr-4规范 : 类的命名空间与类所在的目录进行绑定,命名空间最后必须以”\” 空间分隔符结尾 ,往绑定的目录中添加新类时, 不必执行composer dump-autoload命令就能生效

    • 这里先介绍psr4,他是升级版的PSR-0自动加载规范
      PSR4是关于由文件路径自动载入对应的类的相关规范,本规范是可互操作的。可以作为任一自动(包括PSR-0)载入规范的补充,此外,PSR4还包括自动载入的类对应的文件存放路径规范。

    • 此处的“类”泛指所有的class类、接口、traits可复用代码块以及其他类似结构。

    • 一个完整的类名需要具有以下结构
      <命名空间>(<子命名空间>)*<类名>

    • 完整的类名必须要有一个顶级命名空间,被称为“Vendor namespace”

    • 完整的类名可以有一个或多个子命名空间

    • 完整的类名必须有一个最终的类名

    • 完整的类名中任意一部分中的下划线都是没有特殊意义的

    • 完整的类名可以由任意大小写字母组成

    • 所有类名都必须是大小写敏感的

    • 当根据完整的类名载入相应的文件

    • 完整的类名中,去掉最前面的命名空间分隔符,前面连续的一个或多个命名空间和子命名空间,作为“命名空间前缀”,其必须至少对应一个基础目录。

    • 紧接命名空间前缀后的子命名空间必须与相对应的“基础目录”的子目录相匹配,其中的命名空间分隔符作为目录分割符

    • 末尾的类名必须与对应的.php为后缀的文件同名

    • 自动加载器(autoload)的实现一定不能抛出异常,一定不能触发任一级别的错误信息以及不应该有返回值。

①配置composer.json文件 添加 autoload自动加载器

②在终端调用 composer dump-autoload 命令让改动的文件生效

composer 自动加载 配置成功

composer.json文件代码块

  1. {
  2. "name": "phpcn/login",
  3. "description": "a exquisite login page with captcha",
  4. "type": "project",
  5. "require": {
  6. "gregwar/captcha": "^1.1"
  7. },
  8. "authors": [
  9. {
  10. }
  11. ],
  12. "autoload": {
  13. "psr-4": {
  14. "app\\controller\\": "app/controller",
  15. "extend\\ilb\\": "extend/ilb"
  16. }
  17. }
  18. }

三.创建动态分页

①基础动态分页

php代码块

  1. <?php
  2. // 连接数据库
  3. $pdo = new PDO("mysql:host=localhost;dbname=zwz","zwz1230","a123456",[PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]);
  4. //获取分页数据
  5. //当前页码 默认为1
  6. $page = $_GET['p']??1;
  7. //每页显示条数
  8. $num = 4;
  9. //计算每一页第一条记录的显示偏移量
  10. //偏移量 = (页码 -1) \* 每页的显示数量
  11. $offset = ($page - 1) * $num ;
  12. //获取数据库数据
  13. $sql = "SELECT `id`,`uname` FROM `user` ORDER BY `id` ASC LIMIT {$num} OFFSET {$offset}";
  14. $users = $pdo->query($sql)->fetchAll();
  15. //获取总页数
  16. $sql = "SELECT CEIL(COUNT(`id`)/{$num}) AS `total` FROM `user`";
  17. $pages = $pdo->query($sql)->fetch()['total'];

HTML代码块

  1. <body>
  2. <table>
  3. <caption>用户表</caption>
  4. <thead>
  5. <tr>
  6. <td>编号</td>
  7. <td>姓名</td>
  8. <td>操作</td>
  9. </tr>
  10. </thead>
  11. <tbody>
  12. <!-- 遍历数据表中数据 -->
  13. <?php foreach ($users as $key => $user):?>
  14. <tr>
  15. <td><?= $user['id']?></td>
  16. <td><?= $user['uname']?></td>
  17. <td>
  18. <button>删除</button>
  19. <button>编辑</button>
  20. </td>
  21. </tr>
  22. <?php endforeach ;?>
  23. </tbody>
  24. </table>
  25. <!-- 动态生成分页条 跳转地址 当前页码的高亮显示 -->
  26. <p>
  27. <?php
  28. for ($i=1; $i <= $pages ; $i++) :
  29. //生成动态的跳转地址 a href 属性 $jump
  30. $jump = sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$i);
  31. //添加css样式实现页码高亮显示
  32. $active = ($i==$page) ? "active" : null;
  33. ?>
  34. <a class="<?=$active?>" href="<?=$jump?>"><?=$i?></a>
  35. <?php endfor;?>
  36. </p>
  37. </body>

②省略点动态分页

php代码块

  1. //省略点分页
  2. // 讨论省略点分页 前提: 两边的省略点都出现的时候
  3. // 分页条显示的页数
  4. $showPages = 3;
  5. //分页条开始的页码值
  6. $startPage = 1;
  7. //分页条结束的页码值
  8. $endPage = $pages;
  9. //分页条的终止页码相对于当前页码的偏移量:
  10. $offset = ($showPages-1)/2;
  11. //如果当前显示的页数小于总页数则显示省略点
  12. if ($showPages < $pages) {
  13. //如果当前页数大于偏移量+1则显示省略点
  14. if ($page > $offset +1) {
  15. //设置省略点
  16. $startOmit = '...';
  17. //重置开始页码和结束页码
  18. $startPage = $page - $offset;
  19. $endPage = $page -$offset;
  20. //结束页码如果大于总页码则结束页码等于总页码
  21. if ($endPage > $pages) {
  22. $endPage = $pages;
  23. }
  24. }else {
  25. $startPage = 1;
  26. $endPage = $showPages;
  27. }
  28. //如果分页条显示数小于总页数
  29. //或者当前页数+偏移量 小于总页数 则显示结束省略点
  30. if ($showPages < $pages && $page + $offset <$pages) {
  31. $endOmit = '...';
  32. }
  33. }

HTML代码块

  1. <body>
  2. <table>
  3. <caption>用户表</caption>
  4. <thead>
  5. <tr>
  6. <td>编号</td>
  7. <td>姓名</td>
  8. <td>操作</td>
  9. </tr>
  10. </thead>
  11. <tbody>
  12. <!-- 遍历数据表中数据 -->
  13. <?php foreach ($users as $key => $user):?>
  14. <tr>
  15. <td><?= $user['id']?></td>
  16. <td><?= $user['uname']?></td>
  17. <td>
  18. <button>删除</button>
  19. <button>编辑</button>
  20. </td>
  21. </tr>
  22. <?php endforeach ;?>
  23. </tbody>
  24. </table>
  25. <!-- 动态生成分页条 跳转地址 当前页码的高亮显示 -->
  26. <p>
  27. <!-- 首页 上一页 -->
  28. <?php
  29. $prev = $page - 1;
  30. if ($page ==1) $prev = 1;
  31. if ($page != 1):
  32. ?>
  33. <a href="<?=$_SERVER['PHP_SELF'].'?p=1'?>">首页</a>
  34. <a href="<?=$_SERVER['PHP_SELF'].'?p='.$prev?>">上一页</a>
  35. <?endif;?>
  36. <!-- 省略点 -->
  37. <?php if (isset($startOmit)):?>
  38. <a href="javascript:;"><?=$startOmit?></a>
  39. <?endif;?>
  40. <?php
  41. for ($i=1; $i <= $pages ; $i++) :
  42. //生成动态的跳转地址 a href 属性 $jump
  43. $jump = sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$i);
  44. //添加css样式实现页码高亮显示
  45. $active = ($i==$page) ? "active" : null;
  46. ?>
  47. <a class="<?=$active?>" href="<?=$jump?>"><?=$i?></a>
  48. <?php endfor;?>
  49. <!-- 省略点 -->
  50. <?php if (isset($endOmit)):?>
  51. <a href="javascript:;"><?=$endOmit?></a>
  52. <?endif;?>
  53. <!-- 尾页 下一页 -->
  54. <?php
  55. $next = $page + 1;
  56. if ($page == $pages) $next = $page;
  57. if ($page != $pages):
  58. ?>
  59. <a href="<?=$_SERVER['PHP_SELF'].'?p='.$next?>">下一页</a>
  60. <a href="<?=$_SERVER['PHP_SELF'].'?p='.$pages?>">尾页</a>
  61. <?endif;?>
  62. </p>
  63. </body>

更多相关文章

  1. php之动态分页
  2. 【PHP动态分页】composer自动加载机制和第三方验证码库的使用以
  3. 【PHP 面向对象】面向对象(OOP)编程之解读命名空间使用知识点归
  4. PHP:oop->细说命名空间/命名空间类的自动加载
  5. NVMe Over Fabrics架构概述
  6. 苹果Mac图片批量压缩重命名添加水印工具:PhotoBulk
  7. 变量系列教材 (五)- Java的命名规则
  8. 类的重定向,命名空间和内容的访问
  9. JavaScript注释及命名规范

随机推荐

  1. Android xml资源文件中@、@android:type
  2. android动态墙纸有关问题
  3. Android架构组件三 Android Architecture
  4. ANDROID Porting系列一、ANDROID编译系统
  5. Android shape图形
  6. Android Drawable Resources系列6:
  7. 13、Android的多线程与异步任务
  8. android 中文粗体
  9. Android文件的读写
  10. android studio 在线更新android sdk,遇到