Загрузка нескольких файлов

Yura13

Новичок
Добрый день.
Помогите разобраться, как правильно загружать несколько файлов на сервер и сформировать запрос в БД для сохранения путей к файлам
Вроде бы с загрузкой разобрался
PHP:
foreach ($_FILES['photo']['error'] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
            $tmp_name = $_FILES['photo']["tmp_name"][$key];
            $name = date('dmY-His_') . $_FILES['photo']['name'][$key];
            move_uploaded_file($tmp_name, $dir . $name);
      }
}
но никак не могу понять, как записать пути в БД
Заранее благодарен
 

AnrDaemon

Продвинутый новичок
Взять и записать. В чём проблема то?
И почему вы не проверяете переданное имя файла на валидность?…
 

Фанат

oncle terrible
Команда форума
Непонятно, чем отличается запись в базу имени файла от записи в базу любой другой строки.
 

Yura13

Новичок
Как в sql запрос добавлять имена файлов?
Понятно что
PHP:
$_FILES['photo']['name'][0]
$_FILES['photo']['name'][1]
$_FILES['photo']['name'][2]
но может быть 2 файла или 10

а если а хочу переименовать например
PHP:
date(dmY-His) . $_FILES['photo']['name']
то как выдергивать из цикла новые имена?
 

Фанат

oncle terrible
Команда форума
но может быть 2 файла или 10
Ну ведь при записи файлов ты как-то справляешься с этой проблемой?
почему одно и то же действие в одном случае не представляет для тебя проблемы а в другом становится непреодолимым премятствием?
как выдергивать из цикла новые имена?
А ты не выдергивай.
Сохраняй прямо в цикле
 

Yura13

Новичок
Ну ведь при записи файлов ты как-то справляешься с этой проблемой?
почему одно и то же действие в одном случае не представляет для тебя проблемы а в другом становится непреодолимым премятствием?
А ты не выдергивай.
Сохраняй прямо в цикле
Если бы я загружал одну картинку, тут все понятно, примерно так(вопрос проверок сейчас не обсуждается, что бы не захламлять пост):
PHP:
$dir = //путь к папке
$name= date('dmY-His_') . $_FILES['photo']['name']; //добавлени даты к имени картинки (более менее уникальное имя)
move_uploaded_file($tmp_name, $dir . $name);
$query = "INSERT INTO `object` (`image` ....) VALUES ('{$name}' ...)";
$result = mysqli_query($connect, $query) or die ('Ошибка:' . mysqli_error($connect));
confirm_query($result);
Растопырился я когда надо добавить больше одной картинки:
PHP:
foreach ($_FILES['photo']['error'] as $key => $error) {
        if ($error == UPLOAD_ERR_OK) {
                $tmp_name = $_FILES['photo']["tmp_name"][$key];
                $name = date('dmY-His_') . $_FILES['photo']['name'][$key];
                move_uploaded_file($tmp_name, $dir . $name);
        }

    }
Цикл отрабатывает и картинки заливаются, но как теперь в VALUES ('{$name}' ...) пути к картинкам добавить.
Пути пишутся в `image` ?
 
Последнее редактирование:

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Пути никуда не пишутся, в базу пишется только имя файлика, а чтобы туда его записать тебе надо несколько строчек скопипастить внутрь цикла.
 

Yura13

Новичок
Пути никуда не пишутся, в базу пишется только имя файлика, а чтобы туда его записать тебе надо несколько строчек скопипастить внутрь цикла.
Я согласен на имя файла в БД
Про строчки можно поподробнее
Я же не гуру PHP и не телепат.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Что мешает тебе написать в ципле после строки с move_uploaded_file, тот код, которым ты вставлял данные без цикла?
 

Yura13

Новичок
Что мешает тебе написать в ципле после строки с move_uploaded_file, тот код, которым ты вставлял данные без цикла?
Я так понимаю что каждая картинка будет добавлять в БД, но у меня в $_POST есть еще другие данные
Полная строка выглядит так:
PHP:
$query = "INSERT INTO `object` (`address`, `object`, `prise`, `floor`, `type_of_house`, `total_area`, `area_of_rooms`, `living_area`, `kitchen_area`, `bathroom`, `balcony`, `elevator`, `comment`, `images`)
                        VALUES ('{$address}', '{$object}', '{$floor}', '{$type_of_house}', '{$total_area}', '{$area_of_rooms}', '{$living_area}', '{$kitchen_area}', '{$bathroom}', '{$balcony}', '{$elevator}', '{$prise}', '{$comment}', '{$image}')";
Вот весь код
PHP:
<?php
    require_once $_SERVER['DOCUMENT_ROOT'] . '/ad/app_connect.php';
    require_once $_SERVER['DOCUMENT_ROOT'] . '/ad/fun.php';

    if (empty($_POST)){
        echo 'Что то не так с формой!';
        exit;
    }
/** $path Определяем путь к загружаемым картинкам
*  $dir Проверка есть ли папка с датой Если нет, то создаем
*/
    $path = $_SERVER['DOCUMENT_ROOT'] . '/images/kv/';
    $dir = $path . date('m-Y') . '/';
    if (!is_dir($dir)){
        mkdir($dir);
    }

/**
*  Загружаем картинку
*/

    if ($_FILES['photo']['error'] == 0){
        if($_FILES['photo']['type'] == "image/gif" || $_FILES['photo']['type'] == "image/png" ||
            $_FILES['photo']['type'] == "image/jpg" || $_FILES['photo']['type'] == "image/jpeg"){
                $blacklist = array(".php", ".phtml", ".php3", ".php4");
                foreach ($blacklist as $item){
                    if(preg_match("/$item\$/i", $_FILES['photo']['name'])){
                        echo 'Нельзя загружать скрипты!';
                        exit;
                    }
                }
                $tmp_name = $_FILES['photo']["tmp_name"];
                $image = date('dmY-His_') . $_FILES['photo']['name'];
                move_uploaded_file($tmp_name, $dir . $image);
        }else{
            echo 'Только gif, png, jpg, jpeg';
            exit;
        }
    }else{
        echo 'Ошибка при загрузке!';
        exit;
    }

/**
*  функция add_String_To_Db() безопасное добавление в БД
*/

    $address = (string)(add_String_To_Db($_POST['address']));
    $object = (int)(add_String_To_Db($_POST['object']));
    $floor = (int)(add_String_To_Db($_POST['floor']));
    $type_of_house = (string)(add_String_To_Db($_POST['type_of_house']));
    $total_area = (int)(add_String_To_Db($_POST['total_area']));
    $area_of_rooms = (string)(add_String_To_Db($_POST['area_of_rooms']));
    $living_area = (int)(add_String_To_Db($_POST['living_area']));
    $kitchen_area = (int)(add_String_To_Db($_POST['kitchen_area']));
    $bathroom = (string)(add_String_To_Db($_POST['bathroom']));
    $balcony = (string)(add_String_To_Db($_POST['balcony']));
    $elevator = (string)(add_String_To_Db($_POST['elevator']));
    $prise = (int)(add_String_To_Db($_POST['prise']));
    $comment = (string)(add_String_To_Db($_POST['comment']));

/**
*  Отправляем в БД
*/
    $query = "INSERT INTO `object` (`address`, `object`, `prise`, `floor`, `type_of_house`, `total_area`, `area_of_rooms`, `living_area`, `kitchen_area`, `bathroom`, `balcony`, `elevator`, `comment`, `images`)
                        VALUES ('{$address}', '{$object}', '{$floor}', '{$type_of_house}', '{$total_area}', '{$area_of_rooms}', '{$living_area}', '{$kitchen_area}', '{$bathroom}', '{$balcony}', '{$elevator}', '{$prise}', '{$comment}', '{$image}')";

    $result = mysqli_query($connect, $query) or die ('Ошибка:' . mysqli_error($connect));
    confirm_query($result);
 
Последнее редактирование:
Сверху