2015-01-22 2 views
0

Я пытаюсь добавить еще одно поле в форме загрузки, чтобы иметь возможность загрузить 3 изображения в одной форме. Проблема в том, что два изображения должны сохранять другой путь в БД с третьего изображения. Например image_1 и image_2 сохраняются http://example.com/img/ и третьего изображения в ../images/Несколько загружать форму изображения не сохраняет имя пользователя

В настоящее время, когда я заполняю поля со всех 3-х изображений в базе данных я спасся это имя для них - 4649d81924f1b17db1444d72ee271f6c-Array

Это HTML форма

<form role="form" action="" method="post" enctype="multipart/form-data"> 
     <!-- File Button --> 
     <div class="form-group"> 
      <label for="image">image</label> 
      <input value="<?php echo !empty($image)?$image:'';?>" id="image" name="file[]" multiple="multiple" class="input-file" type="file"> 
     </div> 

     <!-- File Button --> 
     <div class="form-group"> 
      <label for="rest_img_big">Image 2</label> 
      <input value="<?php echo !empty($rest_img_big)?$rest_img_big:'';?>" id="rest_img_big" name="file[]" multiple="multiple" class="input-file" type="file"> 
     </div> 

     <!-- File Button --> 
     <div class="form-group"> 
      <label for="web_image">Image 3</label> 
      <input value="<?php echo !empty($web_image)?$web_image:'';?>" id="web_image" name="file[]" multiple="multiple" class="input-file" type="file"> 
     </div> 
</form> 

и это PHP часть для изображения загрузить

