XdHideoAppa
@XdHideoAppa

Как получить все имена загруженных изображений из массива и записать в бд php, redbean php, ajax?

Мой код загружает много изображений, и записывает только имя первого изображения в бд. Надо получить все имена загруженных изображений из массива и записать их в бд.

Форма:

<form class="form-add" method="POST" enctype="multipart/form-data">
   <input id="postUploadFileInput" type="file" name="file[]" multiple>
   <button type="submit" onclick="formAdd(event,this)">Добавить товар</button>
</form>


ajax:
function formAdd(e) {
    e.preventDefault();
    var form_data = new FormData();
    $.each($("#postUploadFileInput")[0].files,function(key, input){
        form_data.append('file[]', input);
    });

    $.ajax({
        url: '/product-script',
        type: 'post',
        dataType: 'json',
        cache: false,
        contentType: false,
        processData: false,
        data: form_data,
        success: function(data){
        }
    });
};

php:
<br>
if( empty($errors) )<br>
{<br>
   // Изображения<br>
      // Название <br>
      $input_name = 'file';<br>
      <br>
      // Разрешенные расширения файлов.<br>
      $allow = array();<br>
      <br>
      // Запрещенные расширения файлов.<br>
      $deny = array(<br>
         'phtml', 'php', 'php3', 'php4', 'php5', 'php6', 'php7', 'phps', 'cgi', 'pl', 'asp', <br>
         'aspx', 'shtml', 'shtm', 'htaccess', 'htpasswd', 'ini', 'log', 'sh', 'js', 'html', <br>
         'htm', 'css', 'sql', 'spl', 'scgi', 'fcgi', 'exe'<br>
      );<br>
      <br>
      // Директория куда будут загружаться файлы.<br>
      $path = __DIR__ . '/product-image/';<br>
      <br>
      $datas = array();<br>
      <br>
      if (!isset($_FILES[$input_name])) {<br>
         $error = 'Файлы не загружены.';<br>
      } else {<br>
         // Преобразуем массив $_FILES в удобный вид для перебора в foreach.<br>
         $files = array();<br>
         $diff = count($_FILES[$input_name]) - count($_FILES[$input_name], COUNT_RECURSIVE);<br>
         if ($diff == 0) {<br>
            $files = array($_FILES[$input_name]);<br>
         } else {<br>
            foreach($_FILES[$input_name] as $k => $l) {<br>
               foreach($l as $i => $v) {<br>
                  $files[$i][$k] = $v;<br>
               }<br>
            }		<br>
         }	<br>
      <br>
         foreach ($files as $file) {<br>
            $error = $success = '';<br>
      <br>
            // Проверим на ошибки загрузки.<br>
            if (!empty($file['error']) || empty($file['tmp_name'])) {<br>
               $error = 'Не удалось загрузить файл.';<br>
            } elseif ($file['tmp_name'] == 'none' || !is_uploaded_file($file['tmp_name'])) {<br>
               $error = 'Не удалось загрузить файл.';<br>
            } else {<br>
               // Оставляем в имени файла только буквы, цифры и некоторые символы.<br>
               $pattern = "[^a-zа-яё0-9,~!@#%^-_\$\?\(\)\{\}\[\]\.]";<br>
               $name = mb_eregi_replace($pattern, '-', $file['name']);<br>
               $name = mb_ereg_replace('[-]+', '-', $name);<br>
               $parts = pathinfo($name);<br>
               <br>
               if (empty($name) || empty($parts['extension'])) {<br>
                  $error = 'Недопустимый тип файла';<br>
               } elseif (!empty($allow) && !in_array(strtolower($parts['extension']), $allow)) {<br>
                  $error = 'Недопустимый тип файла';<br>
               } elseif (!empty($deny) && in_array(strtolower($parts['extension']), $deny)) {<br>
                  $error = 'Недопустимый тип файла';<br>
               } else {<br>
                  // Перемещаем файл в директорию.<br>
                  if (move_uploaded_file($file['tmp_name'], $path . $name)) {<br>
                     // Далее можно сохранить название файла в БД и т.п.<br>
                     $success = 'Файл «' . $name . '» успешно загружен.';<br>
                  } else {<br>
                     $error = 'Не удалось загрузить файл.';<br>
                  }<br>
               }<br>
            }<br>
            <br>
            if (!empty($success)) {<br>
               $datas[] = '' . $success . '';  <br>
            }<br>
            if (!empty($error)) {<br>
               $datas[] = '' . $error . '';  <br>
            }<br>
         }<br>
      }<br>
<br>
   // ЗАПИСЬ В БД<br>
   $product = R::dispense('products');<br>
   $product->image = $_FILES[$input_name]['name'][0]; // СЮДА НАДО ЗАПИСАТЬ МАССИВ ИМЕН ИЗОБРАЖЕНИЙ (сейчас записано только имя первого изображения)<br>
   R::store($product);<br>
<br>
   $response = [<br>
      "status" => true<br>
   ];<br>
   echo json_encode($response);<br>
}<br>
if( ! empty($errors) )<br>
{<br>
   $response = [<br>
      "status" => false,<br>
      "message" => array_shift($errors)<br>
   ];<br>
   echo json_encode($response);<br>
}<br>
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 1
@alexalexes
Вам сначала нужно подготовить структуру таблиц базы данных, чтобы можно было хранить несколько изображений продукта. Сейчас таблица products хранит сведения об изображении в одном атрибуте image. Вам нужно создать еще одну таблицу, например product_images, в которой будут храниться записи сведений об изображениях продукта - с указанием внешнего ключа product_id в каждой записи.
А в php поменяется это место:
$product = R::dispense('products');
   $product->image = $_FILES[$input_name]['name'][0]; // СЮДА НАДО ЗАПИСАТЬ МАССИВ ИМЕН ИЗОБРАЖЕНИЙ (сейчас записано только имя первого изображения)<br>
   R::store($product);

На что-то такое:
$product = R::dispense('products');
$product_id = $product->id;
 foreach($files as $file)
{
  // Вставка сведений из $file в таблицу product_images с входным параметром $product_id
}

Вторым этапом будет изменение методов чтения сведений об изображениях продукта. Чтобы метод адаптивно читал (по старому формату хранения) атрибут image из записи таблицы products, а в случае его пустоты - пытался читать сведения из таблицы product_images (по новому формату хранения).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы