Заполнить значение поля ввода с помощью $_FILES[‘field’][‘name’];

#php #jquery #arrays #input #upload

#php #jquery #массивы #ввод #загрузка

Вопрос:

Мне нужно получить в массиве значение поля ввода для загрузки, позвольте мне объяснить :

У меня есть эти поля ввода :

 <input type='text' name='field["  j    "]' value='' data-kind='title' />
<input type='file' name='field["  j    "]' value='' data-kind='image' />
<input type='text' name='field["  j    "]' value='' data-kind='title' />
<input type='file' name='field["  j    "]' value='' data-kind='image' />
  

Я печатаю массив полей из этих полей и получаю это :

 Array
(
    [0] => title 1
    [2] => title 2
)
  

вместо :

 Array
(
    [0] => title 1
    [1] => image1.jpg
    [2] => title 2
    [3] => image2.jpg
)
  

Мне нужно, чтобы мои имена файлов были в моем массиве, как я могу получить этот второй массив?

Я пробовал слияние, но мне нужно сохранить место каждого поля в массиве, например, порядок каждого ввода в форме (пример: если поле загрузки генерируется в первом месте формы, мне нужно сохранить эту информацию в массиве ([0] => image1.jpg [1] => title1 и так далее)

Любая помощь была бы очень признательна!! Я застрял на этом несколько дней: (

Ответ №1:

Если вы зададите входным данным одно и то же имя, они просто перезапишут друг друга при отправке. Прямо сейчас все ваши входные данные имеют имена field[" j "] .

Похоже, вы создаете свои входные теги, так почему бы просто не сгенерировать многомерный массив, чтобы сохранить желаемый порядок? Что-то вроде этого:

 <input type='text' name='field["  j    "][0]' value='' data-kind='title' />
<input type='file' name='field["  j    "][1]' value='' data-kind='image' />
<input type='text' name='field["  j    "][2]' value='' data-kind='title' />
<input type='file' name='field["  j    "][3]' value='' data-kind='image' />
  

Комментарии:

1. Спасибо за ответ, я не могу этого сделать, потому что порядок является динамическим, когда я перетаскиваю входной элемент, он имеет определенную позицию, которая сохраняется в другом массиве после отправки.

Ответ №2:

Просто дайте им отдельные имена, а затем ссылайтесь на них, когда вы перебираете свои элементы $ _FILE / $ _POST .

 <input type='text' name='title[]' value='' data-kind='title' />
<input type='file' name='imgfile[]' value='' data-kind='image' />
<input type='text' name='title[]' value='' data-kind='title' />
<input type='file' name='imgfile[]' value='' data-kind='image' />
  

Затем в вашем PHP

 foreach($_FILES['imgfile']['name'] as $key=>$val){
    echo($key." = ".$val."<br>");
    echo($key." = ".$_POST["title"][$key]."<br><br>");
}
  

Комментарии:

1. .$_POST[«imgfile»] — это $_FILES[‘imgfile’] ? Это не работает: «неопределенный индекс для 0 и так далее»

2. Примером был цикл $_POST. Я пересмотрел пример, чтобы использовать $_FILES .

Ответ №3:

Я думаю, вы пробовали array_merge документы, которые изменят ключи, если они числовые. Вместо этого вы можете использовать документы оператора объединения массивов , которые хорошо работают с нумерованными ключами и не меняют их:

 $field = 'field';
$fields = $_POST[$field]   $_FILES[$field]['name'];
ksort($fields);
  

Это даст вам то, что вы ищете. ДЕМОНСТРАЦИЯ.