我正在为自己做一个小项目,制作我最喜欢的节目的剧集列表,我有加号和最小号按钮(看到的剧集)。但是,如果我单击一个按钮,两个条目(来自数据库)都会加号或最小值。这是我的代码:
<?php
include_once("config.php");
$query = $db->prepare("SELECT * FROM `shows`");
$query->execute();
$table = "";
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$name = $row['name'];
$eps = $row['eps'];
$status = $row['status'];
$seen = $row['seen'];
$id = $row['id'];
$plus = "plus";
$min = "min";
$table .= "
<tr>
<td>" . $id . "</td>
<td>" . $name . "</td>
<td>" . $eps. "</td>
<td>" . $status . "</td>
<td>" . $seen . "/" . $eps . "</td>
<td><input type='submit' name='plus' value='+'></td>
<td><input type='submit' name='min' value='-'></td>
</tr>
";
if (isset($_POST['plus'])) {
$seen++;
$fill = $db->prepare("UPDATE `shows` SET `seen` = '$seen' WHERE `id` = '$id'");
$fill->execute();
header("Refresh:0");
}
if (isset($_POST['min'])) {
$seen--;
$order66 = $db->prepare("UPDATE `shows` SET `seen` = '$seen' WHERE `id` = '$id'");
$order66->execute();
header("Refresh:0");
}
$alert = "";
if ($seen == $eps) {
$alert = "Move " . $name . " to completed?<br>
<input type='button' value='Yes'><input type='button' value='No'>";
}
}
?>
将inputs
更改为 buttons
,像这样
<td><button type='submit' name='plus' value='$id'>+</button></td>
<td><button type='submit' name='min' value='$id'>-</td>
这将允许您使用$id
作为每个按钮的值。
然后,您可以稍微更改查询以使用已发布plus
或min
中的 id 值。
if (isset($_POST['plus'])) {
$fill = $db->prepare("UPDATE `shows` SET `seen` = `seen` + 1 WHERE `id` = ?");
$fill->execute(array($_POST['plus']));
} elseif (isset($_POST['min'])) {
$fill = $db->prepare("UPDATE `shows` SET `seen` = `seen` - 1 WHERE `id` = ?");
$fill->execute(array($_POST['min']));
}
此外(非常重要的是)将这些更新查询移到 while 循环之外。以您目前的方式,在循环中完成更新意味着您正在更新表中的每条记录,这显然不是您想要的。如果您将更新查询保留在循环中并带有我显示的修改,它们只会重复更新同一行,这大多是无害的,但完全没有意义。