【发布时间】:2018-01-16 21:42:58
【问题描述】:
下午好,
我正在创建一个日志,其中有单独的 div。
每个 div 元素显示不同的日志,其中包含特定于 div 中每个日志的数据。
对于每个日志,我都有一个提交按钮,允许更新和编辑表单。
发生的情况是,当我提交表单时,它会更新我数据库中的每个条目,而不仅仅是 1 个条目。 我知道问题出在我的 foreach 循环上,但我不确定如何解决这个问题。
任何帮助或指点将不胜感激。
代码如下:
<?php
$sqlGrow = "SELECT * FROM grow_details ";
$query = $conn->query($sqlGrow);
$grows = array();
while ($grow = mysqli_fetch_assoc($query) ) {
$grows[] = $grow;
}
foreach($grows as $grow) {
$id = $grow['id'];
$growName = $grow['name'];
?>
<div class="container">
<div class="details">
<h2><?php echo $grow['name']; ?></h2>
<p class="growNum">Grow #: <?php echo $id; ?></p>
<table class="growDetails">
<form method="POST" action="">
<tr>
<td class="label_growDetails"><label for="datePlanted">Date Planted:</label></td>
<td><input type="text" name="edit_datePlanted" id="edit_datePlanted" value="<?php echo $grow['datePlanted']; ?>" />
</tr>
<tr>
<td class="label_growDetails"><label for="strain">Strain:</label></td>
<td><input type="text" name="edit_strain" id="edit_strain" value="<?php echo $grow['strain']; ?>" /></td>
</tr>
<tr>
<td class="label_growDetails"><label for="toMaturity">Days to mature:</label></td>
<td><input type="text" name="edit_toMaturity" id="edit_toMaturity" value="<?php echo $grow['toMaturity']; ?>" /></td>
</tr>
<tr>
<td class="label_growDetails"><label for="type">Type:</label></td>
<td><input type="text" name="edit_type" id="edit_type" value="<?php echo $grow['type']; ?>" /></td>
</tr>
<tr>
<td class="label_growDetails"><label for="gender">Gender:</label></td>
<td><input type="text" name="edit_gender" id="edit_gender" value="<?php echo $grow['gender']; ?>" /></td>
</tr>
<tr>
<td class="label_growDetails"><label for="medium">Medium:</label></td>
<td><input type="text" name="edit_medium" id="edit_medium" value="<?php echo $grow['medium']; ?>" /></td>
</tr>
<tr>
<td class="label_growDetails"><label for="watts">Watts:</label></td>
<td><input type="text" name="edit_watts" id="edit_watts" value="<?php echo $grow['watts']; ?>" /></td>
</tr>
<tr>
<td class="label_growDetails"><label for="lightType">Light Type:</label></td>
<td><input type="text" name="edit_lightType" id="edit_lightType" value="<?php echo $grow['lightType']; ?>" /></td>
<td class="edit"><input type="submit" name="submit_editGrowDetails" id="submit_editGrowDetails" value=" Save Edits " /></td>
</tr>
</form>
</table>
</div>
以及提交按钮的PHP:
<?php
if(isset($_POST['submit_editGrowDetails'])){
$edit_datePlanted = mysqli_real_escape_string($conn, $_POST['edit_datePlanted']);
$edit_strain = mysqli_real_escape_string($conn, $_POST['edit_strain']);
$edit_toMaturity = mysqli_real_escape_string($conn, $_POST['edit_toMaturity']);
$edit_type = mysqli_real_escape_string($conn, $_POST['edit_type']);
$edit_gender = mysqli_real_escape_string($conn, $_POST['edit_gender']);
$edit_medium = mysqli_real_escape_string($conn, $_POST['edit_medium']);
$edit_watts = mysqli_real_escape_string($conn, $_POST['edit_watts']);
$edit_lightType = mysqli_real_escape_string($conn, $_POST['edit_lightType']);
$name = $grow['name'];
$edit_growDetails = "UPDATE grow_details
SET datePlanted = '$edit_datePlanted',
strain = '$edit_strain',
toMaturity = '$edit_toMaturity',
type = '$edit_type',
gender = '$edit_gender',
medium = '$edit_medium',
watts = '$edit_watts',
lightType = '$edit_lightType'
WHERE name = '$name'; ";
$query_edit_growDetails = $conn->query($edit_growDetails);
if($query_edit_growDetails) {
echo '<p class="success" id="success">Successfully updated log for '.$name.'! <a class="refresh" href="journal.php">Refresh</a></p>';
} else {
echo '<p class="error" id="error">There was an error: '. $conn->error .'</p>';
}
}
?>
【问题讨论】:
-
name是该表上的唯一键 -
不,id是表中的唯一键。即使我要使用 WHERE id = $id,它仍然会在我提交表单时更新每个条目,尽管它仍在 foreach 循环中。当我提交它时,它会提交 foreach div,而不仅仅是那个特定的。
-
我在想,如果我把提交按钮的名称变成一个数组,我也许可以让它工作。不过,不确定如何做到这一点。正在调查。