0

我正在创建一个横幅管理工具,它使用 SQL 数据库在添加后存储其数据。有一个选项卡,为该数据库中的每个横幅显示一个更新和删除按钮。这些按钮是在基于 PHP 的循环中创建的,因此我将拥有 X 数量的更新和删除按钮。

现在,根据我按下的按钮,我将转到单击更新按钮下的项目的更新视图。

由于这些按钮都具有相同的名称,我遇到的问题是我无法区分按下了哪个按钮。数据库中的每个项目都有en ROWID,但是一旦你按下按钮,我就无法弄清楚如何获取ID......

这是如何生成这些按钮的代码。

do {
    $entry = $dbase->querySingle("SELECT name FROM banners where ROWID='$currentRowNumber'");

    echo "<tr>";
    echo "<td width=\"50\">". $entry ."</td>";
    echo "</tr>";

    echo "<tr>";
    echo "<td><input type=\"submit\" name=\"operation\" value=\"Update\"></td>";
    echo "<td><input type=\"submit\" name=\"operation\" value=\"Delete\"></td>";
    echo "</tr>";

    $currentRowNumber++;

} while ($dbase->querySingle("SELECT name FROM banners where ROWID='$currentRowNumber'") != NULL);

我想知道是否有人对如何区分这些按钮有任何想法。也许我可以在下面读出一个隐藏的因素?(不知道有没有这样的东西)

问候

4

2 回答 2

1

您可以将每行的所有操作包装在一个input type="hidden" value="$id"包含项目 ID 的表单中,或者使用action="/update?id=$id"每个表单,或者,如果您想坚持一个大表单,您可以使用name="update[$id]"提交按钮。

于 2011-09-06T11:47:14.810 回答
0

首先,不要将按钮称为“操作”之类的通用术语,我建议您按照它们的实际操作来称呼它们,即“更新”和“删除”。这允许您将按钮的功能与按钮中显示的标签分离。

<input type="submit" name="update" value="Update banner" />
<input type="submit" name="delete" value="Remove banner" />

您可以使用 array_key_exists 或 isset 检查哪个按钮已被按下,以确定按下了哪个按钮。

if (isset ($_POST ['update']))
{
}
else if (isset ($_POST ['delete']))
{
}
else
{
    // No button was pressed
}

至于确定按钮所指的项目,我假设您所有的横幅都有某种唯一标识它们的方法(主键,通常是数值)。如果在按钮名称中使用 [方括号] 语法,则可以识别按下的按钮所在的行。

<input type="submit" name="update[1]" value="Update banner" />
<input type="submit" name="delete[1]" value="Remove banner" />
<input type="submit" name="update[23]" value="Update banner" />
<input type="submit" name="delete[23]" value="Remove banner" />
<input type="submit" name="update[153]" value="Update banner" />
<input type="submit" name="delete[153]" value="Remove banner" />

if (isset ($_POST ['update']))
{
    $rowToUpdate = key ($_POST ['update']);
}
else if (isset ($_POST ['delete']))
{
    $rowToDelete = key ($_POST ['delete']);
}
else
{
    // No button was pressed
}

我在这里使用数字作为标识符,但您可以使用任何您正在使用的东西来区分一个横幅和另一个横幅。我怀疑您是否可以在标识符中使用标点符号或空格,而不是下划线,因此您需要牢记这一点。 update[abc]应该没问题,update[abc_def]但我不能保证update[abc def]or update[abc-def]。总而言之,使用数字标识符将为您省去很多不必要的麻烦。

于 2011-09-06T12:03:26.467 回答