我的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的值设置为游戏,即使我将页面变量设置为图库http://www.mydomai.com/?from=set&page=gallery。我能想到的唯一原因是我的开关不能正常工作吗?或者它以某种方式绕过开关?
提前Thanx!
答案 0 :(得分:5)
我删除了一些无用的变量赋值后才运行你的代码:
<?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
}
这一切看起来都很好,xxx.php?from = 1&amp; page = gallery echos out“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');
我希望这会有所帮助
干杯 路加
答案 1 :(得分:1)
尝试执行var_dump($ page);退出;在切换之前,看看它吐出来的东西。
你也可以做一个var_dump($ from)并查看吐出的内容 - 它可能会转到其他地方,因此它甚至可能无法进入交换机。
答案 2 :(得分: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!
这只是一种代码风格,并不能解决所有问题(如果有的话)。实际上,此代码中不需要切换块。我看不出它在做什么。
答案 3 :(得分:0)
您不一定需要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分钟。为我缓慢服务吧!