if (!empty($_POST) && isSet($_POST['submit'])) 
{ 
     define('MAX_FILE_SIZE', 20000000430); 
     $permitted = array('image/jpeg', 'image/jpeg', 'image/png', 'image/gif'); 

     // keep track post values  

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

     // make a new image name 
     $ext = substr(strrchr($fileName, "."), 1); 
     // generate the random file name 
     $randName = md5(rand() * time()) . '-' .$fileName; 

     // save image path 
     $path = "../../img/".$randName; 
     $forDB = "http://example/img/".$randName; 
     if (in_array($fileType, $permitted)) 
     { 
      $result = move_uploaded_file($tmpName, $path); 
      if (!$result) 
      { 
       echo "Error uploading image file"; 
       exit; 
      } 
     } 

     // update data 
     $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

     $sql = "UPDATE images set image = ?, rest_img_big = ?, web_image = ? WHERE user_id = ?"; 
     $q = $pdo->prepare($sql); 
     $q->execute(array($forDB,$forDB,$path,$user_id)); 

Итак, любое предложение, как я могу исправить эту проблему и одновременно загрузить 3 изображения?

UPDATE: Текущий код

if (!empty($_POST) && isSet($_POST['submit'])) 
{ 
    define('MAX_FILE_SIZE', 20000000430); 
    $permitted = array('image/jpeg', 'image/jpeg', 'image/png', 'image/gif'); 

    // keep track post values 
    for($i=0; $i < count($_FILES['file']['name']); $i++){ 
     $fileName = $i.$_FILES['file']['name'][$i]; //get unique name 
     $tmpName = $_FILES['file']['tmp_name'][$i]; 
     $fileSize = $_FILES['file']['size'][$i]; 
     $fileType = $_FILES['file']['type'][$i];          

     // make a new image name 
     $ext = substr(strrchr($fileName, "."), 1); 
     // generate the random file name 
     $randName = md5(rand() * time()) . '-' .$fileName; 

     // save image path 
     $web = "../../img/".$randName; 
     $smallImageForApp = "http://example/img/".$randName; 
     $bigImageForApp = "http://example/img/".$randName; 
     if (in_array($fileType, $permitted)) 
     { 
      $result = move_uploaded_file($tmpName, $web); 
      if (!$result) 
      { 
       echo "Error uploading image file"; 
       exit; 
      } 
     } 
     else {     
      // update data 
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
      $sql = "UPDATE images set image = ?, rest_img_big = ?, web_image = ? WHERE user_id = ?"; 
      $q = $pdo->prepare($sql); 
      $q->execute(array($smallImageForApp,$bigImageForApp,$web,$user_id)); 
     } 

UPDATE 2: var_dump ($ _ FILES);

array(1) { 
    ["file"]=> array(5) 
    { 
    ["name"]=> array(3) 
    { 
     [0]=> string(21) "23.jpg_1418028921.jpg" 
     [1]=> string(15) "_1418028891.jpg" 
     [2]=> string(6) "78.jpg" 
    } 
    ["type"]=> array(3) 
    { 
     [0]=> string(10) "image/jpeg" 
     [1]=> string(10) "image/jpeg" 
     [2]=> string(10) "image/jpeg" 
    } 
    ["tmp_name"]=> array(3) 
    { 
     [0]=> string(14) "/tmp/phpfqqJG3" 
     [1]=> string(14) "/tmp/phptp9zcF" 
     [2]=> string(14) "/tmp/phpTkmuIg" 
    } 
    ["error"]=> array(3) 
    { 
     [0]=> int(0) 
     [1]=> int(0) 
     [2]=> int(0) 
    } 
    ["size"]=> array(3) 
    { 
     [0]=> int(25878) 
     [1]=> int(25878) 
     [2]=> int(35864) 
    } 
} 
} 
array(1) 
{ 
    //same thing 3 times 
} 

ответ

1

Ваш текущий код будет загружать только одно изображение, для 3 вам нужно перебрать $_FILES['file'] и загрузить его, вот как путь

for($i=0; $i < count($_FILES['file']['name']); $i++){ 
    $fileName = $i.$_FILES['file']['name'][$i]; //get unique name 
    $tmpName = $_FILES['file']['tmp_name'][$i]; 
    $fileSize = $_FILES['file']['size'][$i]; 
    $fileType = $_FILES['file']['type'][$i]; 

    // make a new image name 
    $ext = substr(strrchr($fileName, "."), 1); 
    // generate the random file name 
    $randName = md5(rand() * time()) . '-' .$fileName; 

    // save image path 
    //check if its 3rd image change the path to '../images/' folder 
    $path = ($ === 2) ? '../images/' : "../../img/".$randName; 
    $forDB = "http://example/img/".$randName; 
    if (in_array($fileType, $permitted)) 
    { 
     $result = move_uploaded_file($tmpName, $path); 
     if (!$result) 
     { 
      echo "Error uploading image file"; 
      exit; 
     } else { 
    // update data in db here, only on upload 
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 

    $sql = "UPDATE images set image = ?, rest_img_big = ?, web_image = ? WHERE user_id = ?"; 
    $q = $pdo->prepare($sql); 
    $q->execute(array($forDB,$forDB,$path,$user_id)); 
     } 
    } 

} 

ваш $fileName перепутались 4649d81924f1b17db1444d72ee271f6c-Array, потому что вы которые присоединените array в строку, последний Array показывает, что

Примечание: не хранить полный URL для изображений в БД $forDB = "http://example/img/".$randName; вы должны хранить только имя $forDB = $randName; таким образом, что вы можете перенести приложение из домена в домен, но изображения не будут нарушены.

+0

Я попытался с петлей, как вы предлагаете имя снова 'randomstring-Array' и изображение не загружать в папку. Только имя сохраняется в БД. –

+0

попробуйте сейчас, я добавил для цикла – Saqueib

+0

Хорошо, теперь изображение загружается, но 3 раза такое же изображение. Я имею в виду, что он принимает первое изображение поля ввода и загружается 3 раза. –

1

Вам нужно загрузить файл один за другим через петлю

for($i=0; $i < count($_FILES['file']['name']); $i++){ 
     $fileName = $_FILES['file']['name'][$i]; 
     $tmpName = $_FILES['file']['tmp_name'][$i]; 
     $fileSize = $_FILES['file']['size'][$i]; 
     $fileType = $_FILES['file']['type'][$i]; 

    // more stuff . . . . . . 
} 
Смежные вопросы