Суть вопроса. Пользователь заполняет форму заявки - ФИО, номер заявки, 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, ???)");
}