博客列表 >文件上传与分页展示操作

文件上传与分页展示操作

天宁
天宁原创
2022年05月09日 00:13:44495浏览

文件上传

单文件上传

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <?php
  4. // $_FILES: PHP超全局变量数量, 保存着上传文件的全部信息
  5. printf('<pre>%s</pre>', print_r($_FILES, true));
  6. /**
  7. * 1. $_FILES: 二维数组,每个元素对应一个上传的文件
  8. * 2. name: 原始文件名
  9. * 3. type: 文件类型, mime类型
  10. * 4. tmp_name: 临时目录
  11. * 5. error: 错误代码
  12. * 5. size: 文件大小(字节表示 byte)
  13. */
  14. if (isset($_FILES['my_pic'])) {
  15. $name = $_FILES['my_pic']['name'];
  16. $tmpName = $_FILES['my_pic']['tmp_name'];
  17. $error = $_FILES['my_pic']['error'];
  18. if ($error > 0) {
  19. $tips = '<span style="color:red">上传失败:</span>';
  20. switch ($error) {
  21. case 1:
  22. $tips .= '上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值';
  23. break;
  24. case 2:
  25. $tips .= '文件大小超过了上传表单中MAX_FILE_SIZE最大值';
  26. break;
  27. case 3:
  28. $tips .= '文件只有部分被上传';
  29. break;
  30. case 4:
  31. $tips .= '没有文件被上传';
  32. break;
  33. case 6:
  34. $tips .= '找不到临时目录';
  35. break;
  36. case 7:
  37. $tips .= '文件写入失败,请检查目录权限';
  38. break;
  39. }
  40. echo "<p>$tips</p>";
  41. } else {
  42. // 判断用户是不是通过合法的POST方式上传
  43. if (is_uploaded_file($tmpName)) {
  44. // 设置允许上传文件类型的白名单
  45. $allow = ['jpg', 'jpeg', 'png', 'gif'];
  46. // 获取文件扩展名
  47. $ext = pathinfo($name)['extension'];
  48. if (in_array($ext, $allow)) {
  49. // 二个条件都满足了
  50. // 1. post方式上传的 2. 文件类型是合法的
  51. // 目标目录
  52. $path = 'uploads/';
  53. // 自定义目标文件名
  54. $dest = $path . md5($name) . '.' . $ext;
  55. // 将文件从临时目录中移动到目标目录中并重命名
  56. if (move_uploaded_file($tmpName, $dest)) {
  57. echo '<p style="color:green">上传成功</p>';
  58. // 预览
  59. echo "<img src='$dest' width='200' >";
  60. } else {
  61. echo '<p style="color:red">移动失败</p>';
  62. }
  63. } else {
  64. echo '<p style="color:red">文件类型错误</p>';
  65. }
  66. } else {
  67. echo '<p style="color:red">非法方式上传</p>';
  68. }
  69. }
  70. }
  71. ?>
  72. <head>
  73. <meta charset="UTF-8">
  74. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  75. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  76. <title>文件上传的表单构造,超全局变量$_FILE</title>
  77. </head>
  78. <body>
  79. <!-- 允许上传文件的表单特征:
  80. 1. method="POST"
  81. 2. enctype="multipart/form-data" -->
  82. <form action="" method="POST" enctype="multipart/form-data">
  83. <fieldset>
  84. <legend>单文件上传</legend>
  85. <!-- 浏览器中限制上传文件的大小,写到一个隐藏域中,并写到type=file之前 -->
  86. <input type="hidden" name="MAX_FILE_SIZE" value="300000">
  87. <input type="file" name="my_pic">
  88. <button>上传</button>
  89. </fieldset>
  90. </form>
  91. </body>
  92. </html>

多文件上传

  1. <!DOCTYPE html>
  2. <html lang="zh-CN">
  3. <?php
  4. // $_FILES: PHP超全局变量数量, 保存着上传文件的全部信息
  5. printf('<pre>%s</pre>', print_r($_FILES, true));
  6. if (isset($_FILES['my_pic'])) {
  7. // 这时只需要遍历 $_FILES['my_pic']['error'] 这个数组
  8. foreach ($_FILES['my_pic']['error'] as $key => $error) {
  9. if ($error === 0) {
  10. // 临时文件名
  11. $tmpName = $_FILES['my_pic']['tmp_name'][$key];
  12. // 原始文件名
  13. $name = $_FILES['my_pic']['name'][$key];
  14. // 目标文件名
  15. $destFile = 'uploads/' . $name;
  16. move_uploaded_file($tmpName, $destFile);
  17. echo "<img src='$destFile' width='200'>";
  18. }
  19. }
  20. }
  21. ?>
  22. <head>
  23. <meta charset="UTF-8">
  24. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  25. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  26. <title>多文件上传2</title>
  27. </head>
  28. <body>
  29. <form action="" method="POST" enctype="multipart/form-data">
  30. <fieldset>
  31. <legend>多文件上传:批量上传</legend>
  32. <!-- multiple: 允许同时选择多个 -->
  33. <input type="file" name="my_pic[]" multiple>
  34. <button>上传</button>
  35. </fieldset>
  36. </form>
  37. </body>
  38. </html>

