19

私は以下を使用するスクリプトに出くわしました:

isset($_POST['submit'])

使用するコードと同様に:

$_SERVER['REQUEST_METHOD']=='POST'

この2つの違いと、どちらの方法が最適か疑問に思いました。

4

4 に答える 4

10
isset($_POST['submit']) 

特定の値が常に送信されることをすでに知っていて、したがって、予想されるフォーム送信(submitこの場合はフィールド)を示している場合、このコードは2つのことを示します。

  1. フォームは、、などではなく、POSTメソッドを介して送信されます。GETPUT
  2. submitフィールドが渡されました。

$_SERVER['REQUEST_METHOD'] == 'POST'

これは、フォームがメソッドを介して送信されたことを正確に示していますPOST。それを使用する理由は次のとおりです。

  • GET無効なフォーム送信(たとえば、すべてのフィールドが送信されたわけではない)と他の種類のページ検索( 、、PUTなど)を区別したい
  • 何を受け取るのか正確にはわかりません。おそらく、このコードは、依存する部分のすべての詳細を知らないコントローラーで実行されます。

前者は

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (!isset($_POST['name'])) {
        // at this point you know that `name` was not passed as part of the request
        // this could be treated as an error
    }
}

対:

if (!isset($_POST['name'])) {
    // the `name` field was not passed as part of the request
    // but it might also be a GET request, in which case a page should be shown
}

重要

フォームは他の方法(テキストボックスでEnterキーを押すなど)で送信できるため、リクエストの送信ボタンフィールドをチェックすることは信頼できません。


$_POST

この式を使用するだけで、次のことを表明できます。

  1. フォームは経由で送信されますPOST
  2. 少なくとも1つのフィールドが送信されました
于 2012-06-08T04:44:55.380 に答える
4

彼らは異なることをします。

最初に、配列内のキー(submit)が設定されているかどうかを確認します。$_POST

$_SERVER2つ目は、配列内のキーの値がであるかどうかを確認します'POST'。これを使用して、データが「get」または「post」メソッドのどちらを使用して送信されたかを判断すると思いますが、通常は、どのメソッドが使用されたかだけでなく、どのデータが送信されたかを気にします。

あなたは何をしようとしているのですか?

于 2012-06-08T04:28:54.463 に答える
4

これらは2つの異なることを意味します。submit最初に、フォームが送信されたときにパラメータが渡されたかどうかを確認します。多くの場合、このスニペットを使用して、フォームが送信されたことを確認します。これが機能するのは、送信ボタンが技術的には<input>その値であり、フォームの一部であった他の要素と一緒に送信されるためです。

<?php
    if(isset($_POST['submit'])) { // This way form and form logic can be adjacent to each other
        // Logic
    }
?>
<form method='POST' action='<?= $_SERVER['REQUEST_URI'] ?>'>
   <!--- other form stuff -->
   <input type="submit" name="submit" value="Send!" />
</form>

2番目のスニペットは、フォームがPOSTメソッドで送信されたかどうかをテストします。これは必ずしもフォームボタンが押されたことを意味するわけではありません。POSTで送信されなかった場合、スーパーグローバル$_POSTは空になります。

于 2012-06-08T04:30:52.470 に答える
0

最初のステートメントは、リクエストメソッドがPostであったかどうか、およびリクエストに要素の値が含まれていたかどうかをチェックしますsubmit。2番目のメソッドは、要求メソッドがであったかどうかのみをチェックしますPost

フォームが投稿されたかどうかを確認するには、2番目のフォームが少し明確であるという意味で優れており、1つのことと1つのことだけを実行します。ただし、どちらを使用するかについてはあまり心配しません。

于 2012-06-08T04:32:17.490 に答える