0

我环顾四周,一直在努力寻找如何上传多张图片(.jpg/.png/等)。对于我的任务,我希望将 5 张图片上传到数据库记录。到目前为止,我什至很难在一张唱片中同时上传 5 个。我使用了 Ws3 网站上的 PHP,它运行成功,但此代码仅适用于一个图像。

PHP 代码 -

 $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $_FILES["file"]["name"]);
    $extension = end($temp);

if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 2000000)
&& in_array($extension, $allowedExts))
{
  if ($_FILES["file"]["error"] > 0)
  {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
  }
  else
  {

    if (file_exists("upload/" . $_FILES["file"]["name"]))
    {

    }
    else
    {
        move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . uniqid() . "_" . $_FILES["file"]["name"]);
    }
  }
}
else
{
    $error =  "Invalid file";
}

我的HTML如下,

<label for="file">Filename:</label>
        <input type="file" name="file" id="file">

        <input type="file" name="file" id="file">

        <input type="file" name="file" id="file">

        <input type="file" name="file" id="file">

        <input type="file" name="file" id="file">

任何建议都非常感谢伙计们!干杯

4

3 回答 3

6

首先,添加enctype="multipart/form-data"到您的表单中。然后将file字段名称更改为:

<input type="file" name="file[]" id="file" >
<input type="file" name="file[]" id="file" >
<input type="file" name="file[]" id="file" >

这将创建一个提交的文件数组。现在您将能够对foreach文件执行操作。快速示例:

foreach ($_FILES['file']['name'] as $f => $name) {

}

围绕您现有的代码,然后添加[$f]到每个$_FILES["file"]变量。所以$_FILES["file"]["size"]必须改成$_FILES["file"]["size"][$f]等等。在foreach我指$name的是$_FILES["file"]["name"][$f],所以你可以使用$name

基于您的脚本的完整 php 代码:

foreach ($_FILES['file']['name'] as $f => $name) {
 $allowedExts = array("gif", "jpeg", "jpg", "png");
    $temp = explode(".", $name);
    $extension = end($temp);

if ((($_FILES["file"]["type"][$f] == "image/gif")
|| ($_FILES["file"]["type"][$f] == "image/jpeg")
|| ($_FILES["file"]["type"][$f] == "image/jpg")
|| ($_FILES["file"]["type"][$f] == "image/png"))
&& ($_FILES["file"]["size"][$f] < 2000000)
&& in_array($extension, $allowedExts))
{
  if ($_FILES["file"]["error"][$f] > 0)
  {
    echo "Return Code: " . $_FILES["file"]["error"][$f] . "<br>";
  }
  else
  {

    if (file_exists("upload/" . $name))
    {

    }
    else
    {
        move_uploaded_file($_FILES["file"]["tmp_name"][$f], "upload/" . uniqid() . "_" . $name);
    }
  }
}
else
{
    $error =  "Invalid file";
}
}

最后,我建议您在不同的网站上了解有关 PHP 的更多信息。W3schools 很简单,但也不是您的最佳选择。例如,您正在检查以下内容:

    if ((($_FILES["file"]["type"][$f] == "image/gif")
|| ($_FILES["file"]["type"][$f] == "image/jpeg")
|| ($_FILES["file"]["type"][$f] == "image/jpg")
|| ($_FILES["file"]["type"][$f] == "image/png"))
&& ($_FILES["file"]["size"][$f] < 2000000)
&& in_array($extension, $allowedExts))

但只有数组就足够了,如下所示:

    if ($_FILES["file"]["size"][$f] < 2000000 && in_array($extension, $allowedExts))

$_FILES["file"]["type"]并不总是按预期返回类型。我们在音频和视频文件中多次看到它。关于 SO 关于 MIME 类型的另一篇文章引用了 W3schools 脚本:PHP: $_FILES["file"]["type"] is useless

在 StackOverflow 上提出新问题之前,请先进行搜索。我只是为你写了一个很长的答案,但是对于这类问题,同样的事情已经做了很多次了。https://stackoverflow.com/search?q=multiple+upload+php

希望它能回答你的问题,祝你学习 PHP 好运。

于 2013-10-30T15:23:10.000 回答
0

我认为问题出在您的 HTML 中……而不是其中的五个:

<input type="file" name="file" id="file">

尝试这样做:

<input type="file" name="file[]">

这将提交一组文件,而不是尝试以相同的输入名称提交多个文件。

附带说明一下,您不应该在多个元素上使用相同的 id 属性。也许你打算使用一个类?

于 2013-10-30T19:32:53.063 回答
0
if (isset($_POST["kirim"])) {

    $jumlah = count($_FILES['gambar']['size']);     // cari jml gambar 
    $size = $_FILES['gambar']['size'];              //cek ukuran file
    $ext = $_FILES['gambar']['type'];               // cek extensi file
    $max_size = 1000000;
    $htg = implode(" ",$size);

    if ($htg < 1){
        echo "<script>alert('pilih file yang akan di upload !');
        location.href='index.php';</script>";
    }   
    elseif(max($size) > $max_size){
        echo "<script>alert('ukuran file terlalu besar');
        location.href='index.php';</script>";
    }elseif (in_array("application/octet-stream", $ext) || in_array("application/pdf",$ext) || in_array("text/plain", $ext)) {
        echo "<script>alert('file harus jpg atau png semua !');
        location.href='index.php';</script>";
    }else{   
          for ($i=0; $i < $jumlah; $i++) { 
                $file_name = $_FILES['gambar']['name'][$i];
                $tmp_name = $_FILES['gambar']['tmp_name'][$i];          
                move_uploaded_file($tmp_name, "uploads/".$file_name);

                mysqli_query($conn,"INSERT INTO images VALUES
                ('','$file_name','$tmp_name')");                
            }
            echo "<script>alert('Upload Berhasil');location.href='index.php';</script>";
    }
}
于 2018-10-17T08:42:29.280 回答