Three Daws
Guest
DanGien
Если вернуться к началу, то требовалось следующее:
"-- если переменная существует, то регистрируем переменную"
Что имется ввиду? Если нет переменной сессии, но есть переменная, переданная методом GET (по ссылке), то регистрируем переменную сессии и присваиваем ей значение, переданное методом GET? Так?
Во-первых надо стартовать сессию
Знаю, знаю! сейчас мне скажут, что сессия может стартовать автоматически и т.п. Вопрос глубоко философский. Скажем - надо убедиться, что сессия стартовала.
Далее, попробуем разобраться во всей этой мешанине переменных.
Сразу оговорюсь - обе ф-ии избыточны, написаны с прицелом на универсальность.
2 Фанат: посмотри одним глазком, я не облажался? ;-)
=============
Немного теории. Тут довольно долго пытаются озвучить мысль о том, что все течет, все меняется. Вот, времена когда переменная, указанная в ссылке однозначно становилась переменной в PHP-сценарии прошли.
Фраза "зависит от настроек" означает, что данное свойство зависит от настроек в конфигурации PHP ( см. "register_globals и другие животные" ).
Посему, при обращении к переменным настоятельно рекомендуется точное обращение, с указанием источника переменной, а проще говоря - обращение к соответствующему массиву $_ENV, $_GET, $_POST, $_COOKIE или $_SERVER.
В данном случае - к массиву $_GET. Это важно, это правильно, это хорошо.
Если вернуться к началу, то требовалось следующее:
Меня смущает вторая строка:... Т.е. логика такая:
-- если переменная не зарегистрирована в сессии, то
-- если переменная существует, то регистрируем переменную
-- если переменная НЕ существует (т.е. зашли на сайт НЕ по партнерской ссылке), то регистрируем переменную и она будет равна myzakaz.
"-- если переменная существует, то регистрируем переменную"
Что имется ввиду? Если нет переменной сессии, но есть переменная, переданная методом GET (по ссылке), то регистрируем переменную сессии и присваиваем ей значение, переданное методом GET? Так?
Во-первых надо стартовать сессию
Знаю, знаю! сейчас мне скажут, что сессия может стартовать автоматически и т.п. Вопрос глубоко философский. Скажем - надо убедиться, что сессия стартовала.
Далее, попробуем разобраться во всей этой мешанине переменных.
PHP:
if ( !get_session_var("parid") ) {
// если не удается получить значение
// переменной сессии с именем "parid"
if ( isset( $_GET['parid'] ) and $_GET['parid'] ) {
// Если переменная передана методом $_GET
// и она не пуста и не ноль, заносим значение в
// переменную сессии
set_session_var( "parid", $_GET['parid'] );
} else {
// Если ничего другого не остается,
// присваиваем "значение по умолчанию"
set_session_var( "parid", "myzakaz" );
}
}
// Ф-ия get_session_var( string name )
// Возвращает значение переменной сессии с именем [i]name[/i]
// или "ЛОЖЬ", если переменная не определена.
function get_session_var($name) {
if ( isset( $_SESSION[$name] ) ) {
return $_SESSION[$name];
} elseif ( session_is_registered( $name ) ) {
return $$name;
} else {
return FALSE;
}
}
// Ф-ия set_session_var( string name, mixed value )
// Присваивает переменной сессии с именем [i]name[/i]
// значение [i]value[/i]
function set_session_var($name, $value) {
if ( isset($_SESSION) ) {
$_SESSION[$name] = $value;
} else {
$$name = $value;
session_register($name);
}
}
2 Фанат: посмотри одним глазком, я не облажался? ;-)
=============
Немного теории. Тут довольно долго пытаются озвучить мысль о том, что все течет, все меняется. Вот, времена когда переменная, указанная в ссылке однозначно становилась переменной в PHP-сценарии прошли.
Фраза "зависит от настроек" означает, что данное свойство зависит от настроек в конфигурации PHP ( см. "register_globals и другие животные" ).
Посему, при обращении к переменным настоятельно рекомендуется точное обращение, с указанием источника переменной, а проще говоря - обращение к соответствующему массиву $_ENV, $_GET, $_POST, $_COOKIE или $_SERVER.
В данном случае - к массиву $_GET. Это важно, это правильно, это хорошо.