質問
SQLデータベースを使用して、追加されたデータを保存するバナー管理ツールを作成しています。このデータベースのすべてのバナーに更新と削除ボタンを表示するタブがあります。これらのボタンはPHPベースのループで作成されているため、Xの量の更新および削除ボタンが表示されます。
これで、どのボタンを押しますか?アップデートボタンがクリックされたアイテムの更新vieuwに移動します。
これらのボタンがすべて同じ名前を持っているので、私が遭遇する問題は、どのボタンが押されているかを区別できないということです。 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);
これらのボタンを区別する方法について誰かが何かアイデアを持っているのではないかと思っていました。たぶん、私が以下で読むことができる隠された要因ですか? (そのようなものが存在するかどうかわからない)
よろしく
解決
行ごとのすべての操作を、 input type="hidden" value="$id"
アイテムのIDを含むか、 action="/update?id=$id"
フォームごと、または、1つの大きなフォームに固執したい場合は、使用できます name="update[$id]"
送信ボタン用。
他のヒント
まず、ボタンを「操作」のような一般的な用語と呼ぶ代わりに、実際に行うこと、つまり「更新」と「削除」によって電話をかけることをお勧めします。これにより、ボタンに表示されているラベルからボタンの関数を切り離すことができます。
<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]
. 。全体として、数値識別子を使用すると、多くの不必要な頭痛が節約されます。