2015-10-05 3 views
-1

ОК, поэтому у меня есть функция, которая генерирует предыдущие/следующие ссылки на основе идентификатора страницы, и она работала раньше, но теперь это не так. Все необходимые переменные, используемые в инструкции 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 - это то, что используется каждой функцией, которая их использует, я думаю, что я мог бы просто поместить там ценности. Я только определил их наверху, чтобы облегчить их поиск. Я думаю, если мне нужно получить к ним доступ напрямую, я могу просто использовать gMP, как и любую другую функцию get, а? Я попробую это и вернусь к тебе после. –

+0

Это сработало! Спасибо за это. –

Смежные вопросы