2016-04-12 12 views
1

Burada iş parçacığı sayısını denedim, ancak şu ana kadar bana yardımcı olmuyor ya da burada bir şey özledim.Tek bir formda üç giriş dosyaları alanı ve veritabanına kaydetme

Yani üç giriş alanıyla bir formum var. Biliyorum bir alanda multiple kullanabiliyorum ama buna ihtiyacım var. Ben ekle hit

<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> 

Ve PHP parçası

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 ''; 
    } 

: Burada basit (burada yazabilmek için kaynak daha kompakt hale getirmek için bu alanda bazı silinmiş) sürüm

HTML parçasıdır Düğme, her giriş alanını bir satırda kaydeder ve bu girişteki dosya üç defadır. Örneğin:

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

Bu veritabanında bu üretecek: Her bir dosya sadece onun sütununda olmak yerine her dosyanın her giriş dosyası için 3 kez kaydedilir nasıl görebilirsiniz enter image description here

..

+0

Mantığınızı yapılandırmanın yolu, bunun gerçekleştiği anlamına gelir. Döngü Dosyası 1, tüm 3 alandaki aynı ada sahip satır ekleyin. File 2 Repeat, File 3 Repeat, End loop – scottevans93

+0

Buna yaklaşmak için 2 yöntem vardır, ya 3 dosyanın tümü aynı satırda kaydedilir veya her dosyanın kendi satırı vardır. Kullanım durumunuza hangisi daha uygun olurdu? – scottevans93

+0

Aynı satırda kaydetmek istiyorum. Sadece her dosya kendi sütununda olacak .. Resimde olduğu gibi 'upload_1' dosya1,' upload_2' dosya_2 tutmak için .. – Select

cevap

2

göndermek kodu için bu deneyin:

{ 
$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 ''; 
} 

}

+0

Bu işe yarar, ama mantık ilerledikçe kötü bir uygulamadır. – scottevans93

+0

Yani sadece bu farktır: $ stmt-> bindValue (": upload _". $ I, $ _FILES [$ file] ["isim"] [$ i], PDO :: PARAM_STR); '? – Select

+0

Sadece hatasını göstererek, her dosyayı tek tek satırlara ekleyen for döngüsünün içine ekleme sorgusunun yürütülmesini sağladım. – Warriorbik

İlgili konular