регистрация сессий в цикле

Reylonds

Новичок
регистрация сессий в цикле

Доброго времени суток. У меня возникла следующая проблемка:
есть цикл в нем условие, при выполнении условия производится регистрация сессии, с именем переменной цикла. ну и заносится значение.
проблема в том что:
PHP:
session_register('i');
$_SESSION['$i']="1";
ни так, ни с двойными кавычками ни без них не работает
что то не получилось найти какой должен быть синтаксис в данном случае
 

master_x

Pitavale XXI wieku
если $i-- число то и не будет работать. в массиве $_SESSION не разрешены индексы, которые начинаются с цифры.
 

Reylonds

Новичок
а, да. точно. забыл. тогда как бы буковку подставить. просто
session_register("a.$i"); или без точки?
 

Gorynych

Посетитель PHP-Клуба
Reylonds

Во-первых число как название переменной сессии не покатит, как верно заметил master_x

Во-вторых, прочтите http://phpfaq.ru/sessions

В-третьих, если Вы регистрируете переменную сессии под именем 'i', то и обращаться к ней нужно по этому имени. 'i' != '$i' != "$i".

Во-четвертых, преде чем работать с переменными сессии, убедитесь что сессия стартовала:
Код:
function CheckSession() {
    if ( !isset($_SESSION) && !intval( session_id() ) ) {
        session_start();
    }
}
Ну и в-пятых, Вы смешиваете два способа работы с сессиями: устаревший (через session_register) и современный, через специальный массив $_SESSION

Образно говоря, нужно (и работает, зависимости от версии и т.п.) что-то одно из двух:
Код:
function SetSessionVar($name, $value) {
    CheckSession(); // описана выше

    if ( isset($_SESSION) ) {
        $_SESSION[$name] = $value;
    } else {
        $$name = $value;
        session_register($name);    
    }
}

function GetSessionVar($name) {
    CheckSession(); // описана выше

    if ( isset( $_SESSION[$name] ) ) {
        return $_SESSION[$name];
    } elseif ( session_is_registered( $name ) ) {
        return $$name;
    }

    // переменная сессии с именем $name не определена
    return null; 
}

$counter = intval(GetSessionVar("counter"));

var_dump($counter);
SetSessionVar("counter", ++$counter );
кстати, еще нужна функция для удаления ;-)
 

Reylonds

Новичок
первое об этом я знал, просто забыл.
второе. все эти факи читал давно. (сейчас гляне еще раз)
третье. это понятно все)
четвертое не совсем понятно.
пятое. может и путаю. вроде так и учили. я просто щас диплом пишу php было год с лишнем назад.
$$name = $value;
- вот это старый способ? хотя я думаю в ссылке во втором пункте возможно найду ответ на вопрос. в любом случае спасибо за ответы
 

SiMM

Новичок
В шестых - научитесь наконец работать с массивами.
[m]language.types.array[/m]
В седьмых
> $$name = $value; - вот это старый способ?
в использовании подобных конструкций как правило вообще нет никакой необходимости.
 

Gorynych

Посетитель PHP-Клуба
kruglov угу, там должно быть strval( session_id() ), ошибся.

собственно, эта проверка нужна была для обратной совместимости и проверки на существование массива $_SESSION должно быть достаточно.
 

Фанат

oncle terrible
Команда форума
Reylonds
второе. все эти факи читал давно
можно спросить?
а зачем это нам сообщать?
кому интересно читать про то, что ты там когда-то что-то читал?
а, да. точно. забыл. тогда как бы буковку подставить. просто
session_register("a.$i"); или без точки?
всё правильно.
только session_register из своего кода убрать вовсе.


-~{}~ 07.06.06 05:03:

Gorynych
Дима, твой ответ напоминает монолог.
К заданному вопросу имеет отношение процентов 20 текста.
а остальное - довольно спорные общие рассуждения.
я не понял назначения этой странной функции.
если же учесть, что сессию стартовать надо не абы где, а до любого вывода в браузер, то ценность её представляется мне ещё более сомнительной.
это бессмысленная функция.

при том, что ему надо было только-то указать на то, чтобы он выкинул на помойку протухшую функцию. и всё!

-~{}~ 07.06.06 05:14:

Reylonds
у меня есть подозрение, что тебе не нужна регистрация "сессий" в цикле.
а нужен тебе массив с цифрами, который ты можешь заполнять, как угодно. в цикле, или без цикла.
с индексами числовыми или строковыми

и в сессию уже класть весь этот массив.
 

Reylonds

Новичок
Как вариант я делал таким способом. Просто было непонятно почему в цикле не получалось заносить в сессия значения.
Все понятно, всем спасибо.
 
Сверху