Загрузка изображений на сервер и в БД - PHP

157
30 мая 2022, 20:10

Уважаемые программисты, при использовании кода неккоректно добавляются изображения в БД. Данный код загружает без проблем файлы на сервер, но при добавлении в БД:

  1. Создает несколько пустых строк;
  2. Записывает изображения в одной строке, в одной ячейке (image) через запятую.

Как сделать так, чтобы изображения записывались в своей отдельной строке в таблице, а не в кучу в одной ячейке.

$arr=array();
//ширина и высота в пикселях
$pic_weight = 3000;
$pic_height = 3000;
if ($_FILES)
{
  //пролистываем весь массив изображений по одному $_FILES['file']['name'] as $k=>$v
  foreach ($_FILES['file']['name'] as $k=>$v)
  {
    //директория загрузки
    $uploaddir = "";
    //новое имя изображения
    $apend=date('YmdHis').rand(100,1000).'.png';
    //путь к новому изображению
    $uploadfile = "$uploaddir$apend";
    //Проверка расширений загружаемых изображений
    if($_FILES['file']['type'][$k] == "image/gif" || $_FILES['file']['type'][$k] == "image/png" ||
    $_FILES['file']['type'][$k] == "image/jpg" || $_FILES['file']['type'][$k] == "image/jpeg")
    {
      //черный список типов файлов
      $blacklist = array(".php", ".phtml", ".php3", ".php4");
      foreach ($blacklist as $item)
      {
        if(preg_match("/$item\$/i", $_FILES['file']['name'][$k]))
        {
          echo "Нельзя загружать скрипты.";
          exit;
        }
      }
      //перемещаем файл из временного хранилища
      if (move_uploaded_file($_FILES['file']['tmp_name'][$k], $uploadfile))
      {
        //получаем размеры файла
        $size = getimagesize($uploadfile);
        //проверяем размеры файла, если они нам подходят, то оставляем файл
        if ($size[0] < $pic_weight && $size[1] < $pic_height)
        {
          $arr[$apend] = "$uploaddir$apend";
          echo "<center><br>Файл ($uploadfile) загружен.</center>";
        }
        //если размеры файла нам не подходят, то удаляем файл unlink($uploadfile);
        else
        {
          echo "<center><br>Размер пикселей превышает допустимые нормы.</center>";
          unlink($uploadfile);
        }
      }
      else
        echo "<center><br>Файл не загружен, вернитесь и попробуйте еще раз.</center>";
    }
    else
      echo "<center><br>Можно загружать только изображения в форматах jpg, jpeg, gif и png.</center>";
  }
}
$image = implode(",", $arr);
$sql1 = "INSERT INTO gallery (image) VALUES (?s)";
$db->query($sql1, $image);

Answer 1

Надо запомнить одно очень простое правило. Для. Обработки. Массива. Всегда. Нужен. Цикл.

foreach($arr as $image) {
    $db->query("INSERT INTO gallery (image) VALUES (?s)", $image);
}

Это правило тебя никогда не подведет.

READ ALSO
Открыть старую dll

Открыть старую dll

Есть старый ассет для Unity - последняя версия была дляNET 3

191
Групировка Datagrid

Групировка Datagrid

Как сделать групировку datagrid? Мне надо групировка по одному столбцуВот мой DataGrid:

334
C#. Почему не отправляется(или не приходят) email сообщения?

C#. Почему не отправляется(или не приходят) email сообщения?

Не знаю в чем может быть проблемаВ верности почт и пароля я уверен

162
как собрать x32 приложения в x64 системе - с#

как собрать x32 приложения в x64 системе - с#

мне нужно собрать x32 приложения в x64 системе в visual studio 2019 , или есть програма которая переделывает x64 битное приложения под x32 ??

387