Я не настолько умный, как большинство людей здесь, но я пытался реализовать тот же тип вещей и заставить его работать на меня. Возможно, я не смогу объяснить, почему это очень хорошо, поэтому, надеюсь, кто-то может заполнить то, что я не совсем понимаю.
Хотя моя реализация немного отличается, (я собираюсь сделать два дополнительных ввода на изображение), это может указывать на вас в правильном направлении.
Вот что я пытался сделать ... Я хотел использовать форму, чтобы добавить файл в папку на сервере, а также добавить его в базу данных. Кроме того, для каждого изображения я хотел бы выбрать другие поля, которые будут добавлены в базу данных.
Как описано в документации, мне пришлось изменить форму на индексной странице, добавив мой тег select в шаблон формы. Для простоты я просто показываю базовый тег select и текстовое поле вместо заполняемых php тегов, которые я буду использовать.
Убедитесь, что вы указываете имя для тега select и включаете [] после имени для каждого из полей. Он будет использоваться в /server/php/index.php.
<td>
<td class="title"><label>SizeID: <input name="sizeID[]" required></label></td>
</td>
<td class="title"><label>Type: <select name="invTypeID[]">
<option value="1">Thing one</option>
<option value="2">Thing two</option>
</select></label>
</td>
</td>
в /server/php/index.php вам придется изменить
protected function handle_form_data()
и
protected function handle_file_upload()
Для моей конкретной реализации, я изменил handle_form_data функцию к следующий. Это позволяет использовать два новых поля в форме для передачи функции handle_file_upload.
protected function handle_form_data($file, $index) {
$file->sizeID = @$_REQUEST['sizeID'][$index];
$file->invTypeID = @$_REQUEST['invTypeID'][$index];
}
Затем я изменил handle_file_upload, чтобы соответствовать правильной инструкции SQL и адаптировали функции bind_param(), чтобы удовлетворить мои потребности, а также.
protected function handle_file_upload($uploaded_file, $name, $size, $type, $error,
$index = null, $content_range = null) {
$file = parent::handle_file_upload(
$uploaded_file, $name, $size, $type, $error, $index, $content_range
);
if (empty($file->error)) {
$sql = 'INSERT INTO `'.$this->options['db_table']
.'` (`imgID`, `sizeID`, `invTypeID`)'
.' VALUES (?, ?, ?)';
$query = $this->db->prepare($sql);
$query->bind_param(
'sii',
$file->name,
$file->sizeID,
$file->invTypeID
);
$query->execute();
$file->id = $this->db->insert_id;
}
return $file;
}
Я надеюсь, что это указывает на то, что вы в правильном направлении.
После публикации этого я понял, что для того, чтобы вытащить данные из ничего, кроме таблицы по умолчанию, вам нужно обновить инструкцию select из функции set_additional_file_properties ($ file). Также имейте в виду, что функция delete ($ print_response = true) также может быть обновлена в зависимости от вашей реализации. – sgtp