PHP制御ロジックの問題

mysql php
PHP制御ロジックの問題

私はPHPコードに少し問題があり、受け取ったものに応じてフローのさまざまな状態の変数に値を割り当てていますが、何らかの理由でそれが一時停止することがあります、ここにコードがあります。

if (isset($session)) {
    //if the user is in the database
    if ($row == 1) {

        $from = $_GET['from'];

            if (isset($from)) {

                $page = $_GET['page'];

                switch ($page) {
                    case "game":

                        $page = "game";
                        sendVars($page);//send the variable

                        break;
                    case "gallery":

                        $page = "gallery";
                        sendVars($page);//send the variable

                        break;
                    case "leaderboard":

                        $page = "leaderboard";
                        sendVars($page);//send the Variable
                        break;

                }
        }else {
                $page = "game";

                sendVars($page);//send the variable
            }

        //if the user is not in the database
        }else {

            //do this
        }

} else {

    //register
}

奇妙な理由で、ページ変数をgalleryのようにhttp://www.mydomai.com/?from=set&page=galleryのように設定しても、$ pageの値をgameに設定し続けます。 私が考えることができるこの唯一の理由は、私のスイッチが正常に機能していないということですか? またはそれは何とかスイッチをバイパスしていますか?

事前に感謝します!

  0  1


ベストアンサー

いくつかの不要な変数の割り当てを削除した後、コードを実行しました。

xxx.php?from = 1&page = galleryは “gallery”をエコーアウトします。スクリプトの上部でprint_r($ _ GET)を実行して、出力内容を確認してお知らせください。

副次的に、私はあなたのために以下が短くなるかもしれないと思うが、それでも同じことをする:

if (isset($_GET['from'])) {
  // Check if $_GET['page'] exsists and is either game, gallery or leaderboard
  if (isset($_GET['page']) && in_array($_GET['page'], array('game', 'gallery', 'leaderboard')))
    sendVars($_GET['page']);
}
else
  sendVars('game');

これが役立つことを願っています

チアーズルーク

5


var_dump($ page); exit;を試してください。スイッチの前に、それが吐き出すものを参照してください。

また、var_dump($ from)を実行して、それが何を吐き出しているのかを確認できます。それは他に行くのかもしれないので、スイッチに届かないかもしれません。

1


これが関数内にある場合、インデントのレベルを絶えず増加させるよりも個人的にガードスタイルの節を好む。 アイデアは、より大きな論理ブロックを「保護」するために、悪い状態(つまり、何かがうまくいかない場合)を選択することです。

あなたの場合、それはswitchステートメントです。

if (!isset($session))
    return ...; // register

if ($row != 1)
    return ...; // do this

$from = $_GET['from'];
$page = $_GET['page'];

if (isset($from)) switch ($page) {
    case "game":
        $page = "game";
        break;

    case "gallery":
        $page = "gallery";
        break;

    case "leaderboard":
        $page = "leaderboard";
        break;
}

else $page = "game";

return sendVars($page);// don't need to repeat this if all cases do it!

これは単なるコードのスタイルであり、すべての問題を(もしあれば)修正するものではありません。 実際、このコードにはswitchブロックは必要ありません。 何もしていないことがわかりません。

1


必ずしもswitchステートメントは必要ありません。 あなたのロジックに明らかな問題はありませんが、これは同じことになると思います。

__

if (isset($session))
{
    //if the user is in the database
    if ($row == 1)
    {
        $page = (in_array($_GET['page'],array('game','gallery','leaderboard'))) ? $_GET['page'] : "game";
        sendVars($page); //send the variable
    }
    else //if the user is not in the database
    {
        //do this
    }
}
else
{
    //register
}

__

  • Luke *が同じin_arrayメソッドを使用しましたが、私の25分前に見ました。 遅くても私にぴったりです!

0


タイトルとURLをコピーしました