PHP Как записать значения из разных типов ввода в форме в порядке появления в mysql базу данных - PullRequest
0 голосов
/ 06 мая 2020

У меня есть форма, в которой количество входов input type="file" и textarea и порядок этих входов являются переменными; они добавляются в форму динамически. Значения этих входов сохраняются в mysql базе данных method="POST".

Я дал входам то же имя массива, например, name="longcopy[]", надеясь, что он создаст массив со значениями в порядке внешний вид.

В качестве примера:

<input type="file" name="longcopy[]" accept="image/*">
<textarea name="longcopy[]"></textarea>
<textarea name="longcopy[]"></textarea>
<input type="file" name="longcopy[]" accept="image/*">
<textarea name="longcopy[]"></textarea>

и после отправки я надеялся на такой массив:

Array
(
    [0] => img1.jpg,
    [1] => text1, 
    [2] => text2, 
    [3] => img2.jpg, 
    [4] => text3
)

Значит, значения массива могут быть сохранены в базе данных в правильном порядке. Почему-то он работает только с текстовыми полями…

Кто-нибудь знает, как это решить?

1 Ответ

0 голосов
/ 06 мая 2020

Файлы доступны через $_FILES. Они не будут в $_POST, как значения <textarea/>. Каждый набор переменных будет проиндексирован отдельно.

Если вы не хотите сохранять порядок, вам нужно явно определить индексы.

<input type="file" name="longcopy[0]" accept="image/*">
<textarea name="longcopy[1]"></textarea>
<textarea name="longcopy[2]"></textarea>
<input type="file" name="longcopy[3]" accept="image/*">
<textarea name="longcopy[4]"></textarea>

Затем сложите $_FILES и $_POST вместе:

$longcopy_files = array_map("save_file_and_return_path", diverse_array($_FILES['longcopy']));
$longcopy = $_POST['longcopy'] + $longcopy_files;
ksort($longcopy);
print_r($longcopy);

Результат:

Array
(
   [0] => uploads/file_1.jpeg
   [1] => first textarea
   [2] => second textarea
   [3] => uploads/file_2.png
   [4] => third textarea
)

Примечание: diverse_array функция взята из здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...