我需要由 php 或数据库生成的唯一按钮名称属性


I need an unique button name attribute generated by php or a database

我正在为自己做一个小项目,制作我最喜欢的节目的剧集列表,我有加号和最小号按钮(看到的剧集)。但是,如果我单击一个按钮,两个条目(来自数据库)都会加号或最小值。这是我的代码:

<?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作为每个按钮的值。

然后,您可以稍微更改查询以使用已发布plusmin中的 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 循环之外。以您目前的方式,在循环中完成更新意味着您正在更新表中的每条记录,这显然不是您想要的。如果您将更新查询保留在循环中并带有我显示的修改,它们只会重复更新同一行,这大多是无害的,但完全没有意义。