У меня есть ввод, который хранит несколько файлов в базе данных и каталоге.
<input id = "attachment_file" name = "attachment_file" type = "file" value = "<?=$_POST["attachment_file"]?>" class = "form-control hidden" multiple />
если загружено 2 файла, я просто хочу записать их в БД и переместить в другой каталог, но странно то, что запись относится только к последнему вставленному файлу... Вот код:
for ($i=0; $i < count($_FILES['attachment_file']); $i++) {
$file_name = $_FILES["attachment_file"]["name"][$i];
$tmp_name = $_FILES['attachment_file']['tmp_name'][$i];
$docs_dir = F_FS_PATH_USER_PHOTOS."files/docs/";
if (!is_dir($docs_dir)) {
mkdir($docs_dir, 0777, true);
chmod($docs_dir, 0777);
}
$new_dir = move_uploaded_file($tmp_name, $docs_dir.$file_name);
$docs_url = F_WS_PATH_USER_PHOTOS."files/docs/".$_FILES["attachment_file"]["name"][$i];
query("INSERT INTO orders_documents SET
id = NULL,
date_added = now(),
site_id = ".forsql($_SESSION["SA"]["site_id"]).",
order_id = ".forsql($order_id).",
doc_type = ".forsql($_FILES["attachment_file"]["type"][$i]).",
doc_url = ".forsql($docs_url).",
doc_id = ".forsql('1').",
doc_name = ".forsql($_FILES["attachment_file"]["name"][$i]));
}
я также попытался вставить 3 файла "random.pdf", "alter_tables.txt", "testfile.txt" и просто проверить, все ли файлы сохранены в переменной $_FILE, например:
print_r($_FILES);
exit();
но ответ я получаю:
Array
(
[attachment_file] => Array
(
[name] => testfile.txt
[type] => text/plain
[tmp_name] => C:\xampp\tmp\phpB3DC.tmp
[error] => 0
[size] => 150
)
)
и, как я уже сказал, я получаю запись в БД и каталоге только этого файла, но не двух других?
я пытался добавить [] к имени ввода, но ничего не изменилось? я буквально не знаю, что еще я должен попытаться проверить, зачем хранить только последний файл в $_FILES
также форма есть enctype = "multipart/form-data"
если в переменной $_FILES нет записи обо всех вставленных файлах, что еще мне попробовать?
А как ты понял, что я его не исполнял?
В руководстве по PHP есть страница Загрузка нескольких файлов.
я уже видел эту страницу, но мне это не помогло...
Почему вы отредактировали свой пост, чтобы он был просто тарабарщиной?
Пожалуйста, нет испортите свои сообщения (отредактировано)!
«И как вы поняли, что я его не выполнял» — вы не поделились таким кодом, так что это было просто предположение. Если вы выполнили его делал, поделитесь соответствующим кодом вместе с вашими попытками решить проблему.
Атрибут name
должен показывать, что вы получите массив. Измените его на input
, чтобы разрешить передачу массива обратно на ваш сервер.
<input id = "attachment_file" name = "attachment_file[]" type = "file" value = "<?=$_POST["attachment_file"]?>" class = "form-control hidden" multiple />
я пробовал так но ничего не изменилось
печать ($_FILES); все то же самое с 1 файлом в нем
У вас есть только одна запись массива, НО у вас есть несколько записей для name
, type
и т. д.
Что вы пытались решить проблему? Насколько я вижу, вы не выполняете запрос в данном коде. Кроме того, имейте в виду, что код широко открыт для SQL-инъекций - посмотрите подготовленные операторы, чтобы избежать взлома.