Обновление данных данных, выведенных в цикле PHP
Прошу объяснить, как я могу получить обновленный массив значений, которые отредактировал пользователь.
Упрощенный пример:
<?php $contacts = [['id' => 1, 'name' => 'Danil'], ['id' => 2, 'name' => 'Diana']] ?>
<form action="main.php">
<?php foreach ($contacts as $contact): ?>
<label>Имя: <input name="contact_name" type="text" value="<?php $contact['name'] ?>"></label><br>
<?php endforeach; ?>
<button type="submit">Обновить</button>
</form>
В условном контроллере на беке я получаю массив контактов из бд и вывожу их на экран через простейшую форму. Структура массива однотипная, поэтому я использую цикл.
Основная проблема сейчас в том, что в запросе ко мне попадает только значение последнего input-а.
Как после отправки формы я могу получить обратно этот массив, но уже в обновленном виде из этого запроса? Какие есть варианты и что стоит почитать, чтобы это понять. Вероятно, мне стоит модифицировать данные через JS и возвращать в запросе JSON. Или что-то в этом роде?
В результате я должен на беке получить этот массив, найти нужные контакты по id в БД и обновить их.
Ответы (1 шт):
<input name="contact_name[]"
^^^----- теперь это массив имён
А в GET/POST как раз теперь будет приходить массив
Если нужно отправлять не имена, а идентификаторы, то тогда пририсовать скрытые поля под каждым инпутом
<input name="contact_id[]" type="hidden" value="<?= $contact['id']; ?>">
и на бэке уже получать массив contact_id и contact_name
Если не хочется отделять в два массива то можно так:
<input name="contact[<?= $contact['id']; ?>][name]" type="text" value="<?= $contact['name']; ?>">
<input name="contact[<?= $contact['id']; ?>][id]" type="hidden" value="<?= $contact['id']; ?>">
Прилетит в таком формате:
Array
(
[contact] => Array
(
[1] => Array
(
[name] => 1
[id] => 2
)
[2] => Array
(
[name] => 3
[id] => 4
)
)
)