博客列表 >命名空间进阶、文件上传与分页处理

命名空间进阶、文件上传与分页处理

超超多喝水
超超多喝水原创
2021年10月26日 00:58:10684浏览

命名空间进阶、文件上传与分页处理

命名空间的进阶

  • 使用 use 关键字可以引入一个命名空间或者引入一个命名空间的类,但是一般是建议引用空间,引用空间后,然后可以使用更短的代码继续往后引用类
  • 如果命名空间有遇到需要改名的情况,可以使用 as 关键字 给类或最后一级空间进行改名,一可以处理重名问题,二可以自定义名称更好做区分或简化
  1. namespace one\test\controller {
  2. class DEMO{
  3. public static function test(){
  4. return "one.demo.test";
  5. }
  6. }
  7. // echo DEMO::test();
  8. }
  9. namespace one\test\model {
  10. class DEMO{
  11. public static function test(){
  12. return "TWO.demo.test";
  13. }
  14. }
  15. //直接引用类
  16. //类有重名可以用as给类更名
  17. // use \one\test\controller\DEMO as DE;
  18. // echo DE::test();
  19. //引用命名空间后再引用类,并给controller更名
  20. use \one\test\controller as ctl;
  21. echo ctl\DEMO::test();
  22. }
  • 自动加载器进阶优化,自动加载器引入使用后,如果引用的类文件中还有引用其他类文件,那么这个引用过程也会自动使用自动加载器
  1. spl_autoload_register(function($class){
  2. // DIRECTORY_SEPARATOR系统分隔符常量,把所有的\都转为系统分隔符
  3. $file = str_replace('\\',DIRECTORY_SEPARATOR,$class).'.php';
  4. // 判断$file是否是正常的文件,是否存在该文件,都为真返回引入,为假抛错
  5. if(is_file($file)&&file_exists($file)){
  6. require $file;
  7. }else{
  8. throw new \Exception("文件名不合法或文件不存在");
  9. }
  10. });

文件上传

  • 获取上传文件信息使用超全局变量$FILES()
  • 系统目录的处理
    • 创建目录 mkdir(目录名称,权限(默认 0777,即允许全局访问),true);
    • 更改文件权限 chmod(目录名称,权限);
  • 文件移动到存储位置move_uploaded_file(上传文件的临时路径,新目录及文件名,)
  • 多文件上传,file 的 input 类型行内标签需要加入 multiple 关键字,name 的值设为数组,此时$FILES 就能获取一个文件的数组,可以通过循环遍历处理该数组进行数据库添加或者处理
  • in_array(要搜索的值,被搜索的数组,是否全等(true 全等 ,false 非全等,默认为 false))可以用来判断文件类型是否在我们规定的类型内
  • 文件名如果重复会出现上传失败的情况,此时文件名可以使用时间戳或随机数生成一个随机名称上传

分页处理

