2017-11-16 35 views
0

比較的新しいPHPです。ワンタッチで複数の画像をデータベースにアップロードする必要があります。これがコードです。個々の画像を個別に読み込むためにforeachループを追加する必要があることを理解していますが、個々の画像を挿入するための適切な場所を見つけることはできません。どんな答えでも大歓迎です。複数の画像をmysqlデータベースにアップロード

<?php 

    error_reporting(~E_NOTICE); // avoid notice 

    require_once 'dbconfig.php'; 

    if(isset($_POST['btnsave'])) 
    { 
     $carname = $_POST['car_name'];// car name 
     $carmodel = $_POST['car_model'];// car model 
     $caramount = $_POST['car_amount'];// car amount 

     $imgFile = $_FILES['car_image']['name']; 
     $tmp_dir = $_FILES['car_image']['tmp_name']; 
     $imgSize = $_FILES['car_image']['size']; 


     if(empty($carname)){ 
      $errMSG = "Please Enter Name of the Car."; 
     } 
     else if(empty($carmodel)){ 
      $errMSG = "Please Enter Model Number of the car."; 
     } 
     else if(empty($caramount)){ 
      $errMSG = "Please Enter the cost of the car."; 
     } 
     else if(empty($imgFile)){ 
      $errMSG = "Please Select Image File."; 
     } 
     else 
     { 

      $upload_dir = 'user_images/'; // upload directory 

      $imgExt = strtolower(pathinfo($imgFile,PATHINFO_EXTENSION)); // get image extension 

      // valid image extensions 
      $valid_extensions = array('jpeg', 'jpg', 'png', 'gif'); // valid extensions 

      // rename uploading image 
      $carpic = rand(1000,1000000).".".$imgExt; 

      // allow valid image file formats 
      if(in_array($imgExt, $valid_extensions)){    
       // Check file size '5MB' 
       if($imgSize < 5000000)    { 
        move_uploaded_file($tmp_dir,$upload_dir.$carpic); 
       } 
       else{ 
        $errMSG = "Sorry, your file is too large."; 
       } 
      } 
      else{ 
       $errMSG = "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";   
      } 
     } 


     // if no error occured, continue .... 
     if(!isset($errMSG)) 
     { 
      $stmt = $DB_con->prepare('INSERT INTO tbl_cars(carName,carModel,carAmount,carPic) VALUES(:cname, :cmodel, :camount, :cpic)'); 
      $stmt->bindParam(':cname',$carname); 
      $stmt->bindParam(':cmodel',$carmodel); 
      $stmt->bindParam(':camount',$caramount); 
      $stmt->bindParam(':cpic',$carpic); 
      if($stmt->execute()) 
      { 
       $successMSG = "new record succesfully inserted ..."; 
       header("refresh:5;car_display.php"); // redirects image view page after 5 seconds. 
      } 
      else 
      { 
       $errMSG = "error while inserting...."; 
      } 
     } 
    } 
?> 

私はループごとに単純なものを追加する必要があることを知っています。実行は失敗しています。 誰かがこれは、基本的にポストあなたはそれがファイル の配列で、その後、あなたのPHPでのforeachを呼び出しますされるHTMLで指定する必要が

<tr> 
     <td><label class="control-label">Car Img.</label></td> 
     <td><input class="input-group" type="file" name="car_image" multiple="multiple" accept="image/*" /></td> 
+0

あなたは、あなたが実行するつもりどんな操作、それぞれとすべての画像に反復それはサイズだ確認し、それの名前を変更するには答え、ループを持っていますDBに挿入します。実際には、一連の画像を作成して画像をループすることができます。 – datelligence

+0

はい、私はちょうどそれを正しく実行するように思えません。私はPHPにとって非常に新しいことを忘れないでください。 –

+0

誰もあなたを救うつもりはありません...複数のファイルがある場合、 '$ _FILES'は異なって見えます。あなたの '

' *(あなたのHTMLを見てうまくいくでしょうか?)のあなたの ''はどうですか?フォームが送信されるときに 'print_r($ _ FILES)'を試しましたか?私はあなたがこれを試し、あなたに "保存"を求める代わりに少し探して答えを見つけることができたかもしれないと思います。あなたは新しく、それは悪くはありません。 – AymDev

答えて

0

をアップロードHTMLビットであるミー

を保存します配列になります。

私の例はPDOを使用していないか、あなたの例に適合していますが、複数のファイルをアップロードしています。

PHP:

<?php 
if(isset($_FILES['files'])){ 
    $errors= array(); 
    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name){ 
     $file_name = $key.$_FILES['files']['name'][$key]; 
     $file_size =$_FILES['files']['size'][$key]; 
     $file_tmp =$_FILES['files']['tmp_name'][$key]; 
     $file_type=$_FILES['files']['type'][$key]; 
     if($file_size > 2097152){ 
      $errors[]='File size must be less than 2 MB'; 
     }  
     $query="INSERT into upload_data (`USER_ID`,`FILE_NAME`,`FILE_SIZE`,`FILE_TYPE`) VALUES('$user_id','$file_name','$file_size','$file_type'); "; 
     $desired_dir="user_data"; 
     if(empty($errors)==true){ 
      if(is_dir($desired_dir)==false){ 
       mkdir("$desired_dir", 0700);  // Create directory if it does not exist 
      } 
      if(is_dir("$desired_dir/".$file_name)==false){ 
       move_uploaded_file($file_tmp,"user_data/".$file_name); 
      }else{         //rename the file if another one exist 
       $new_dir="user_data/".$file_name.time(); 
       rename($file_tmp,$new_dir) ;    
      } 
      mysql_query($query);    
     }else{ 
       print_r($errors); 
     } 
    } 
    if(empty($error)){ 
     echo "Success"; 
    } 
} 
?> 

HTML

<form action="yourphpfile.php" method="POST" enctype="multipart/form-data"> 
    <input type="file" name="files[]" multiple="" /> 
    <input type="submit"/> 
</form> 
+0

ありがとう、私の問題を解決! –

+0

喜んで助けになるでしょう。 – daatyson

+0

が正しい方法である場合、@dtzがPDOを使用していないと考える必要があるので、SQLインジェクションを避けるために、PDO、Prepared Statementsの使用を探すことをお勧めします。 – datelligence

関連する問題