1

未登録のユーザーがコンテンツを投稿することを簡単に禁止するために、個々のフォームの複雑さを気にすることなく、ユーザーデータがHTMLフォームを介して投稿されたかどうかを簡単に判断するための包括的な方法を探していました。サイト。

フォームのaction属性が常にPOSTであると仮定すると、以下の使用に潜在的な問題がありますか。

if(count($_POST) > 0)

データが投稿されたかどうかを確認するには?

つまり、ユーザーがを介して情報を送信しなかった場合でも、またはユーザーを介して情報を送信した場合でも、シナリオはありますcount($_POST)か?> 0POSTcount($_POST)== 0POST

(最初に試しましたが、ユーザーからデータが送信されなくてもisset($_POST)返されるため、機能しませんでした。)truePOST

4

5 に答える 5

2

empty($_POST)を使用して、issetおよびnull/blank値をチェックできます。ただし、$ _ POSTは常に設定されるため、主に空白かどうかを確認します。

于 2012-12-07T17:52:26.480 に答える
1

自分で作ったページに何が来るのか予想できないのは少し変ですが、問題はありません。

理由isset($_POST)は常に設定されているため機能しません(スーパーグローバルです)。

于 2012-12-07T17:51:25.327 に答える
1

application/x-www-form-urlencoded(つまり、一般的なフォームからの)として投稿されたデータのみに関心がある場合はcountemptyチェックするのに十分である必要があります。

あらゆる種類の生データPOST入力を探している場合は、以下を使用する必要があります。

if(empty(file_get_contents("php://input"))) {
   // there is no POST data
}

application/json生のPOSTデータ(または同様の非フォームリクエスト)を処理している場合を除いて、データがまったく投稿されていないかどうかを実際にチェックすることはおそらくそれほど有用ではないことを付け加えておきます。通常、処理スクリプトが期待するSPECIFICデータにのみ関心があります。したがって、これは本質的に役に立たないコードです。これは、その特定のデータの存在を確認する必要があるためです(つまりempty($_POST['some_field']))。

于 2012-12-07T17:58:11.670 に答える
1

これは、1つ以上の値がPOSTを介して送信されたかどうかを判断する最も簡単な方法です。

if ($_POST) {
    // it is 100% reliably implied that count($_POST) > 0
}

ただし、キー/値を含まないフォーム投稿を受け取る場合があります。例としては、「チェックボックスをクリックして利用規約に同意する」タイプのフォームがあります。この場合、フォームフィールドはチェックボックスまたは送信ボタンのみです。チェックボックスの名前と値のペアは、チェックボックスがオンになっている場合にのみ送信されます。送信ボタンの名前と値は、ブラウザによって常に送信されるとは限りません。$ _POSTにエントリがない可能性がある別の例は、ファイルアップロードフォームです。これらのシナリオでは、優れたフォームハンドラーが適切に動作します。以下を使用して、すべての状況でPOSTリクエストを検出できます。

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // its a post request, although we may have 0 posted values
}
于 2012-12-07T18:11:59.790 に答える
0

すべてのフォームが同一であり、他のサーバーからの特別な要求や奇妙な要求がない場合は、問題なく機能するcount()はずです。

于 2012-12-07T17:53:17.570 に答える