@lev89

Как записать имя загружаемого файла в таблицу?

Суть вопроса. Пользователь заполняет форму заявки - ФИО, номер заявки, email, текст сообщения, а также один или несколько файлов любого типа. Сервер принимает POST данные из формы и сохраняет в соответствую таблицу. Так пользователь может добавить несколько файлов, то решил для файлов создать отдельную таблицу, которая будет связана по ID с основной таблицей заявок.
Структура таблицы Ticket - ID, num, fio, email, message
Таблица uploads имеет поля - ID, file_name, ticket_id

Проблема в том, что у меня не получается сохранить имя файла в таблицу uploads.
Вот обработчик формы:
public function addAction()
    {
        if (!empty($_POST)) {
            $ticket = new Ticket();
            $data = $_POST;
            $ticket->load($data);

            $ticket->attributes['num'] = mt_rand(100000, 999999);
            if (!$ticket->validate($data)) {
                $ticket->getErrors();
                $_SESSION['form_data'] = $data;
                redirect();
            }

            $ticket->getUpload(); // загрузка файлов на сервер
            if ($id = $ticket->save('tickets')) {
                $ticket->saveUpload($id); // запись в базу данных
                $_SESSION['success'] = 'Заявка добавлена. Номер Вашей заявки такой-то';
            }
            redirect();
        }

        $this->setMeta('Новая заявка');
    }

Метод для загрузки файлов на сервер
public function getUpload()
    {
        $target_dir = WWW . '/uploads/';

        if( isset($_FILES['input2']['name'])) {

            $total_files = count($_FILES['input2']['name']);

            for($key = 0; $key < $total_files; $key++) {

                // Check if file is selected
                if(isset($_FILES['input2']['name'][$key])
                    && $_FILES['input2']['size'][$key] > 0) {

                    $original_filename = $_FILES['input2']['name'][$key];

                    // Get the fileextension
                    $ext = pathinfo($original_filename, PATHINFO_EXTENSION);

                    // Get filename without extesion
                    $filename_without_ext = basename($original_filename, '.'.$ext);
                    // Generate new filename
                    $new_filename = str_replace(' ', '_', $filename_without_ext) . '_' . time() . '.' . $ext;
                    // Upload the file with new name
                    move_uploaded_file($_FILES['input2']['tmp_name'][$key], $target_dir . $new_filename);

                }
            }
        }
    }

А в этом методе надо сохранить имя загружаемого файла в таблицу uploads
public function saveUpload($ticket_id)
    {
       \R::exec("INSERT INTO uploads (ticket_id, file_name) VALUES ($ticket_id, ???)");
    }
  • Вопрос задан
  • 62 просмотра
Пригласить эксперта
Ответы на вопрос 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
1. Чтобы записать имя файла, его надо передать в функцию сохранения, соотв-но меняем её сигнатуру на
function saveUpload($ticket_id, $file_name) { ... }

2. Но чтобы передать имя, его сперва надо получить. Для этого можно поменять фукнцию getUpload() так чтобы в результаты работы возвращалось имя загруженного файла return $new_filename;

И код превратится в
$new_filename = $ticket->getUpload(); // загрузка файлов на сервер
if ($id = $ticket->save('tickets')) {
    $ticket->saveUpload($id, $new_filename); // запись в базу данных
    $_SESSION['success'] = 'Заявка добавлена. Номер Вашей заявки такой-то';
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы