2015-10-05 49 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

它的工作!感謝那。 –

相關問題