PDA

View Full Version : Обработка переменной в switch case


Alie
16.10.2011, 04:07
Дано: модуль в phpNuke, использующий switch для изменения контента на странице.
echo "<a href=\"modules.php?name=$module_name\">main</a> <a href=\"modules.php?name=$module_name&i=more\">more</a>";
switch($i)
{
default:
main();
break
;
case "more":
more();
break
;
}

function main()
{
echo "MAIN CONTENT";
}

function more()
{
echo "MORE CONTENT";
}
Вопрос: каким образом происходит присвоение значения переменной $i при переходе по ссылке (например кликая на more открывается more();)?

Пробовала написать на голом PHP - переход по ссылке не срабатывает (страница не найдена), и это несмотря на то, что по ссылке явно присваивается значение переменной $i через _GET.
Что я упускаю?


P.S. Разобралась - перепутала операторы. Тему можно закрывать/удалять.

Soniks
16.10.2011, 13:32
Если в php включена опция register_globals (http://php.net/manual/ru/security.globals.php) то переменные из запросов GET и POST при начале работы обрабтчика php становятся доступными в коде. Вот не плохо разжеванная статья (http://info-pages.com.ua/e/101).

Alie
18.10.2011, 16:25
Спасибо за статью. Возник ещё один вопрос по switch. Если применяю switch внутри case другого switch:
switch($go)
{
default:
main();
break;

case"firm":
firm();
break;
}

function firm()
{
switch($more)
{
default:
info();
break;

case "more"
more();
break;
}
}
Почему не работает следующая ссылка на case "more" из index.php?go=firm:
<a href=\"index.php?go=firm&more=more\">GO</a>
Опять что-то путаю с переменными?

Soniks
19.10.2011, 23:13
В функции firm() необходимо переменную $more объявить как глобальную (http://ru.php.net/manual/ru/language.variables.scope.php)

function firm()
{
global $more;

Alie
20.10.2011, 13:51
Sonics, спасибо!

Alie
25.10.2011, 02:41
В итоге переделала:
switch($go)
{
default:
main();
break;

case"firm":
firm($more);
break;
}

function firm($more)
{
switch($more)
{
default:
info();
break;

case "more"
more();
break;
}
}