Для решения вашей проблемы с обновлением записей в базе данных с использованием форм, созданных в цикле, можно рассмотреть несколько подходов. Одна из главных задач — убедиться, что данные отправляются из корректной формы и обновляются в нужные записи в базе данных.
### 1. Убедитесь, что каждая форма имеет уникальные идентификаторы
Если вы уже используете `id="<?php if (isset($i)) {echo $i;} ?>"`, то важно также сделать ваши поля уникальными в пределах формы. Это можно сделать, например, путем добавления префикса к полям формы:
```php
<input type="text" name="participant_name[<?php echo $i; ?>]" id="name_<?php echo $i; ?>">
```
### 2. Измените способ обработки отправляемых данных
Когда кнопка "Обновить" или "Сохранить" нажата, используйте массивы для передачи данных. Например, используя `participant_name[]`, вы можете отправить все имена участников в одном массиве. В обработчике формы:
```php
if (isset($_POST['save'])) {
foreach ($_POST['participant_name'] as $key => $name) {
// Используйте $key для идентификации, какой именно участник обновляется
// Выполняйте соответствующие операции с базой данных
}
}
```
### 3. Определение действий на стороне клиента
Если вы решите использовать AJAX, можно использовать JavaScript/jQuery для получения данных из конкретной формы. Пример:
```html
<form id="form_<?php echo $i; ?>" method="post">
<input type="text" name="participant_name" id="name_<?php echo $i; ?>">
<button type="button" class="update-btn" data-id="<?php echo $i; ?>">Обновить</button>
</form>
<script>
$(document).ready(function() {
$('.update-btn').on('click', function() {
let id = $(this).data('id');
let name = $('#name_' + id).val();
$.ajax({
type: 'POST',
url: 'update.php', // файл, который будет обрабатывать обновление
data: {
id: id, // передаем id для обновления
participant_name: name,
},
success: function(response) {
// Обработка успешного ответа
console.log(response);
},
error: function() {
// Обработка ошибки
console.error('Ошибка обновления данных');
}
});
});
});
</script>
```
### 4. Обработка на стороне сервера
В `update.php` вы можете выполнить обновление в зависимости от переданного ID:
```php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$id = $_POST['id'];
$name = $_POST['participant_name'];
// Подготовить и выполнить SQL-запрос для обновления данных в БД
$stmt = $pdo->prepare("UPDATE participants SET name = :name WHERE id = :id");
$stmt->execute(['name' => $name, 'id' => $id]);
echo json_encode(['status' => 'success']);
}
```
### 5. Проверка и отладка
- Убедитесь, что идентификаторы и данные передаются корректно.
- Проверьте, что в базе данных записываются корректные значения и идентификаторы участников.
Этот подход поможет вам более четко выделить логику сохранения и обновления данных для каждого участника и избежать путаницы с формами.