2012-06-08 17 views
14

私が使用するスクリプトに遭遇しています

isset($_POST['submit']) 

だけでなく、コード使用していること:

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

私はこれら2つの方法の違いと、どの方法が最適かを考えていました。

+3

を提出されました、彼らは別の仕事をする – zerkms

+3

'$ _POST ['submit']'、wの存在を確認するここでは 'submit'は' type = submit name = submit'ボタンの名前であり、PHPコーダーの間で頻繁に実行される最も一般的な(そしてラメ)習慣の1つです。あなたのコードは、ユーザーが一般的なWebブラウザベースの相当な塊の中でEnterキーを使用してフォームを送信すると、完全に失敗します。しないでください、それは非常に素人です。 – goat

+0

@chris Thanxは情報のために、それを知らなかった。私はかなりPHPに新しいです。 – Madz

答えて

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は空になります。

+2

スーパーグローバル '$ _POST'は常に設定され、常に配列です。 – Arjan

+0

@Arjan良いキャッチ。より良い文言: "空になる" –

+0

私が間違っている場合は私を修正しますが、フォームメソッドがPOSTの場合、ボタンが押されなかった場合、$ _POSTが空になる唯一の方法はありませんか? – Madz

4

さまざまなことがあります。

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

$_SERVER配列のキーの値が'POST'であるかどうかを確認します。私は、データが "get"や "post"メソッドを使って送信されたかどうかを知るためにこれを使うと思いますが、通常はどのメソッドが使われているのか気にしません。

あなたは何をしようとしていますか?

0

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

フォームが投稿されたかどうかを確認するには、2番目の方法は、1つのことと1つのことを行うことで、少し明確になります。しかし、私はどちらを使うべきかについてあまり心配しません。

6
isset($_POST['submit']) 

すでに特定の値が常にを送ったので、(この場合はsubmitフィールド)期待されるフォームの送信を示しているであろうことがわかっている場合、このコードはあなたに二つのことを教えてくれます:

  1. GETとは対照的にフォームを、POST方法を介して送信され、PUTなど
  2. submitフィールドが渡されています。

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

これはまさに一つのこと、POSTメソッドを介して提出されたフォームを示します。などがそれを使用する理由:

  • 無効なフォームの送信(例えばないすべてのフィールドが送信された)及び(などGETPUT、)ページ検索の他の種類を区別したい
  • あなたはしないでくださいあなたが受け取るものを正確に知っている。おそらく、このコードは、その依存部分のすべての詳細を知らないコントローラで実行されるでしょう。

旧対

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つのフィールドは、彼らは比類のないです
+1

送信ボタンがフォームの送信を検出するのを確認しないでください。ユーザーがEnterキー(特定のブラウザで)や特定のjavascriptフォーム送信メソッドを使用してフォームを送信すると失敗します。フォーム提出が黙って失敗したときにユーザーに非常に迷惑をかける... – goat

+0

いずれにしても、あなたのコメントはあなたの懸念に対処するために私の答えでいくつかの変更を加えました... look pls –