欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-13 12:33:59
...

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

命名空间的进阶

  • 使用 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>