使用一个输入框上传多张图片

6
我已经创建了一个摄影网站,其中包括一个管理员页面,可以将照片上传到MySQL表中的不同类别。这部分功能已经实现,但是我只能一次上传一个文件,我希望能够选择多个图像。
以下是表单内容:
<form action="index.php" enctype="multipart/form-data" name="myForm" id="myForm" method="post">

    <select name="category" id="category">
        <option value="Nature">Nature</option>
        <option value="People">People</option>
        <option value="Abstract">Abstract</option>
    </select>

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

    <input type="submit" name="submit" id="submit" value="Add Images" />

</form>

以下是用于解析表单的PHP代码:

if (isset($_POST['submit'])) {

$category = mysql_real_escape_string($_POST['category']);
// Add this product into the database now
$sql = mysql_query("INSERT INTO images (category, date_added) 
    VALUES('$category',now())") or die (mysql_error());


 $pid = mysql_insert_id();
// Place image in the folder 
$newname = "$pid.jpg";
move_uploaded_file( $_FILES['fileField']['tmp_name'], "../photos/$newname");
header("location: thumbnail_generator.php"); 
exit();
}

我研究了HTML5文件输入方法,据我所知,我可以按照以下方式更改输入:

<input type="file" name="fileField[]" id="fileField" multiple="multiple"/>

这使我能够在网站上选择多个文件,但我不知道如何将其实现到我的php中。任何帮助将不胜感激。
7个回答

5
<form method="post" action="" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="500000">
Add Photos <input multiple="true" onchange="this.form.submit()" type="file" name="photos[]"/>

<input type="hidden" name="sendfiles" value="Send Files" />
</form>

    <?php
define ("MAX_SIZE","5000"); 
function getExtension($str)
{
         $i = strrpos($str,".");
         if (!$i) { return ""; }
         $l = strlen($str) - $i;
         $ext = substr($str,$i+1,$l);
         return $ext;
}

$errors=0;

if(isset($_POST['sendfiles'])) 
{
  $uploaddir = "files/"; //a directory inside
    foreach ($_FILES['photos']['name'] as $name => $value)
    {
        $filename = stripslashes($_FILES['photos']['name'][$name]);
     //get the extension of the file in a lower case format
          $extension = getExtension($filename);
         $extension = strtolower($extension);
        echo "\n This is the extension: ",$extension;
         if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) 
         {
        //print error message
        ?>
           <h4>Unknown extension!</h4>
          <?php
             $errors=1;
         }
        else
        {
            $size=filesize($_FILES['photos']['tmp_name'][$name]);
            if ($size > MAX_SIZE*1024)
            {
            ?>
               <h4>You have exceeded the size limit!</h4>
              <?php
                $errors=1;
            }
            $image_name=$filename.'.'.$extension;
            $newname="files/".$image_name;
            $copied = copy($_FILES['photos']['tmp_name'][$name], $newname);
            if (!$copied) 
            {
                ?>
                <h4>Copy unsuccessfull!</h4>
                <?php
                $errors=1;
            }

        }

    }
    //echo "Images uploaded successfully";
}
//mysql_close($dbhandle);
?>

1
欢迎来到Stack Overflow!虽然这理论上可以回答问题,但最好还是包含解释。 - Unni Kris
什么问题,我得到了警告:copy():文件名不能为空$copied = copy($ _FILES ['photos'] ['tmp_name'] [$name],$newname); - Sandesh

4

就我个人而言,我使用SWFUpload。实际上,Uploadify使用的是SWFUpload,所以取决于你的JavaScript水平,我会选择Uploadify或SWFUpload。 - Andrew Willis
swfupload的链接损坏了。 - bubakazouba

3

它的工作原理就好像有多个文件字段­文档一样,对于PHP来说是透明的。以下是一些简单的示例代码:

<html>
  <body>
    <form action="" method="post" enctype="multipart/form-data">
      <input type="file" name="fileField[]" id="fileField" multiple="multiple">
      <input type="text" name="test" value="test">
      <input type="submit" name="submit">
    </form>
  </body>
</html>
<?php
var_dump($_FILES, $_POST);

将其存储在您的主机上并请求它。然后可以对其进行操作,它将显示$_FILES$_POST数组的结构。

示例输出:

array
  'fileField' => 
    array
      'name' => 
        array
          0 => string 'hakre-iterator-fun-cut-top.png' (length=30)
          1 => string 'hakre-iterator-fun-cut-middle.png' (length=33)
      'type' => 
        array
          0 => string 'image/png' (length=9)
          1 => string 'image/png' (length=9)
      'tmp_name' => 
        array
          0 => string '/tmp/php1A2.tmp' (length=15)
          1 => string '/tmp/php1A3.tmp' (length=15)
      'error' => 
        array
          0 => int 0
          1 => int 0
      'size' => 
        array
          0 => int 234001
          1 => int 213058
array
  'test' => string 'test' (length=4)
  'submit' => string 'Submit' (length=6)

查看 上传多个文件­文档


1

简单!只需在您的输入标签中添加multiple="true"。

<input name "example" type="file" multiple="true"/>

0

试一下这个。

http://www.uploadify.com/demos/

Uploadify是一款功能强大且高度可定制的文件上传脚本。使用Uploadify非常容易上手,只需要很少的编码知识和努力即可。

这更像是一条评论而不是一个答案。 - hakre

0

你将收到一个图像数组 -> fileField[]。只需遍历此数组并以与之前添加它们相同的方式添加图像即可。此外,我建议使用这个非常好的脚本 - http://valums.com/ajax-upload/

编辑:不要忘记实施至少一些安全检查,例如最小和最大上传大小、文件扩展名和 MIME 类型检查!即使是用于后端,这也可能导致不愉快的事件。


0

创建一个数组不也可以吗?他可以这样做:

$images = array();

那么在他的表单中只需添加一个“添加到图像列表”按钮?从那里,他可以添加尽可能多的图像,然后只需迭代数组并添加到数据库即可?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接