分页展示操作

起始索引/偏移量=(当前页 - 1 ) * 显示数量

具体的数据获取细节
  1. <?php
  2. // 1. 连接数据库
  3. $db = new PDO('mysql:dbname=phpedu', 'root', 'root');
  4. // 2. 当前页, 在GET参数中
  5. // https://www.php.cn/course.html?p=5
  6. // $page = isset($_GET['p']) ? $_GET['p'] : 1;
  7. // null合并
  8. $page = $_GET['p'] ?? 1;
  9. echo "当前页: p= $page <br>";
  10. // 3. 每页显示数量
  11. $num = 5;
  12. // 4. 记录总数
  13. $sql = 'SELECT COUNT(`id`) AS `total` FROM `staff`';
  14. $stmt = $db->prepare($sql);
  15. $stmt->execute();
  16. // 将某列的仠与php变量绑定 , `total` => $total
  17. $stmt->bindColumn('total', $total);
  18. $stmt->fetch(PDO::FETCH_ASSOC);
  19. echo "总记录数量: $total <br>";
  20. // 5. 总页数
  21. // 10.1 => 11 ceil: 向上取整,不丢数据
  22. $pages = ceil($total / $num);
  23. echo "总页数: $pages <br>";
  24. // 6. 偏移量
  25. // offset = (page - 1) * num
  26. $offset = ($page - 1) * $num;
  27. echo "偏移量: $offset <br>";
  28. // 7. 分页数据
  29. // $sql = "SELECT * FROM `staff` LIMIT $num OFFSET $offset";
  30. $sql = "SELECT * FROM `staff` LIMIT $offset, $num";
  31. $stmt = $db->prepare($sql);
  32. $stmt->execute();
  33. $staffs = $stmt->fetchAll(PDO::FETCH_ASSOC);
  34. // 遍历
  35. echo '<hr>';
  36. if (count($staffs) === 0) {
  37. echo '查询结果为空';
  38. } else {
  39. foreach ($staffs as $staff) {
  40. extract($staff);
  41. printf('$d-%s-%s-%s<br>', $id, $name, $sex, $email);
  42. }
  43. }
  44. echo '<hr>';
分页展示的代码
  1. <?php require 'demo5.php' ?>
  2. <!DOCTYPE html>
  3. <html lang="zh-CN">
  4. <head>
  5. <meta charset="UTF-8">
  6. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  7. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  8. <title>页面展示分页数据</title>
  9. <style>
  10. table {
  11. width: 400px;
  12. border-collapse: collapse;
  13. text-align: center;
  14. }
  15. table th,
  16. table td {
  17. border: 1px solid;
  18. padding: 5px;
  19. }
  20. table thead {
  21. background-color: lightcyan;
  22. }
  23. table caption {
  24. font-size: larger;
  25. margin-bottom: 8px;
  26. }
  27. p>a {
  28. text-decoration: none;
  29. color: #555;
  30. border: 1px solid;
  31. padding: 5px 10px;
  32. margin: 10px 2px;
  33. }
  34. .active {
  35. background-color: seagreen;
  36. color: white;
  37. border: 1px solid seagreen;
  38. }
  39. </style>
  40. </head>
  41. <body>
  42. <table>
  43. <caption>员工信息表</caption>
  44. <thead>
  45. <tr>
  46. <th>ID</th>
  47. <th>姓名</th>
  48. <th>性别</th>
  49. <th>邮箱</th>
  50. </tr>
  51. </thead>
  52. <tbody>
  53. <?php foreach ($staffs as $staff) : extract($staff) ?>
  54. <tr>
  55. <td><?= $id ?></td>
  56. <td><?= $name ?></td>
  57. <td><?= $sex ?></td>
  58. <td><?= $email ?></td>
  59. </tr>
  60. <?php endforeach ?>
  61. </tbody>
  62. </table>
  63. <p>
  64. <?php for ($i = 1; $i <= $pages; $i++) : ?>
  65. <?php
  66. $url = $_SERVER['PHP_SELF'] . '?p=' . $i;
  67. $active = $i == $_GET['p'] ? 'active' : null;
  68. ?>
  69. <a href="<?= $url ?>" class="<?= $active ?>"><?= $i ?></a>
  70. <?php endfor ?>
  71. </p>
  72. </body>
  73. </html>
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议