PHPでformの入力判別を行うときissetと$_SERVERを使うときがあるかと思いますが、どのように使い分けたらいいのでしょうか。
問題によって、issetで書かれていたり、$_SERVERで書かれていたりするのですが、、、
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
ベストアンサー
使い分ける必要はありません
$_SERVER['REQUEST_METHOD'] === 'POST'
は、postで送信されたかどうかチェックするものですが、実際$_POST自体が
スーパーグローバルな変数なので上記チェックしなくても$_POSTを参照することは可能です。
逆に上記をチェックしていても
$_POST['my_name']
をユーザーから送られてこない状態で参照すれば、Noticeが出ます。
流れ的にはPOSTで送られてくれば、$_POST['my_name'] も送られてきているだろうという
見立てなのでしょうけど、それは必ずしも必要十分ではないので結局
isset($_POST['my_name'])のチェックを二重にかける手間がかかるわけです
たとえば$_RQUESTを利用すれば、$_SERVER['REQUEST_METHOD']を見ても意味がありますが
これも無駄なのであまりお勧めしません
PHP
1<form method="post"> 2<input type="submit" value="post empty"> 3</form> 4<form method="get"> 5<input type="text" name="hoge" value="1"> 6<input type="submit" value="get"> 7</form> 8<form method="post"> 9<input type="text" name="hoge" value="2"> 10<input type="submit" value="post"> 11</form> 12 13<?PHP 14if($_SERVER['REQUEST_METHOD'] === 'POST') print $_REQUEST["hoge"]; 15?>
※上記特殊な例
まず、empty postを押すとNotice、その後getを押せば1、postを押せば2が表示され
その後empty postを押すと1がかえってくる
これはREQUEST_METHODがpostだがさっき押したgetのパラメータが残っているので
getの値を返すということ
結論
以下でやれば済みます
PHP
1$my_name=filter_input(INPUT_POST,'my_name');
- $my_nameがnullなら送られてきていない
- $my_nameが""なら送られてきたけど未入力
- それ以外はちゃんと送られてきている
投稿2017/10/24 05:39
総合スコア114843
0
yambejp さんの回答とほぼ同じですが、より詳細に記事がかかれているので紹介します。
投稿2017/10/24 05:53
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/24 07:56