【问题标题】:PHP loop which creates X buttons创建 X 按钮的 PHP 循环
【发布时间】:2011-09-06 11:43:23
【问题描述】:

我正在创建一个横幅管理工具,它使用 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);

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

问候

【问题讨论】:

    标签: php html button do-while


    【解决方案1】:

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

    【讨论】:

    • 虽然使用 GET 触发导致数据库更改的操作并不违反表单提交的规范,但它通常被认为是不好的做法,应该避免。最好使用隐藏变量方法。
    • 答案已更新。 POST 到带有 ID 的 URL 不符合您的描述(这就像使用 /update?id=$id&amp;newvalue1=foo&amp;newvalue2=bar,一个 GET)。
    【解决方案2】:

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

    <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]update[abc-def]。总而言之,使用数字标识符将为您省去很多不必要的麻烦。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-04
      • 2013-07-17
      • 1970-01-01
      • 2014-08-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多