Как создать multiple insert в базу данных?

99
08 октября 2021, 13:10

Есть многофайловая загрузка изображений, но в БД создается только одна строка!

А нужно, чтобы все пути загружаемых файлов записывались в БД!

Вот код загрузки изображений:

function upload_image() 
{ 
  if(isset($_FILES['user_image'])) 
  { 
    // Count total files 
    $countfiles = count($_FILES['user_image']['name']); 
 
    for($i=0;$i<$countfiles;$i++){ 
      $extension = explode('.', $_FILES['user_image']['name'][$i]); 
      $new_name = rand() . '.' . $extension[1]; 
      $destination = '../portfolio/upload/' . $new_name; 
      $thumbDestination = '../portfolio/upload/thumb/' . $new_name; 
       
      move_uploaded_file($_FILES['user_image']['tmp_name'][$i], $destination); 
       
      resize($destination, $thumbDestination, 300); 
    } 
    return $new_name; 
  } 
}

Вот код записи в БД:

if($_POST["operation"] == "Add") 
  { 
    $image = ''; 
    if($_FILES["user_image"]["name"] != '') 
    { 
      $image = upload_image(); 
    } 
    $statement = $connection->prepare(" 
      INSERT INTO portfolio (image, image_mini)  
      VALUES (:image, :image_mini) 
    "); 
    $result = $statement->execute( 
      array( 
        ':image'		=>	$image, 
        ':image_mini'		=>	$image 
      ) 
    ); 
    if(!empty($result)) 
    { 
      echo 'Фото Добавлено'; 
    } 
  }

Answer 1
function upload_image()
{ $res = array();
 if(isset($_FILES['user_image']))
 {
// Count total files
$countfiles = count($_FILES['user_image']['name']);
for($i=0;$i<$countfiles;$i++){
  $extension = explode('.', $_FILES['user_image']['name'][$i]);
  $new_name = rand() . '.' . $extension[1];
  $destination = '../portfolio/upload/' . $new_name;
  $thumbDestination = '../portfolio/upload/thumb/' . $new_name;
  move_uploaded_file($_FILES['user_image']['tmp_name'][$i], $destination);
  resize($destination, $thumbDestination, 300);
  $res[] = $new_name;
}
return $res;
 }
}

запись в массиве

    if($_POST["operation"] == "Add")
  {
    $images = array();
    if($_FILES["user_image"]["name"] != '')
    {
      $images = upload_image();
    }
    foreach ($images as $image){
     $statement = $connection->prepare("
       INSERT INTO portfolio (image, image_mini) 
       VALUES (:image, :image_mini)
     ");
     $result = $statement->execute(
       array(
         ':image'       =>  $image,
         ':image_mini'      =>  $image
       )
     );
     if(!empty($result))
     {
       echo 'Фото Добавлено';
     }
   }
  }
Answer 2

Файлы копируются в цикле, а записываются без цикла. 1 инсерт - 1 запись. Если б запись вызавалась в том же цикле, что и копирование - это возможно бы и исправило ситуацию.

READ ALSO
Ошибка при передаче файла через AJAX

Ошибка при передаче файла через AJAX

Локалхост, передаю файл через AJAX-запросМассивы создаются и передаются в php файл, но про попытке разобрать всё на переменные получаю ошибку...

102
Bitrix — почему не выгружаются дополнительные свойства?

Bitrix — почему не выгружаются дополнительные свойства?

В программе 1с, создал дополнительные свойства, в которых указываю старую цену и скидкуВ bitrix в админке создал данные дополнительные свойства...

130
Здравствуйте! Проблема с PHP, JS и YandexApi!

Здравствуйте! Проблема с PHP, JS и YandexApi!

Нужно какая-либо идея реализации получения расстояния между 2 адресами по дорогам, используя API Яндекса (док-ию почитал, знаю что и как брать...

128
Мультипоточный парсер [закрыт]

Мультипоточный парсер [закрыт]

Хотите улучшить этот вопрос? Переформулируйте вопрос так, чтобы он был сосредоточен только на одной проблеме

100