IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> PHP:composer自动加载机制;创建动态分页; 使用三方验证码库; -> 正文阅读

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

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

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


代码块

<?php
//首先开启session会话
session_start();
//然后引入第三方验证码的自动加载文件
require_once __DIR__ . '/vendor/autoload.php';
use Gregwar\Captcha\CaptchaBuilder;
$builder = new CaptchaBuilder;
$builder->build()->save('captcha.jpg');



?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>验证码验证</title>
</head>
<body>
    <input type="text" name="captcha" >
    <img src="<?php echo $builder->inline(); ?>" alt="" onclick="window.location.reload()">

</body>
</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文件代码块

{
  "name": "phpcn/login",
  "description": "a exquisite login page with captcha",
  "type": "project",
  "require": {
    "gregwar/captcha": "^1.1"
  },
  "authors": [
    {
      
    }
  ],
  "autoload": {
    "psr-4": {
      "app\\controller\\": "app/controller",
      "extend\\ilb\\": "extend/ilb"
    }
  }
}

三.创建动态分页
①基础动态分页

php代码块

<?php
// 连接数据库

$pdo = new PDO("mysql:host=localhost;dbname=zwz","zwz1230","a123456",[PDO::ATTR_DEFAULT_FETCH_MODE=>PDO::FETCH_ASSOC]);


//获取分页数据

//当前页码 默认为1
$page = $_GET['p']??1;

//每页显示条数
$num = 4;

//计算每一页第一条记录的显示偏移量
//偏移量 = (页码 -1) \* 每页的显示数量

$offset = ($page - 1) * $num ;

//获取数据库数据
$sql = "SELECT `id`,`uname` FROM `user` ORDER BY `id` ASC  LIMIT {$num} OFFSET {$offset}";

$users = $pdo->query($sql)->fetchAll();

//获取总页数
$sql = "SELECT CEIL(COUNT(`id`)/{$num}) AS `total` FROM `user`";

$pages = $pdo->query($sql)->fetch()['total'];

HTML代码块

<body>
    <table>
        <caption>用户表</caption>
        <thead>
        <tr>
            <td>编号</td>
            <td>姓名</td>
            <td>操作</td>
            
        </tr>
           
        </thead>
        <tbody>
        <!-- 遍历数据表中数据 -->
        <?php foreach ($users as $key => $user):?>
            <tr>
                <td><?= $user['id']?></td>
                <td><?= $user['uname']?></td>
                <td>
                <button>删除</button>
                <button>编辑</button>
                </td>
            </tr>
        <?php endforeach ;?>
        </tbody>
    </table>
     <!-- 动态生成分页条  跳转地址 当前页码的高亮显示 -->
     <p>

        <?php
        for ($i=1; $i <= $pages ; $i++) :
        //生成动态的跳转地址 a href 属性 $jump
        $jump = sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$i);

        //添加css样式实现页码高亮显示
        $active = ($i==$page) ? "active" : null;
        ?>

        <a class="<?=$active?>" href="<?=$jump?>"><?=$i?></a>

        <?php endfor;?>
</p>
</body>

②省略点动态分页

php代码块


//省略点分页
// 讨论省略点分页    前提: 两边的省略点都出现的时候
// 分页条显示的页数
$showPages = 3;

//分页条开始的页码值
$startPage = 1;

//分页条结束的页码值
$endPage = $pages;

//分页条的终止页码相对于当前页码的偏移量:
$offset = ($showPages-1)/2;

//如果当前显示的页数小于总页数则显示省略点
if ($showPages < $pages) {
    
    //如果当前页数大于偏移量+1则显示省略点
    if ($page > $offset +1) {
       
        //设置省略点
        $startOmit = '...';
        //重置开始页码和结束页码
        $startPage = $page - $offset;
        $endPage = $page -$offset;

        //结束页码如果大于总页码则结束页码等于总页码
        if ($endPage > $pages) {
           $endPage = $pages;
        }

    }else {
        
        $startPage = 1;
        $endPage = $showPages;
    }

    //如果分页条显示数小于总页数
    //或者当前页数+偏移量 小于总页数 则显示结束省略点
    if ($showPages < $pages  && $page + $offset <$pages) {
        
        $endOmit = '...';
    }
}

HTML代码块

<body>
    <table>
        <caption>用户表</caption>
        <thead>
        <tr>
            <td>编号</td>
            <td>姓名</td>
            <td>操作</td>
            
        </tr>
           
        </thead>
        <tbody>
        <!-- 遍历数据表中数据 -->
        <?php foreach ($users as $key => $user):?>
            <tr>
                <td><?= $user['id']?></td>
                <td><?= $user['uname']?></td>
                <td>
                <button>删除</button>
                <button>编辑</button>
                </td>
            </tr>
        <?php endforeach ;?>
        </tbody>
    </table>
      

     <!-- 动态生成分页条  跳转地址 当前页码的高亮显示 -->
     <p>
        <!-- 首页  上一页 -->
        <?php
          $prev = $page - 1;
          if ($page ==1) $prev = 1;
          if ($page != 1):
        ?>
        <a href="<?=$_SERVER['PHP_SELF'].'?p=1'?>">首页</a>
        <a href="<?=$_SERVER['PHP_SELF'].'?p='.$prev?>">上一页</a>
        <?endif;?>


        <!-- 省略点 -->
        <?php if (isset($startOmit)):?>
        <a href="javascript:;"><?=$startOmit?></a>
        <?endif;?>

        <?php
        for ($i=1; $i <= $pages ; $i++) :
        //生成动态的跳转地址 a href 属性 $jump
        $jump = sprintf('%s?p=%s',$_SERVER['PHP_SELF'],$i);

        //添加css样式实现页码高亮显示
        $active = ($i==$page) ? "active" : null;
        ?>

        <a class="<?=$active?>" href="<?=$jump?>"><?=$i?></a>

        <?php endfor;?>

          <!-- 省略点 -->
        <?php if (isset($endOmit)):?>
        <a href="javascript:;"><?=$endOmit?></a>
        <?endif;?>

        <!-- 尾页 下一页 -->
        <?php
          $next = $page + 1;
          if ($page == $pages) $next = $page;
          if ($page != $pages):
        ?>
        <a href="<?=$_SERVER['PHP_SELF'].'?p='.$next?>">下一页</a>
        <a href="<?=$_SERVER['PHP_SELF'].'?p='.$pages?>">尾页</a>
        <?endif;?>
</p>
</body>
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-10-11 17:18:30  更:2021-10-11 17:19:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 13:50:42-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计