数据库分页处理,主要需要捋清楚每页要分的条数、每页显示条数的起始位置计算以及最后有多少页数据,判断起始页跟结束页,对上一页、下一页进行处理

  1. <?php
  2. //判断是否连接数据库
  3. try{
  4. $pdo = new PDO('mysql:host=localhost;dbname=test','root','z1071930401');
  5. }catch(PDOException $e){
  6. echo '数据库连接失败' . $e->getMessage();
  7. }
  8. // 给p赋初始默认值
  9. if(empty($_GET['p'])){
  10. $p = 1;
  11. }else{
  12. $p = $_GET['p'];
  13. }
  14. // 设置每页条数
  15. $count = 5;
  16. //数据库的数据下标类似于数组,都是从0开始,因此第一页数据就是0-4,第二页就是0-5,按照页数与条数的乘积计算,每页显示的条数应该为($p-1)*$count
  17. $sql = 'SELECT * FROM `user` LIMIT ' . ($p-1)*$count . ',' . $count;
  18. $pre = $pdo -> prepare($sql);
  19. $exe = $pre -> execute();
  20. // 将查询出来的结果集赋值给$data
  21. $data = $pre -> fetchAll();
  22. //使用count()方法查询总共有多少条数据
  23. $pre = $pdo -> prepare('SELECT count(*) as total FROM `user`');
  24. $exe = $pre -> execute();
  25. // 将查询出来的条数赋值给total
  26. $total = $pre -> fetch()['total'];
  27. // 使用ceil()方法向上四舍入为最接近的整数,获取页数,扩展:floor()方法向下四舍入为最接近的整数,round()对浮点数进行四舍五入
  28. $page = ceil($total/$count);
  29. ?>
  30. <!DOCTYPE html>
  31. <html lang="en">
  32. <head>
  33. <meta charset="UTF-8">
  34. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  35. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  36. <title>用户分页</title>
  37. <style>
  38. .pagination {
  39. display: inline-block;
  40. padding-left: 0;
  41. margin: 20px 0;
  42. border-radius: 4px;
  43. }
  44. .pagination > li {
  45. display: inline;
  46. }
  47. .pagination > li > a,
  48. .pagination > li > span {
  49. position: relative;
  50. float: left;
  51. padding: 6px 12px;
  52. margin-left: -1px;
  53. line-height: 1.42857143;
  54. color: #337ab7;
  55. text-decoration: none;
  56. background-color: #fff;
  57. border: 1px solid #ddd;
  58. }
  59. .pagination > li:first-child > a,
  60. .pagination > li:first-child > span {
  61. margin-left: 0;
  62. border-top-left-radius: 4px;
  63. border-bottom-left-radius: 4px;
  64. }
  65. .pagination > li:last-child > a,
  66. .pagination > li:last-child > span {
  67. border-top-right-radius: 4px;
  68. border-bottom-right-radius: 4px;
  69. }
  70. .pagination > li > a:hover,
  71. .pagination > li > span:hover,
  72. .pagination > li > a:focus,
  73. .pagination > li > span:focus {
  74. z-index: 2;
  75. color: #23527c;
  76. background-color: #eee;
  77. border-color: #ddd;
  78. }
  79. .pagination > .active > a,
  80. .pagination > .active > span,
  81. .pagination > .active > a:hover,
  82. .pagination > .active > span:hover,
  83. .pagination > .active > a:focus,
  84. .pagination > .active > span:focus {
  85. z-index: 3;
  86. color: #fff;
  87. cursor: default;
  88. background-color: #337ab7;
  89. border-color: #337ab7;
  90. }
  91. .pagination > .disabled > span,
  92. .pagination > .disabled > span:hover,
  93. .pagination > .disabled > span:focus,
  94. .pagination > .disabled > a,
  95. .pagination > .disabled > a:hover,
  96. .pagination > .disabled > a:focus {
  97. color: #777;
  98. cursor: not-allowed;
  99. background-color: #fff;
  100. border-color: #ddd;
  101. }
  102. .pagination > form > input,button{
  103. position: relative;
  104. float: left;
  105. padding: 6px 12px;
  106. margin-left: -1px;
  107. line-height: 1.42857143;
  108. color: #337ab7;
  109. text-decoration: none;
  110. background-color: #fff;
  111. border: 1px solid #ddd;
  112. }
  113. .pagination > form > button:hover{
  114. z-index: 2;
  115. cursor:pointer;
  116. color: #23527c;
  117. background-color: #eee;
  118. border-color: #ddd;
  119. }
  120. </style>
  121. </head>
  122. <body>
  123. <a href="add.php">添加</a>
  124. <table border="1">
  125. <thead>
  126. <tr>
  127. <th width="50">ID</th>
  128. <th width="100">账户</th>
  129. <th width="100">姓名</th>
  130. <th width="100">年龄</th>
  131. <th width="100">手机号</th>
  132. <th width="200">入职时间</th>
  133. <th width="200">登录时间</th>
  134. <th width="100">状态</th>
  135. </tr>
  136. </thead>
  137. <tbody>
  138. <?php
  139. // 循环遍历显示的数据内容
  140. foreach($data as $v){
  141. ?>
  142. <tr>
  143. <td><?=$v['id'] ?></td>
  144. <td><?=$v['account'] ?></td>
  145. <td><?=$v['name'] ?></td>
  146. <td><?=$v['age'].'岁' ?></td>
  147. <td><?=$v['phone'] ?></td>
  148. <td><?=date('Y-m-d',$v['add_time']) ?></td>
  149. <td><?=date('Y-m-d H:i:s',$v['last_time']) ?></td>
  150. <!-- <td><?=$v['status']==1?'开启':'关闭' ?></td> -->
  151. <td>
  152. <?php
  153. if($v['status'] == 1){
  154. echo '<span style="color:green;">开启</span>';
  155. }else{
  156. echo '<span style="color:red;">关闭</span>';
  157. }
  158. ?></td>
  159. </tr>
  160. <?php
  161. }
  162. ?>
  163. </tbody>
  164. </table>
  165. <ul class="pagination">
  166. <?php
  167. // 当前页面为1,就代表没有上一页,设置上一页无法点击
  168. $html = '';
  169. if($p == 1){
  170. $html .= '<li class="disabled">';
  171. $html .= ' <a>上一页</a>';
  172. $html .= '</li>';
  173. }else{
  174. $html .= '<li>';
  175. $html .= ' <a href="list.php?p='.($p-1).'">上一页</a>';
  176. $html .= '</li>';
  177. }
  178. // 循环遍历每页数据链接
  179. for($i=1;$i<=$page;$i++){
  180. $html .= '<li ';
  181. // 判断点击的是哪一页给哪一页添加active类
  182. if($i == $p){
  183. $html .= 'class="active"';
  184. }
  185. $html .= '>';
  186. $html .= ' <a href="list.php?p='.$i.'">'.$i.'</a>';
  187. $html .= '</li>';
  188. }
  189. //判断如果点击的页码为最后一页,就代表没有下一页,设置下一页无法点击
  190. if($p == $page){
  191. $html .= '<li class="disabled">';
  192. $html .= ' <a>下一页</a>';
  193. $html .= '</li>';
  194. }else{
  195. $html .= '<li>';
  196. $html .= ' <a href="list.php?p='.($p+1).'">下一页</a>';
  197. $html .= '</li>';
  198. }
  199. echo $html;
  200. ?>
  201. <!-- 配置输入框加跳转页 -->
  202. <form action="list.php" method="get" onclick="false">
  203. <input type="text" name="p">
  204. <button onclick="window.location.href=<?php echo '\'list.php?p='.$_GET['p'].'\''; ?>;">跳转</button>
  205. </form>
  206. </ul>
  207. </body>
  208. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议