Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с данными сессии 
:(
    Опции темы
stalker2000
Дата 28.1.2015, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.7.2010

Репутация: нет
Всего: нет



Добрый день. Есть два файла:
1.php
Код

<pre>
<?php
@unlink('log.log');

session_start();

for($n=1; $n<=3; $n++) {
  $_SESSION['zzz'] = array('id'=>$n, 'name'=>rand(10000,99999));
  print_r($_SESSION['zzz']);
  echo '<img src="2.php?id='.rand(10000, 99999).'" alt="" />';
}

2.php
Код

<?php
session_start();

$file = fopen('log.log', 'a+');
fwrite($file, print_r($_SESSION['zzz'], true)."\n");
fclose($file);


по идее, в каждом цикле в файле 1 в сессии должны быть новые данные. Но фактически получаю только данные только последнего цикла:
Код

Array
(
    [id] => 3
    [name] => 75044
)

Array
(
    [id] => 3
    [name] => 75044
)

Array
(
    [id] => 3
    [name] => 75044
)

почему так?
PM MAIL   Вверх
whatisnot
Дата 28.1.2015, 13:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



Не последнего цикла, он у вас один, а последней его итерации. А на каком основании вы думаете, что должы быть данные не последней? И вообще, зачем здесь цикл? 

Это сообщение отредактировал(а) whatisnot - 28.1.2015, 13:19
PM MAIL   Вверх
stalker2000
Дата 28.1.2015, 13:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.7.2010

Репутация: нет
Всего: нет



Цитата(whatisnot @  28.1.2015,  13:18 Найти цитируемый пост)
А на каком основании вы думаете, что должы быть данные не последней? И вообще, зачем здесь цикл? 

файл №2 должен вызывается в каждой итерации и получать нужные данные через сессию.

А цикл нужен для вывода графиков. 
PM MAIL   Вверх
whatisnot
Дата 28.1.2015, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



Ну файл тут как-то боком. Если нужно запомнить некое значение из набора, значит нужно взять это значение и выйти. Если же нужно запомнить все значения набора, значит их нужно запомнить. А у вас то ведь что:

 $_SESSION['zzz'] = array('id'=>$n, 'name'=>rand(10000,99999)); - вы значения полученные на каждой итерации присваиваете одной и той же переменной, ну и с чего она должна хранить значения не последней, а других итераций? Как предписано, так и выполняется.

Это сообщение отредактировал(а) whatisnot - 28.1.2015, 13:48
PM MAIL   Вверх
stalker2000
Дата 28.1.2015, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.7.2010

Репутация: нет
Всего: нет



Цитата(whatisnot @  28.1.2015,  13:45 Найти цитируемый пост)
Если нужно запомнить некое значение из набора, значит нужно взять это значение и выйти. 

куда выйти?

Цитата(whatisnot @  28.1.2015,  13:45 Найти цитируемый пост)
$_SESSION['zzz'] = array('id'=>$n, 'name'=>rand(10000,99999)); - вы значения полученные на каждой итерации присваиваете одной и той же переменной, ну и с чего она должна хранить значения не последней, а других итераций? Как предписано, так и выполняется.

Ничего не понял. Я присваиваю значение переменной, потом в другом месте беру её значение. Потом опять присваиваю ей новое значение и опять в другом месте использую. Разве не так?

И ещё, файл №2 вызывается 3 раза, но уже в самый первый раз он откуда-то знает последнее значение цикла. Как так? Или он вызывается сразу три раз на последней итерации, а на первых двух пропускается?
PM MAIL   Вверх
whatisnot
Дата 28.1.2015, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



Выйти из цикла, прервав его, выйти из функции...

Я вообще не понимаю для чего здесь цикл, в контексте вашего кода он безсмысленен - в каком бы месте вы не получали значения присвоенные $_SESSION['zzz'], это будут значения сформированные на последней итерации цикла. Что либо попроще и нагляднее:

Код

for($i=0; $i<5; $i++) $k = $i;


Чему будет равно $k после цикла? Полагаю, понятно и почему. Ровно это же самое происходит и у вас. А вы чего ожидаете?
PM MAIL   Вверх
stalker2000
Дата 28.1.2015, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.7.2010

Репутация: нет
Всего: нет



whatisnot, я ожидал что при каждой итерации будет выполнятся вызов файла №2:
Код

echo '<img src="2.php?id='.rand(10000, 99999).'" alt="" />';


А если добавить в №2 вывод id, то видно что второй файл вызывается не по порядку. Вот вывод файла №1 в браузер (это id):
89367
52734
50860

а вот вывод №2 в лог:
52734
89367
50860

причем порядок стабильный, сначала второй, потом первый, потом третий. Почему так?   smile 
PM MAIL   Вверх
baldina
Дата 28.1.2015, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

Репутация: 26
Всего: 101



Цитата(stalker2000 @  28.1.2015,  16:21 Найти цитируемый пост)
whatisnot, я ожидал что при каждой итерации будет выполнятся вызов файла №2:

смешно.
на каждой итерации будет осуществляться вывод (echo) строки, в которой ссылка. а обращаться по этим ссылкам будет клиент.
если вы хотите в этом месте выполнить код, так прямо и выполняйте
PM MAIL   Вверх
stalker2000
Дата 29.1.2015, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.7.2010

Репутация: нет
Всего: нет



Цитата(baldina @  28.1.2015,  17:55 Найти цитируемый пост)
смешно.

согласен  smile 
я почему-то вбил себе в голову что этот код будет работать как include

Сделаю либо многомерный массив в $_SESSIONS либо передачу через $_GET. Спасибо за помощь  smile 
PM MAIL   Вверх
whatisnot
Дата 29.1.2015, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 130
Регистрация: 14.12.2014

Репутация: 1
Всего: 2



Включение, это совсем не обязательно исполнение кода.

Из руководства:

Если подключается файл (то есть это может быть text/html, text/plain, и др.), парсинг в режиме PHP кода прекращается и переключается в режим HTML в начале указанного файла и продолжается снова в конце. По этой причине любой код внутри включаемого файла, который должен быть выполнен как PHP код, должен быть заключен в верные теги начала и конца PHP кода.

Ваша строка будет она во ключении, а не выводом конструкции echo, должна была иметь вид, например:

<img src="2.php?id=<?=rand(10000, 99999)?>" alt="" />

в которой была бы исполнена функция rand(), результат которой был бы помещен в поток вывода, не будь ее - просто вывод.

Это сообщение отредактировал(а) whatisnot - 29.1.2015, 06:15
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0507 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.