2010-11-18 8 views
2

クエリ変数が存在するかどうかを確認したいと思います。それから私はそのクエリ値に基づいて何かをするでしょう。それが存在し、それが真実なら、何かをしてください。存在しないか偽の場合は、404ページを表示するなどの操作を行います。クエリ変数のテストが存在し、またALSOが特定の値に設定されていますか?

例えばURLがdomain.com?konami=true

if (condition) { 
    //something 
} else { 
    //show404 
} 

答えて

-1

これは最高の作品:

$konami = $_GET['konami']; 

if($konami == "true") 
{ 
    echo 'Hello World!'; 
} 
else 
{ 
    header('HTTP/1.0 404 Not Found'); 
} 
+2

いいえそれはうまく動作しません:)あなたのURLに '?konami'パラメータを渡さないと、それは存在せず、あなたは' Undefined index'を得るでしょうそれを '$コナミ 'にする。 PHPのデバッグ/エラー報告をオンにすると、表示されます。 –

3

ウンムこのでしたか?

if (isset($_GET['konami']) === true) { 
    // something 
} else { 
    //show 404 
} 
+0

@Gordon: 'true'には' ISSET() 'に対してテストされますので、*意志*作品。 – Boldewyn

+4

これだけの問題はすべてのクエリ値に対応しているので、クエスチョンがコナミである限りfalseになることもあります。 – Cameron

+0

@Cameron彼は存在するかどうか、それが存在するかどうかを言っています:) –

0

あなたはこのようにそれを行うことができます:あなたは常に$konamiが定義されているとします。この場合

$konami = false; 
if(isset($_GET['konami'])){ 
    $konami = $_GET['konami']; 
} 

if($konami == "true"){ 
    echo 'Hello World!'; 
} 
else{ 
    header('HTTP/1.0 404 Not Found'); 
} 

- でいっぱい - 設定された場合あなたのGETパラメータの値。

1

簡単:

if(isset($_GET['konami']) && $_GET['konami'] != 'false') { 
    //something 
} else { 
    // 404 
} 
-1

それを行うための最も簡単かつ最短の道:

if($konami != null){ echo $konami; } else { header('HTTP/1.0 404 Not Found'); } 
8

のOPの質問は少し不明です。あなたは彼がkonami$_GETパラメータであり、それは"true"の値がそう持っていることをチェックしたいと仮定した場合:

if (isset($_GET["konami"]) === true && $_GET["konami"] === "true") { 
    // something 
} else { 
    // show 404 
} 

(キャメロン)現在の受け入れ答えの問題は、(それがissetチェックが欠けているということです容認できない、それは客観的に間違っている)。最高の投票回答(Jan Hancicによる)の問題は、=== "true"小切手が不足していることです(議論の余地があります。

&&は、遅延部分であり、最初の部分が偽であれば2番目の部分が評価されないことを意味するので、"Undefined index"の警告を防ぎます。したがって、この声明の順序は重要です。

また、$a === true$a === "true"と同じではありません。最初の文字はブール値を比較し、2番目の文字列は文字列を比較します。

弱い比較の場合$a == trueあなたは真実をチェックしています。

多くの値は、文字列"true"、数字1、文字列"foo"のように真実です。 偽の値の例は、空文字列""、数字0およびnullです。

"true" == true; // true 
"foo" == true; // true 
1 == true;  // true 
"" == true;  // false 
0 == true;  // false 
null == true;  // false 

"true" === true; // false 
"true" === false; // false 
+0

'isset(..)=== true'と' isset(..) 'を使う特別な理由はありますか、それともそのスタイルの好みですか? – user2864740

+0

それはスタイルの好みです。 'isset()'は 'isset()'とよく似ているので、 '=== true'や' === false'を明示的に指定することはできません。 – Halcyon

+0

ナー、私は '(isset($ _GET [" konami "])=== true)=== true'を好む。あなたは知っている、ちょうどそれを明確にする。 ;-) –

4

どのような値をテストするべきかについて少し混乱があります。 konamiパラメータがtrueであることをブール値でテストしますか?konamiパラメータをtruthyとしてテストするか、文字列値が"true"に等しいかどうかをテストしますか?またはのパラメータkonamiをテストしますか?の値は一般的ですか?

ここでは、konamiを指定した文字列値(この場合は"true")と同時にテストすることをお勧めします。この場合、は、これは完全に十分である:$_GET['konami']が設定されていない場合、それは""を除く任意の文字列値に等しくすることはできませんので

ini_set('error_reporting', E_ALL & ~E_NOTICE); 
... 
if ($_GET['konami'] == "true") 
    ... 

これは、十分です。 $_GET['konami']が文字列であることがわかっているので、===を使用する必要はありません。

誰かが気に入らないかもしれないE_NOTICEをオフにしていますが、これらのタイプの「通知」は通常多くのプログラミング言語で問題なく、無効にしても何も見逃すことはありません。そうでない場合は、次のようなコードがunecessarily複雑にする必要があります。

if (isset($_GET['konami']) && $_GET['konami'] == "true") 

はあなたが本当にこれであなたのコードを複雑に、またはむしろそれを簡単にし、Undefinex indexなどの通知を無視しますか?それはあなた次第です。あなたが言及したように、他の答えと

問題:

  • @Jan Hancicの答え:それはtrue、ない"true"をテストします。
  • @Cameronの回答:簡素化される可能性があり、彼は無効化の必要性について言及していませんでしたE_NOTICE
  • @FritsバンCampenの答え:私の好みには複雑すぎる、=== true
1

迅速かつ簡単には不要なテスト。

$konami = filter_input(INPUT_GET, 'konami', FILTER_VALIDATE_BOOLEAN) or die(); 

REF:

filter flags

filter_input

1

あなたは、このコードを試してください。このコードでは、$ konamiに値が含まれ、$ konamiに 'true'が含まれている場合に2つの条件を1つずつチェックしました。

$konami = $_GET['konami']; 
if(($konami) && ($konami == "true")){ 
/*enter you true statement code */ 
}else { 
/* enter your false statement code */ 
} 
0
if(!$variable) { 

    //the variable is null 
    die("error, $variable is null"); 
}else{ 

    //the variable is set, your code here. 
    $db->query("...."); 
} 
関連する問題