データの確認方法 - PHPプロ!Q&A掲示板

130

  • 100P

データの確認方法

質問日時 / 2006年8月8日 19:17    回答数 / 3件

Questioner:  sweet  このエントリーをはてなブックマークに追加 

キーワード / isset    is_numeric    $_POST   

送信されてきたデータを確認する方法についてお聞きしたいと思います。私は入力値を確認する場合は、

if (isset($_POST['id']) && is_numeric($_POST['id'])) {
  // $_POST['id'] に関する処理
}

といった具合に書いています(この場合、is_numericだけでもいいのですが)。最近、

if ($_POST['id']) {
  // 処理
}

というコードを見ました。値が設定されていない場合は$_POST['id']はnull値なのでこれでも十分だと思うのですが、みなさんはどう書かれていますか?
また、セキュリティ上などで両者のコードの違いなどありましたら教えていただけないでしょうか。よろしくお願いします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┣A01sweet>if ($_POST['id']) { >  // 処理 >} ではなく
┗A02do_ikareはじめまして、池田と申します。 セキュリティに直
 ┗A02-1sweet明瞭なご回答ありがとうございます。 やはりissetを

回答一覧

並び替え:

A01
answerersweet [8月8日 19:19]

>if ($_POST['id']) {
>  // 処理
>}

ではなく、

if ($_POST['id'] && is_numeric($_POST['id'])) {
  // 処理
}

でした。

この意見に回答する

ツリーへ TOPへ

A02 満足
answererdo_ikare [8月8日 19:38]

はじめまして、池田と申します。

セキュリティに直結するわけではありませんが、変数$_POST['id']は「未定義」の場合もありえますので、やはり「isset」関数を使うほうがベターかと思います。

if (isset($_POST['id']) && is_numeric($_POST['id'])) {
  // 処理
}

「if ($_POST['id']...)」では、ユーザからの入力がなかった場合に、「NULL」だから偽になるというより、未定義だから偽と判定されているだけです。
エラーレベルで「NOTICE」まで有効にしていた場合、エラーが発生しますし、パフォーマンス的にも不利かと思います。
(ついでに言えば、ユーザが「0」を入力していた場合に「偽」と判定されちゃいますし。)

なるべく「isset」関数で判定する方が好ましいと思います。

ついでに言えば、条件によっては「is_numeric」より、「ctype_digit」などの文字型(ctype)関数の方がパフォーマンスは勝るはずです。(もちろん判定の条件によっては使えませんが。)

以上、ちょっと的を外した回答かもしれませんが。

この意見に回答する

ツリーへ TOPへ

A02-1
replyersweet [8月8日 20:45]

明瞭なご回答ありがとうございます。
やはりissetを使って確認していくべきですね。ctype関数の件といい勉強になりました。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
セッションがいいのか、それともデータベースがいいのか教えて下さい。
 このエントリーをはてなブックマークに追加 
A
>ボタンをクリックしたら選んだ商品情報を持っておきたいと思っています。 そのくらいのことならセッションもしくはCookie(期限短め:場合によってはブラウザ閉じるまで)でいいんじゃないですかね。 #わ...

>>続きを読む

一つの目安として、ECサイトの購入情報など絶対に消えてはいけないものはDBに、カートなどの一時的に使用する情報や、ユーザに任意のタイミングで消去されても構わないものはセッションにと使い分けるといいでしょう。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)