PHP流逻辑问题

PHP流逻辑问题,php,mysql,Php,Mysql,我的PHP代码有点问题,我根据接收到的内容在流的不同状态下为变量赋值,但由于某种原因,它一直停留在某一点上,下面是代码 if (isset($session)) { //if the user is in the database if ($row == 1) { $from = $_GET['from']; if (isset($from)) { $page = $_GET['page'];

我的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
}
现在出于一些奇怪的原因,它一直将$page的值设置为game,尽管我将page变量设置为gallery,就像这样。我能想到的唯一原因是我的开关没有正常工作?或者它不知怎么绕过了开关

先走一步

尝试进行变量转储($page);出口在开关前,看看它会吐出什么


此外,您还可以执行var_dump($from)并查看输出的内容-可能是它转到了else,因此它甚至可能没有到达交换机。

在删除了一些不必要的变量赋值后,我刚刚运行了您的代码:

<?php

// I added this function just for testing
function sendVars($page) {
  echo $page;
}

if (isset($_GET['from'])) {

  $page = $_GET['page'];

  switch ($page) {
    case "game":
      sendVars($page); //send the variable

      break;
    case "gallery":
      sendVars($page); //send the variable

      break;
    case "leaderboard":
      sendVars($page); //send the Variable
      break;
  }
} else {
  $page = "game";

  sendVars($page); //send the variable
}
我希望这有帮助

干杯
Luke

如果这是在函数内部,我个人更喜欢保护式子句,而不是不断增加缩进级别。这个想法是你挑出坏的情况(如果出了问题)来“保护”更大的逻辑块

在您的情况下,这就是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语句。我看不出你的逻辑有什么明显的问题,但我认为这也会起到同样的作用:

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');

刚才看到卢克使用了相同的数组方法,但比我早了25分钟。我太慢了,活该

为什么在切换语句中为游戏、图库等重新分配$page?您是否尝试在切换前输入回音?我发现这非常有用。@scunlife我重新分配它是因为根据我从URL获得的信息,我需要使用sendVars函数将变量发送到等待的flash文件。@kieley,您实际上不需要重新分配它,因为case('game')的行为类似于if($page='game'),所以$page已经等于这个case中的game。其他情况也一样。@kielle你不必这么做。如果它达到这种情况,它已经设置为它应该具有的任何值。事实上-由于else块强制它“游戏”,我怀疑它甚至没有进入开关。使用此方法,您可以执行诸如读取“允许”之类的操作从数据库或配置文件中分页,并填充传递到条件的数组。这样你就可以在不改变代码的情况下添加页面了。这太棒了,你可以尝试一下,然后再报告,谢谢你花时间帮忙!我得到的数组([from]=>set[page]=>gallery)与该URL相同。这是个好消息,您是否尝试用上面的代码替换if($row==1){}中的代码?您在代码中的具体位置打印了\u r($\u GET),根据我的了解,如果将$\u GET填充为您上面的注释,那么如果您执行echo$页面,它应该可以工作;开关正上方是“画廊”?如果是,可以添加echo“test”;进入gallery案例,查看该案例是否处于活动状态。如果它呼应了测试,那么一切都很好,否则,图库周围是否有空白,努力想知道还有什么可能是错误的。如果$page='foobar',你发送了它,但Kieley没有这样做
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
}