質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

9809閲覧

PHPでPOST値を取得する関数の書き方

avantgarden

総合スコア121

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2016/02/22 01:29

編集2016/02/22 01:31

PHPでログイン機能作成の練習をしています。

POST値を取得する関数を以下のように定義し、

function get_post_data($key) {

$str=''; if(isset($_POST[$key]) === TRUE) { $str = $_POST[$key]; } return $str;

}

たとえばformから

<input type="text" name="email" value="">

で入力されたメールアドレスを

get_post_data('email')

で取得するとします。

【質問】

定義したget_post_data()関数内で、

if(isset($_POST[$key]) === TRUE)

という条件分岐は必要でしょうか。

type="text"なら、空欄で送信しても空文字(?)がセットされるので、

必要ないのかなと思っているのですが。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

PHP標準でfilter_inputという関数があって、同等のことを1行で実現できます。

php

1function get_post_data($key){ 2 return filter_input(INPUT_POST,$key) ?: ''; 3}

投稿2016/02/22 01:53

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fagai

2016/02/22 02:28 編集

一応こちら補足させていただくと、filter_inputはPOSTの$keyが文字列であると分かっていればこちらを使ったほうが良いですね。 filter_inputの場合、配列でデータが来た際にはfalseが返されます。
guest

0

ベストアンサー

必要かと思います。理由はチェックボックス等の場合に取得できないからです。

そしていくつか申し上げると、if(isset($_POST[$key]))で大丈夫です。issetは恐らく分かっていると思うのですがtrueかfalseを返すので===TRUEとしても結果はtrueかfalseですよね。

また、str変数をつくるまでも無いので私であれば以下のように組むでしょう。($_POST[$key]に対しての処理が長くなりそうであれば、issetの部分は!をつけて反転させます(見やすさの観点から))

php

1function get_post_data($key) { 2 if(isset($_POST[$key]) { 3 return $_POST[$key]; 4 } 5 return null; 6}

投稿2016/02/22 01:37

編集2016/02/22 01:41
fagai

総合スコア2158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

avantgarden

2016/02/22 01:49

関数にする以上は、チェックボックスやラジオボタンも考慮してissetをしておくべきだということですね。issetの記述については===TRUEは要らないですね^^; ご回答の中で、issetがfalseであればnullを返していますが $str=''; 〜中略〜 return $str; と同じ意味ですよね? つまり、文字列なのでnullを返すことと''を返すことは同じことですよね?
miyabi-sun

2016/02/22 01:53

横からなのでfagaiさんにぶら下げます。 更に縮めてこんな風に書いても面白そうです。 function get_post_data($key) { return (isset($_POST[$key]) ? $_POST[$key] : null); } 三項演算子は複雑になりがちですが、 isset+三項演算子の組み合わせは大抵配列の該当するキーがあるか否かなので、 このケースではこの書き方でも通じます。 もしPHP7なら下記のように書けるそうですよ function get_post_data($key) { return $_POST[$key] ?? null; } http://qiita.com/hnw/items/dff62cd02c780b613d03
maisumakun

2016/02/22 01:54

NULLと空文字列は別な値です。とりわけ、(Oracle以外の)データベースに入れる場合には、まったく違った挙動となります。
fagai

2016/02/22 02:02 編集

nullにしているところは''でも良いのですが、空値の場合だと意図的に空にしたのか分からなくなると思います。(ちょっと意図的というのがわかりにくいかもです) なので私はnull推奨ですね、空値でも構わないのですが。 maisumakunさんのコメントはその通りです。
avantgarden

2016/02/22 02:10

取得したPOST値(メールアドレスとパスワード)を条件としてDBからuser_idを取れたら、そのユーザのページに遷移させるとしたいので、issetがfalseの場合の返り値は、空文字でもnullでも(極端な話POST値以外ならなんでも)いいんですよね。今後はnullを使うようにします。 >miyabi-sunさん 三項演算子だとシンプルに書けますね。 参考にさせていただきます。(洒落じゃないですが) >maisumakunさん 挙動が違うとは、どのように違うのでしょうか。 勉強のために教えていただきたいです。 参考になるサイトがあれば、そのご紹介でも結構です。
fagai

2016/02/22 02:15

空値でもnullでも良いのですが、この関数を例えばDBのINSERT時に使うとなるとnullと空値は違うものなので、データに齟齬がでます。 なので私がnullを提案していたとしても、設計上、空値を扱ったほうが問題なく行くのであれば空値を使うべきです。
avantgarden

2016/02/22 02:42

どっちが良いとかではなくケースバイケースということですね。 ありがとうございました。 他の方々もありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問