3

私はPHPフォーム処理チュートリアルを読んでいますが、フォームに隠しフィールドを使用することを提案しているためIF ($_POST['hidden_field'] == whatever、フォームが送信されたか、表示されただけかを検出するためにPHPが何かを使用できるようになっています。

しかし、Notepad++ を使用してコードをステップ実行し、変数を観察した後では、隠しフィールドを完全に削除XDebugできない理由がわかりません。IF ($_POST['submit_button'] == 'Ok')

結局のところ、非表示フィールドが設定されていて、他のフォーム フィールドも設定されていない場合はないようです (それらが空であっても)。初めて、フォームが表示され、送信される前に、$_POST変数は既に存在しますが、空です。IF (!empty($_POST))フォームが送信されたかどうかを確認するためにも使用できると思いますか?

フォームの送信を検出するために隠しフィールドが必要な特別なケースはありますか?

編集:わかりました、私が行方不明で、隠しフィールドが必要な特別なケースはこれのようです。http://www.vbforums.com/showthread.php?562749-PHP-Checking-if-a-form-has-been-submitted-the-correct-way Enter キーを押してフォームを送信すると、 $_POST 変数には、送信ボタンの値は含まれません。Chrome はそのようには動作しないようですが、他のブラウザでは動作する可能性があります。

4

6 に答える 6

6

フォームの送信を検出するために隠しフィールドが必要な特別なケースはありますか?

フォームの送信を検出するために、フォームに隠しフィールドは必要ありませんが、スパム対策として使用される場合があります。たとえば、フォームに非表示フィールドを配置すると、次のようになります。

<input type="text" name="humans" id="humans" class="humans" />

css クラスを使用して、次のようにフィールドを非表示にすることができます

.humans { display: none; }

フォームの送信を確認するときに、フィールドが空かどうかを確認することもできます。

if(!empty($_POST['humans'])) {
// it's spam
}
else {
// it's human
}

(自動化されたスクリプトを使用して)フォームを送信でき、bots/spammers基本的にはscriptすべてのフィールドに入力しようとし、それをキャッチするために配置した隠しフィールドを認識しないため、この方法で、それが人間によって送信されたかどうかを判断できます。ボット。スパム ブロックの詳細と理解を深めるために、この記事をお読みください。

于 2013-09-22T00:15:17.037 に答える
5

いいえ、あなたの考えは正しいです。

ただし、これを行うことはお勧めしません-チュートリアルを書いた人は誰でも少し初心者のようです. ;) フォームに既に POST を使用している場合は、フォームが送信されたかどうか、または HTTP メソッド ($_SERVER ['REQUEST_METHOD']、PHP では "GET" または "POST")。

于 2013-09-22T00:01:46.417 に答える
0

はい、送信を検証するための非表示フィールドの複数の使用があります

  • あなたが言ったように、フォームビューと送信を区別します。
  • @kingkero が述べたように、ロボットによるフォームの自動送信をブロックする方法です。

既存のレコードを編集する場合

  • 元のレコードを見つけるには主キーが必要であり、ユーザーが変更できないように非表示にする必要があります
  • ブラウザに送信する前にサーバー側のどこかに古いデータを保存し、そのデータへの参照キーを非表示フィールドとして送信できます。後でそれを使用して、古いデータと新しいデータを比較して、何が変更されたかを判断できます。
  • マルチユーザーシステムでは、複数のユーザーが特定のレコードを同時に編集および保存することを選択すると、お互いに上書きできる可能性があります!! この状況を防ぐために、非表示フィールドを使用して、選択したレコードがフォームのロードおよび送信期間中に変更されたかどうかを判断してユーザーに通知できます。
于 2013-09-22T00:38:43.717 に答える
0

私はこれを自分で行っていませんがcurl、通常のブラウザ以外でサイトにアクセスする他の方法を弱体化させるのに役立つと思います-もちろん、隠しフィールドはリクエストごとに異なる必要があります.

于 2013-09-22T00:04:07.053 に答える