Переменные и сессии (еще раз:)

Three Daws

Guest
DanGien

Если вернуться к началу, то требовалось следующее:
... Т.е. логика такая:
-- если переменная не зарегистрирована в сессии, то
-- если переменная существует, то регистрируем переменную
-- если переменная НЕ существует (т.е. зашли на сайт НЕ по партнерской ссылке), то регистрируем переменную и она будет равна 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. Это важно, это правильно, это хорошо.
 
Сверху