私は以下を使用するスクリプトに出くわしました:
isset($_POST['submit'])
使用するコードと同様に:
$_SERVER['REQUEST_METHOD']=='POST'
この2つの違いと、どちらの方法が最適か疑問に思いました。
私は以下を使用するスクリプトに出くわしました:
isset($_POST['submit'])
使用するコードと同様に:
$_SERVER['REQUEST_METHOD']=='POST'
この2つの違いと、どちらの方法が最適か疑問に思いました。
isset($_POST['submit'])
特定の値が常に送信されることをすでに知っていて、したがって、予想されるフォーム送信(submit
この場合はフィールド)を示している場合、このコードは2つのことを示します。
POST
メソッドを介して送信されます。GET
PUT
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
この式を使用するだけで、次のことを表明できます。
POST
彼らは異なることをします。
最初に、配列内のキー(submit
)が設定されているかどうかを確認します。$_POST
$_SERVER
2つ目は、配列内のキーの値がであるかどうかを確認します'POST'
。これを使用して、データが「get」または「post」メソッドのどちらを使用して送信されたかを判断すると思いますが、通常は、どのメソッドが使用されたかだけでなく、どのデータが送信されたかを気にします。
あなたは何をしようとしているのですか?
これらは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
は空になります。
最初のステートメントは、リクエストメソッドがPost
であったかどうか、およびリクエストに要素の値が含まれていたかどうかをチェックしますsubmit
。2番目のメソッドは、要求メソッドがであったかどうかのみをチェックしますPost
。
フォームが投稿されたかどうかを確認するには、2番目のフォームが少し明確であるという意味で優れており、1つのことと1つのことだけを実行します。ただし、どちらを使用するかについてはあまり心配しません。