同一表单上的多个上传字段

时间:2016-04-08 12:56:58

标签: php mysql

目前我有这个文件上传表格

 <form class="form-horizontal" action="" method="post" role="form" enctype="multipart/form-data">                         
     <div class="form-group">
        <label class="control-label col-sm-2" for="upload_sheet">sheets:</label>
            <div class="col-sm-10">
                <input type="file" class="form-control" id="file" name="file" id="upload_sheet">
            </div>
     </div>                                                                                                                                                                                                                               
     <div class="form-group"> 
            <div class="col-sm-offset-2 col-sm-4">
                <input type="submit" name="add" value="Add New" class="btn btn-primary btn-block">
            </div>
     </div>
</form>

这是php部分

if (count($_FILES["file"]) > 0) {

$folderName = "uploads/";

$sql = "INSERT INTO document_upload ( upload_sheet, upload_size, upload_type, document_path) 
                VALUES ( :upload_sheet, :upload_size, :upload_type, :document_path)";
$stmt = $pdo->prepare($sql);

    if ($permitted) {

      $fileSize = $_FILES['file']['size'];
      $fileType = $_FILES['file']['type'];
      $fileName = $_FILES['file']['name'];
      $tmpName  = $_FILES['file']['tmp_name'];

  $ext = substr(strrchr($fileName, "."), 1);
  $randName = rand(10000, 990000) . '-' .$fileName;
      $filepath = $folderName . $randName;

      if (!move_uploaded_file($tmpName, $filepath)) {
        $emsg .= "Error while - <strong>" . $_FILES["file"]["name"] . "</strong> is uploaded. Please try again. <br>";
      } else {
        $smsg .= "The file <strong>" . $_FILES["file"]["name"] . "</strong> is added successfully. <br>";
        /*             * ****** insert into database starts ******** */

        try {
          $stmt->bindValue(":upload_sheet", $randName, PDO::PARAM_STR);              
          $stmt->bindValue(":upload_size", $fileSize, PDO::PARAM_STR);
          $stmt->bindValue(":upload_type", $fileType, PDO::PARAM_STR); 
          $stmt->bindValue(":document_path", $filepath, PDO::PARAM_STR);                                                                                                                 

          $stmt->execute();
          $result = $stmt->rowCount();
          if ($result > 0) {
            // file uplaoded successfully.
          } else {
            // failed to insert into database.
          }
        } catch (Exception $ex) {
          $emsg .= "<strong>" . $ex->getMessage() . "</strong>. <br>";
        }
      }
    } else {
      $emsg .= "This file <strong>" . $_FILES["file"]["name"] . "</strong> isn't permitted. <br>";
    }

这非常有效,我可以将新文件添加到数据库中。我的问题是如何为该表单上的文件添加第二个<input>以及我需要在php部分更改什么才能从同一表单上的2个输入字段上传2个文件?

3 个答案:

答案 0 :(得分:1)

您只需添加html标签,如下所示:

<input type="file" class="form-control" id="file2" name="file2" >

确保有不同的名字&#39; POST时的属性,因为它是PHP用来从表单中识别数据的。

然后在PHP中,只需使用

访问该文件
$_FILES['file2']['name']

旁注,请确保您只有一个&#39; id&#39;对于html元素,以避免歧义。 (表单中的文件元素有2个id字段)。希望这有帮助!

答案 1 :(得分:1)

表单部分:您可以在输入标记的末尾添加多个,如下所示:

<input type="file" class="form-control" id="file" name="file" id="upload_sheet" multiple>
<input type="file" class="form-control" id="file" name="file2" id="upload_sheet2" multiple>

为第二个输入更改名称 id 以使其唯一。

然后,用户可以选择多于1个文件并将其添加到上传中。

HTML5

支持

多次

对于PHP中的2个不同输入,您可以更改第一个 if 语句

if (count($_FILES["file"]) > 0 || count($_FILES["file2"]) > 0) {

 //your logic/uploading

}

|| = 如果要求两个字段都包含您执行的文件&amp;&amp; = AND

答案 2 :(得分:1)

HTML(文件列表):

<input type="file" class="form-control" name="files[]" id="upload_sheet_0">
<input type="file" class="form-control" name="files[]" id="upload_sheet_1">
...

这种结构也可以通过点击添加更多文件。 提示:JavaScript:.append('<input name="files[]" />')

<强> PHP:

foreach($_FILES['files'] AS $file) {
   handleUpload($file); // contains your upload-logic
}