2011-01-08 9 views
0
is_int($_GET['pid']) ? define(PRODUCT, $_GET['pid']) : die('Invalid Product Id'); 

pidの値が整数であっても、無効な商品IDメッセージがまだ表示されます。どうして?この単純なPHPラインで何が問題になっていますか?

+0

この例では、 'var_dump(is_int ( "23")); 'bool(false)'を出力します。実際にあなたの質問に答えてください:あなたのコードに何も問題はありません。このように三項演算子を使うべきではないということだけがあります。実際に値を割り当てる場合にのみ使用してください(もう一度:imo)。 –

+4

答えではなく、ちょうど助言:制御フロー(1つのステートメントまたは他のステートメントを実行する)のために3項演算子 '?:'を使用しないでください。これは式として使用することを意図しています。たとえば 'x =(y> 5? 'high': 'low')'です。この場合、 'if(...){...} else {...}'を使ってください。 –

答えて

4

Like manual:変数が数字か文字列(フォーム入力など、常に文字列)かどうかをテストするには、is_numeric()を使用する必要があります。

編集:これは私の答えで暗示されていますが、具体的になります。$_GETの内容は文字列なので、is_int呼び出しは常にfalseを返します。ここで実際に確認したいのは、特定の文字列の内容が の整数 の数値を表している場合は、is_numericの呼び出しを使用できます。

+2

"...特定の文字列の内容が整数を表していることを確認するには、is_numericの呼び出しを使用できます。いいえ。_is_numeric()_で確認できるのは、数値ではなく、整数であることだけです。クリスの答えを見てください。 – GZipp

1

$_GET[]は常に文字列を返すので、is_int()は常にfalseと評価されます。代わりにis_numeric()を試してください。

+0

あなたは8秒ほど速く、私は(同じ)答えを削除します;-) – ChristopheD

1

$_GETの文字列はすべて文字列で、is_int("2")falseを返します。

2

$ _GET配列の値は通常string型ですが、配列型もあります。

ctype_digit()を使用して、文字列が完全に数字であるかどうかを確認します。オプションで、文字列を最初にtrim()します。小数点、科学的表記法、16進文字列などのように数値で解釈されることがある幅広いフォーマットの文字列を受け入れる場合は、is_numeric()を使用してください。

関連する問題