0

SQL データベースを使用して追加されたデータを保存するバナー管理ツールを作成しています。このデータベース内のすべてのバナーに対して、更新および削除ボタンを表示するタブがあります。これらのボタンは PHP ベースのループで作成されるため、X 個の更新ボタンと削除ボタンがあります。

押したボタンに応じて、更新ボタンがクリックされたアイテムの更新ビューに移動します。

これらのボタンはすべて同じ名前であるため、どのボタンが押されたかを区別できないという問題が発生します。DB 内のすべてのアイテムには 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"か、フォームごとに使用するか、1 つの大きなフォームに固執する場合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]またはを保証できませんでしupdate[abc-def]た。全体として、数値識別子を使用すると、不必要な頭痛の種を大幅に減らすことができます。

于 2011-09-06T12:03:26.467 に答える