【问题标题】:I need an unique button name attribute generated by php or a database我需要一个由 php 或数据库生成的唯一按钮名称属性
【发布时间】:2016-01-20 22:43:55
【问题描述】:

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

<?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'>";
    }
}
?>

【问题讨论】:

  • 你的逻辑在这里有缺陷,这是整个代码吗?
  • 在 sql 中无法引用与特定行/记录关联的实际 ID - $id 中存储的值将是最后一行的值 - 单击时的按钮将因此使用错误的 ID 发布表单(假设有表单)。

标签: php html sql button attributes


【解决方案1】:

将您的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 循环之外。以您目前的方式,在循环内完成更新意味着您正在更新表中的每条记录,这显然不是您想要的。如果您将更新查询留在循环中并进行我展示的修改,它们只会重复更新同一行,这几乎是无害的,但完全没有意义。

【讨论】:

    猜你喜欢
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多