三个输入文件字段在一个表单中并保存到数据库中

时间:2016-04-12 12:22:19

标签: php html mysql

我试过这里的线程数量是这样的,但到目前为止没有人帮我,或者我在这里想念一些东西。

所以我有一个带有三个输入字段的表单..我知道我可以在一个字段上使用multiple但我需要这样。这是简单的版本(删除了一些字段,以便在此处发布更紧凑的源代码)

HTML部分:

<form class="form-horizontal" name="form-horizontal" action="" method="post" role="form" enctype="multipart/form-data" >
   <div class="form-group">
        <label class="control-label col-sm-2" for="upload_one">Upload_one: </label>
            <div class="col-sm-10">
                <input type="file" class="form-control" name="file[]" id="upload_one">              
            </div>
   </div> 
   <div class="form-group">
        <label class="control-label col-sm-2" for="upload_two">Upload_two:</label>
            <div class="col-sm-10">
                <input type="file" class="form-control" name="file[]" id="upload_two">
            </div>                      
   </div>
   <div class="form-group">
        <label class="control-label col-sm-2" for="upload_three">Upload_three: </label>
            <div class="col-sm-10">
                <input type="file" class="form-control" name="file[]" id="upload_three" multiple>
            </div>                      
   </div>                                                                                                                                                                                                                                                 
   <div class="form-group"> 
        <div class="col-sm-offset-2 col-sm-4">
           <input type="submit" name="add" value="Add New Lesson" class="btn btn-primary btn-block">
        </div>
   </div>                     
</form>

PHP部分

if (isset($_POST["add"])) {
$pdo = Database::connect();
$msg = "";
$permitted = array('application/vnd.ms-excel', 'application/pdf', 'application/msword', 'image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/bmp');

if (count($_FILES["file"]) > 0) {     
    $folderName = "uploads/";

    $sql = "INSERT INTO upload ( upload_one, upload_two, upload_three, upload_size, upload_type ) 
                    VALUES ( :upload_one, :upload_two, :upload_three, :upload_size, :upload_type )";
    $stmt = $pdo->prepare($sql);

   foreach (array_keys($_FILES) as $file) {
     for ($i = 0; $i < count($_FILES[$file]["name"]); $i++) {

      if ($_FILES[$file]["name"][$i] <> "") {     
        if ($permitted) {

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


          $ext = substr(strrchr($fileName, "."), 1);
          $_FILES[$file]["name"][$i] = rand(10000, 990000) . '-' .$fileName;

          $filepath = $folderName . $_FILES[$file]["name"][$i];

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

            try {
              $stmt->bindValue(":upload_one", $_FILES[$file]["name"][$i], PDO::PARAM_STR);  
              $stmt->bindValue(":upload_two", $_FILES[$file]["name"][$i], PDO::PARAM_STR);  
              $stmt->bindValue(":upload_three", $_FILES[$file]["name"][$i], PDO::PARAM_STR);                            
              $stmt->bindValue(":upload_size", $fileSize, PDO::PARAM_STR);
              $stmt->bindValue(":upload_type", $fileType, 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"][$i] . "</strong> isn't permitted. <br>";
        }
      }
    }

    $msg .= (strlen($smsg) > 0) ? successMessage($smsg) : "";
    $msg .= (strlen($emsg) > 0) ? errorMessage($emsg) : "";
  } } 
    else {
       echo '';
  }

当我点击Add按钮时,它将保存一行中的每个输入字段,并且该输入的文件是三次。例如:

`input file_1` have doc1.docx
`input file_2` have doc2.docx
`input file_3` have doc3.docx

这将在数据库中产生: enter image description here

您可以看到每个文件如何为每个输入文件保存3次,而不是每个文件只在其列中保存一个..

1 个答案:

答案 0 :(得分:2)

尝试使用提交代码:

{
$pdo = Database::connect();
$msg = "";
$permitted = array('application/vnd.ms-excel', 'application/pdf', 'application/msword', 'image/gif', 'image/jpeg', 'image/jpg', 'image/png', 'image/bmp');

if (count($_FILES["file"]) > 0) 
{     
    $folderName = "uploads/";

    $sql = "INSERT INTO upload ( upload_one, upload_two, upload_three, upload_size, upload_type ) 
                    VALUES ( :upload_0, :upload_1, :upload_2, :upload_size, :upload_type )";
    $stmt = $pdo->prepare($sql);

   foreach (array_keys($_FILES) as $file) 
   {
     for ($i = 0; $i < count($_FILES[$file]["name"]); $i++) 
     {

      if ($_FILES[$file]["name"][$i] <> "") 
      {     
        if ($permitted) 
        {

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


          $ext = substr(strrchr($fileName, "."), 1);
          $_FILES[$file]["name"][$i] = rand(10000, 990000) . '-' .$fileName;

          $filepath = $folderName . $_FILES[$file]["name"][$i];

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

            try {
              $stmt->bindValue(":upload_".$i, $_FILES[$file]["name"][$i], PDO::PARAM_STR);  
              $stmt->bindValue(":upload_size", $fileSize, PDO::PARAM_STR);
              $stmt->bindValue(":upload_type", $fileType, PDO::PARAM_STR);              



            } catch (Exception $ex) {
              $emsg .= "<strong>" . $ex->getMessage() . "</strong>. <br>";
            }
          }
        } else {
          $emsg .= "This file <strong>" . $_FILES[$file]["name"][$i] . "</strong> isn't permitted. <br>";
        }
      }
    }

    $msg .= (strlen($smsg) > 0) ? successMessage($smsg) : "";
    $msg .= (strlen($emsg) > 0) ? errorMessage($emsg) : "";
  }
      $stmt->execute();
      $result = $stmt->rowCount();
      if ($result > 0) {
        // file uplaoded successfully.
      } else {
        // failed to insert into database.
      }

} 
else 
{
   echo '';
}

}

相关问题