Я пытаюсь обновить 1 или несколько строк MySQL в PHP, в то время как имена ввода и выбора тегов HTML имеют одно и то же имя атрибута.
Форма отображается в формате HTML.
Я пытался задать имена тегов HTML в виде массива, передавая скрытый первичный ключ, чтобы идентифицировать каждую строку и, следовательно, обновить эту конкретную строку.
Помимо циклов foreach и циклов для просмотра результатов массива, но, к счастью, строки MySQL не обновляются.
Файл modal.php:
<div class="form-group">
<label>Recipe name</label>
<input type="text" class="form-control" name="recipe_name" value="<?php echo $row['recipe_name']; ?>" />
</div>
<div class="form-group">
<label>Crop</label>
<input type="text" class="form-control" name="recipe_crop" value="<?php echo $row['recipe_crop']; ?>" />
</div>
<?php
$query1 = mysqli_query($mysqli,"SELECT * FROM recipes WHERE recipe_name = '" . $row['recipe_name'] . "' AND recipe_crop = '" . $row['recipe_crop'] . "';");
while ($row2 = mysqli_fetch_array($query1)){
?>
<input type="hidden" name="recipe_id[]" value="<?php $row2['recipe_id']; ?>" readonly>
<hr />
<div class="form-group">
<label>Hardware</label>
<select name="hardware[]" class="form-control">
<option value="<?php echo $row2['recipe_hardware']; ?>">CURRENTLY: <?php echo $row2['recipe_hardware']; ?></option>
<option value="LIGHTS">LIGHTS</option>
<option value="WATER_PUMP">WATER PUMP</option>
</select>
</div>
<div class="form-group">
<label>Action</label>
<select name="action[]" class="form-control">
<option value="<?php echo $row2['recipe_action']; ?>">CURRENTLY: <?php echo $row2['recipe_action']; ?></option>
<option value="ON">ON</option>
<option value="OFF">OFF</option>
</select>
</div>
<?php } ?>
Код обновления PHP:
$rid = $_POST['recipe_id'];
$recipe_hardware = $_POST['hardware'];
$recipe_action = $_POST['action'];
foreach ($rid as $key => $id) {
$sql = "UPDATE recipes SET recipe_hardware = '" . $recipe_hardware[$key] . "', recipe_action = '" . $recipe_action[$key] . "' WHERE recipe_id = '" . $id . "';";
$query1 = $this->db_connection->query($sql);
if ($query1) {
$this->messages[] = "Recipe edited successfully.";
} else {
$this->errors[] = "Recipe not updated.";
}
}
Ожидаемый результат - возможность обновлять только указанные строки.