3

非常に長い製品リストから、テーブルを作成しています。各行は更新できる必要があります。1 つのテーブル内に複数のフォームを配置すると、HTML は無効になります。解決策は、行ごとに 1 つのテーブルを作成することですが、その形式は非常に見苦しくなります。

私はこれを作りたいです:

<table>
<tr><form><td><input type=\"text\" name=\"name\" value=\"".$row['name']."\" /></td>\n";
</td><td></td>....<td><input type=\"submit\" name=\"Submit_btn\" id=\"Submit_btn\" value=\"Update\"></td></tr></form>
<tr><form><td></td><td></td>....<td><input type=\"submit\" name=\"Submit_btn\" id=\"Submit_btn\" value=\"Update\"></td></tr></form>
.
.
.
</table>

無効です。私に何ができるでしょうか?

4

3 に答える 3

2

JavaScript を使用せずにこのクロス ブラウザを実行する場合は、次のようにします。

行ごとに異なる名前の送信ボタンを使用します。名前には ID 情報が含まれます。お気に入り

<input type="submit" name="id[589] value="update this row">

ユーザーがその送信ボタンをクリックするか、ボタン tpo にタブを移動してフォーカスを与えてから Enter キーを押す限り、ブラウザーはその送信ボタンの名前 (およびその送信ボタンのみ) を確実に送信し、取得できます。 ID経由

$id = key($_POST['id']);

type=textただし、問題は、フォームのフォーカスがたとえばのように異なるタイプの入力要素にあるときに、ユーザーがエンターキーを介してフォームを送信した場合です。フォームは送信されますが、別のブラウザーでは次のいずれかになります。

1) 送信ボタンの名前をまったく送信しない。

2) または、フォームの HTML ソースに表示される最初の送信ボタンの名前を送信します。

フォームの先頭にダミーの送信ボタンを配置し、css で非表示にすると、このタイプのフォーム送信を確実に検出できます。

isset($_POST['dummySubmit']);

更新を実行することはできませんが、投稿されたすべての値を (ユーザーの作業が失われないように) ユーザーに出力し、送信ボタンを明示的にクリックして再試行させる必要があることを示すメッセージを出力できます。

または...個々のボタンを使用するのをやめて、すべてのレコードを毎回更新することもできますが、これはおそらくあなたが思っているほど悪くはありません. SQLクエリを減らすために、変更されたレコードを除外しようとすることには、一般的にあまりメリットがないと思います。ただし、本当に必要な場合は、連結された行データの md5 ハッシュを送信し、送信時にハッシュを再計算して比較してください。

于 2012-06-10T17:44:19.433 に答える
2

テーブル全体に 1 つのフォームを使用します。

サーバーに到達した後、不要なデータを除外します。

于 2012-06-10T15:03:15.367 に答える
0

id を使用して行を指定します。また、フィルタ アウトのために、変更された行の ID をサーバーに送信します。

于 2012-06-10T17:10:14.550 に答える