PHP開發之多個檔案上傳到My...LOGIN

PHP開發之多個檔案上傳到MySql資料庫(二)

首先還是要製作一個HTML頁面使用<form>表單

#
<body>
  <form action="tu5.php" method="post" enctype="multipart/form-data">
    上传文件:<br><br>
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
    第一张图:<input type="file" name='myfile[]'><br><br>
    第二张图:<input type="file" name='myfile[]'><br><br>
    <input style="margin-left: 8%;" type="submit" value="上传">
  </form>
</body>

這裡我們示範一次上傳2張圖片。

2276.jpg

可以透過點擊兩個「選擇檔案」按鍵選擇兩張圖片,然後點擊「上傳」一次上傳兩張圖片。

展示完整的PHP後端功能代碼:

<?php
echo "<pre>";
echo "<hr/>";
//1.获取上传文件信息
$upfile = $_FILES["myfile"];
$typelist = array("image/jpeg","image/jpg","image/png","image/gif"); //定义允许的类型
$path="uploads/";  //定义一个上传过后的目录
//重新组装上传文件的数据,以便依次上传
$uploadFiles = array();
foreach($upfile as $key =>$value) {
  foreach($value as $k => $v){
    $uploadFiles[$k][$key]=$v;
  }
}

//遍历上传
foreach($uploadFiles as $k => $v) {
  //2. 过滤上传文件的错误号
  if ($v['error'] > 0) {
    //获取错误信息
    switch ($v['error']) {
      case 1:
        $info = "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。";
        break;
      case 2:
        $info = "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。";
        break;
      case 3:
        $info = "文件只有部分被上传。";
        break;
      case 4:
        $info = "没有文件被上传。 ";
      case 6:
        $info = "找不到临时文件夹。";
        break;
      case 7:
        $info = "文件写入失败";
        break;
    }
    die("上传文件{$k}错误,原因:" . $info);
  }
  //3. 本次上传文件到小的过滤(自己选择)
  if ($v['size'] > 100000) {
    die('上传文件{$k}大小超出限制!');
  }
  //4. 类型过滤
  if (!in_array($v["type"], $typelist)) {
    die("上传文件{$k}类型非法!" . $v["type"]);
  }
  //5. 上传后的文件名定义(随机获取一个文件名(保持后缀名不变))
  $fileinfo = pathinfo($v["name"]);//解析上传文件名字
  do{
    $newfile = date("Y-m-d,H-i-s") . rand(1000, 9999) . "." . $fileinfo["extension"];
  } while (file_exists($path . $newfile));
  //6. 执行文件上传
  //判断是否是一个上传的文件
  if (is_uploaded_file($v["tmp_name"])) {
    //执行文件上传(移动上传文件)
    if (move_uploaded_file($v["tmp_name"], $path . $newfile)) {
      //echo "文件{$K}上传成功!";
      //执行写入数据库操作
      $link = mysqli_connect('localhost','root','root') or die("数据库连接失败!");
      $db = mysqli_select_db($link,'test');
      mysqli_set_charset($link,'utf8');
      $filepath = $path.$newfile;
      $name = $v['name'];
      $size = $v['size'];
      $sql = "insert into img(id,name,size,pic) value(null,'$name','$size','$filepath')";
      mysqli_query($link,$sql);
      mysqli_close($link);
    } else {
      die("上传文件{$k}失败");
    }
  } else {
    die("不是一个上传文件!");
  }
}
?>


#
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>多个文件上传表单</title> <style type="text/css"> input { background-color: yellow; border: 1px inset #CCCCCC; } </style> </head> <body> <form action="tu5.php" method="post" enctype="multipart/form-data"> 上传文件:<br><br> <input type="hidden" name="MAX_FILE_SIZE" value="1000000"> 第一张图:<input type="file" name='myfile[]'><br><br> 第二张图:<input type="file" name='myfile[]'><br><br> <input style="margin-left: 8%;" type="submit" value="上传"> </form> </body> </html> <?php echo "<pre>"; echo "<hr/>"; //1.获取上传文件信息 $upfile = $_FILES["myfile"]; $typelist = array("image/jpeg","image/jpg","image/png","image/gif"); //定义允许的类型 $path="uploads/"; //定义一个上传过后的目录 //重新组装上传文件的数据,以便依次上传 $uploadFiles = array(); foreach($upfile as $key =>$value) { foreach($value as $k => $v){ $uploadFiles[$k][$key]=$v; } } //遍历上传 foreach($uploadFiles as $k => $v) { //2. 过滤上传文件的错误号 if ($v['error'] > 0) { //获取错误信息 switch ($v['error']) { case 1: $info = "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值。"; break; case 2: $info = "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。"; break; case 3: $info = "文件只有部分被上传。"; break; case 4: $info = "没有文件被上传。 "; case 6: $info = "找不到临时文件夹。"; break; case 7: $info = "文件写入失败"; break; } die("上传文件{$k}错误,原因:" . $info); } //3. 本次上传文件到小的过滤(自己选择) if ($v['size'] > 100000) { die('上传文件{$k}大小超出限制!'); } //4. 类型过滤 if (!in_array($v["type"], $typelist)) { die("上传文件{$k}类型非法!" . $v["type"]); } //5. 上传后的文件名定义(随机获取一个文件名(保持后缀名不变)) $fileinfo = pathinfo($v["name"]);//解析上传文件名字 do{ $newfile = date("Y-m-d,H-i-s") . rand(1000, 9999) . "." . $fileinfo["extension"]; } while (file_exists($path . $newfile)); //6. 执行文件上传 //判断是否是一个上传的文件 if (is_uploaded_file($v["tmp_name"])) { //执行文件上传(移动上传文件) if (move_uploaded_file($v["tmp_name"], $path . $newfile)) { //echo "文件{$K}上传成功!"; //执行写入数据库操作 $link = mysqli_connect('localhost','root','root') or die("数据库连接失败!"); $db = mysqli_select_db($link,'test'); mysqli_set_charset($link,'utf8'); $filepath = $path.$newfile; $name = $v['name']; $size = $v['size']; $sql = "insert into img(id,name,size,pic) value(null,'$name','$size','$filepath')"; mysqli_query($link,$sql); mysqli_close($link); } else { die("上传文件{$k}失败"); } } else { die("不是一个上传文件!"); } } ?>
章節課件