php
  • mysql
  • if-statement
  • 2009-08-17 14 views 0 likes 
    0

    私はこのコードのトラブルサイコーいます:データベースでPHP + MySQLの問題:(

    if ($_GET['offline']) {$extranet = $_GET['offline'];} else {$extranet = $online;} 
    $sql = mysqli_query($db,"UPDATE tbl_system SET value = '$extranet' WHERE property = 'extranet'"); 
    echo $_GET['offline']; 
    echo $extranet; 
    echo $online; 
    

    、プロパティ=エクストラネットは、エコーの1 結果であるフィールドの値:

    $_GET['offline'] = 0 
    $extranet  = 1 
    $online   = 1 
    

    今、明らかに、何かがここで間違っている

    このGETを与えるためのURLは次のとおりです。。?app=admincp&offline=0、そう$_GET['offline']は問題ではありません

    問題はifステートメントにある必要がありますが、わかりません。

    アイデアはありますか?

    +0

    を使用するように、より良い設定されていない場合にはエラーがスローされます私は、PHPタグを追加;) –

    +0

    は、実際に値を設定するコードがありますエクストラネットの? 私はこれをより明確に書き直すでしょう。変数が正しく初期化されていることを確認してから、すべての条件が満たされた後に同じ文字列を出力してから、ポストを更新してください。その後、私たちはあなたを助けることができるようになります。 Jacob – TheJacobTaylor

    +0

    私がこの権利を読んでいる場合、オフラインは0に設定され、エクストラネットは1 $ – TheJacobTaylor

    答えて

    2

    $ _GET ['offline']は0で、0はfalseと評価されるため、ステートメントは正しく処理されます。オフラインが引数として渡されているかどうかを確認する場合は、使用する必要があります。

    if (!isset($_GET['offline'])) {$extranet = $_GET['offline'];} else {$extranet = $online;} 
    
    2
    if ($_GET['offline']) 
    

    PHPでは "0"という文字列がfalseと評価されるため、falseが返されるため、if文の条件はtrueに評価されません。代わりにissetまたはarray_key_existsを使用してください。例えば:

    if (isset($_GET['offline'])) { ... } 
    

    か:あなたのケースでは

    if (array_key_exists('offline',$_GET)) { ... } 
    

    、あなたは値が正確に文字列をゼロ「0」であるかどうかを知りたいでしょう。私はstrcmpを使用することをお勧めします:

    if (strcmp($_GET['offline'],"0") === 0) { 
        $extranet = $_GET['offline']; 
    } else { 
        $extranet = $online; 
    } 
    $sql = mysqli_query($db,"UPDATE tbl_system SET value = '$extranet' WHERE property = 'extranet'"); 
    echo $_GET['offline']; 
    echo $extranet; 
    echo $online; 
    
    1

    $_GET['offline']は、あなたが提供するURLにはゼロであるので、そのブロック内if($_GET['offline'])とすべてがヒットすることはありません。代わりにisset()を使用してください。

    2

    Yikes! karimのコメントに加えて、あなたの入力を害さない!あなたはURLパラメータを取って、それをSQLクエリに直接入れています。 AのURL

    ?app=admincp&offline=';DROP table tbl_system;-- 
    

    あなたを台無しにするでしょうか?

    +0

    いいえ、私は生のコードが動作していることを保証することができます:) – bear

    1
    if (strcmp($_GET['offline'],"0") === 0) { 
        $extranet = $_GET['offline']; 
    } else { 
        $extranet = $online; 
    } 
    

    これは$ _GET [「オフラインが」] !isset($_GET['offline'])

    関連する問題