2015-10-05 51 views
-1

好的,所以我有一个函数可以根据页面ID生成前一个/下一个链接,它之前是工作的,但现在不是。 switch语句中使用的所有必需变量都在调用它们的函数之前定义。下面就来生成链接功能:函数调用似乎没有通过变量

function generateNavbar(){ 
//Name and number 
$name = preg_replace("#[\d]#", "", strval($_GET["id"])); 
$num = preg_replace("#[^\d]#", "", strval($_GET["id"])); 

$maxNum = getMaxPage($name); 

//Print the nav links 
echo "<br><br><center><b>"; 
if(intval($num) > 1) echo "<a href=\"?id=" . $name . (intval($num) - 1) . "\"><< PREV</a>"; 
if(intval($num) > 1 && intval($num) < intval($maxNum)) echo " | "; 
if(intval($num) < intval($maxNum)) echo "<a href=\"?id=" . $name . (intval($num) + 1) . "\">NEXT >></a>"; 
echo "</b></center>"; 
}; 

而这里得到最大价值的功能:

function getMaxPage($name){ 
//Get max value 
switch($name){ 
    case "codeSquirrel": 
     return $numSquirrel; 
     break; 
    case "strPhobia": 
     return $numPhobia; 
     break; 
    case "strDouble": 
     return $numDouble; 
     break; 
    default: 
     return 0; 
     break; 
    }; 
}; 

getMaxPage()代码原是内generateNavbar,但是当我需要使用相同的代码在使用页码的其他函数中,它停止工作。这就像是出于某种原因,函数不希望将$name发送给它,所以它总是返回0. getMaxPage()也在调用它的所有函数之前定义。我究竟做错了什么?

+0

如果它返回0,那么'$ name'既不是你的开关情况。 –

+0

因为我们不知道'$ _GET ['id']'包含了什么,所以很难说。如果删除所有数字,最有可能不包含'codeSquirrel','strPhobia'或'strDouble'。 – h2ooooooo

+0

..还有,**你的代码是开放的XSS注入 - 绝不信任用户输入!**。只接受'$ _GET ['id']'并以HTML格式输出意味着人们可以在其中放入任何HTML(或javascript),并让其他用户单击链接执行。编码HTML。 – h2ooooooo

回答

1

的问题可能不是没有$name传递给getMaxPage,而是numSquirrel没有内getMaxPage定义。 如果这些变量在generateNavBar中定义,它解释了代码在重构之前为什么使getMaxPage成为单独函数的原因。

+0

它们在全球范围内定义。虽然,因为相同的switch语句是每个使用它们的函数都使用的,我想我可以把它们自己放在那里。我只在顶部定义了它们,以便于查找。我猜如果我需要直接访问它们,我可以像使用其他任何get函数一样使用gMP,呃?我会尽力回复你。 –

+0

它的工作!感谢那。 –

相关问题