Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Создание массива в Сессии
Форумы портала PHP.SU » » Вопросы новичков » Создание массива в Сессии

Страниц (1): [1]
 

1. Dezmont - 24 Ноября, 2011 - 09:54:50 - перейти к сообщению
Добрый день. Уважаемык форумчане, может кто-нибудь сможет мне подсказать?

В общем есть 3 страницы php. На каждой должны выводиться страницы, которые посетил пользователь. Т.е. он перешёл на стр1, потом 2, потом 1, потом опять 2, потом 3, то из сессии должно вывестись на странице 1,2,1,2,3.
Создаю сессию и задаю в сессии массив вот так:
PHP:
скопировать код в буфер обмена
  1. $_SESSION['pages'][] = $_SERVER['PHP_SELF'];

Вывожу на странице список страниц вот так:
PHP:
скопировать код в буфер обмена
  1. if(isset($_SESSION['pages'])){
  2.         print '<h2>Список посещенных страниц</h2>';
  3.        
  4.         // Выводим в цикле все посещенные страницы
  5.         print '<ol>';
  6.         foreach ($_SESSION['pages'] as $page){
  7.                 echo '<li>', $page, '</li>';
  8.         }
  9.         print '</ol>';

Проблема в том, что когда я задаю массив вот так:
PHP:
скопировать код в буфер обмена
  1. $_SESSION['pages'] = array($_SERVER['PHP_SELF']);


Ничего не работает. Задаётся и выводится только последняя страница, на которой был пользователь. Что тут не так? Почему в $_SESSION['page'] просто перезаписывается ячейка [0]? По идее ведь это идентичные конструкции?

Может это у меня чёт не так, и нужно как то по особенному задавать через array, чтобы всё воркало? =((
2. Мелкий - 24 Ноября, 2011 - 10:10:57 - перейти к сообщению
Dezmont пишет:
Что тут не так?

Как написано - так и работает. Конструкции совершенно различны.
В первом случае - вы добавляете в массив элемент.
Во втором - инициализируете/заменяете значение массивом из одного элемента.
3. Dezmont - 24 Ноября, 2011 - 10:19:43 - перейти к сообщению
Спасибо. =)
4. ask - 24 Ноября, 2012 - 19:52:42 - перейти к сообщению
Файл меню: menu.inc.php

CODE (htmlphp):
скопировать код в буфер обмена
  1. <h2>Меню</h2>
  2. <ul>
  3.         <li><a href="page1.php">Страница 1</a></li>
  4.         <li><a href="page2.php">Страница 2</a></li>
  5.         <li><a href="page3.php">Страница 3</a></li>
  6. </ul>


Страницы page1, page2, page3:

CODE (htmlphp):
скопировать код в буфер обмена
  1. <?php
  2. // Открываем сессию
  3.  
  4. // Подключаем код для сохранения информации о странице в сессии
  5. include('savepage.inc.php');
  6. ?>
  7. <!DOCTYPE html>
  8.  
  9. <html>
  10. <head>
  11.         <title>Страница 1</title>
  12. </head>
  13. <body>
  14.  
  15. <h1>Страница 1</h1>
  16.  
  17. <?php
  18. // Подключаем меню
  19. include('menu.inc.php');
  20.  
  21. // Подключаем код для вывода информации обо всех посещенных страницах
  22. include('visited.inc.php');
  23. ?>
  24.  
  25. </body>
  26. </html>


Файл: savepage.inc.php

CODE (htmlphp):
скопировать код в буфер обмена
  1. // Код для всех страниц - сохранение информации о посещенных страницах
  2. $_SESSION['pages'] .= $_SERVER['PHP_SELF']. "|";


Файл: visited.inc.php

CODE (htmlphp):
скопировать код в буфер обмена
  1. // Код для всех страниц - вывод информации о посещенных страницах
  2.  
  3. $pages = explode("|", $_SESSION["pages"]);
  4. if(is_array($pages))
  5.         array_pop($pages);
  6.         echo "<ol>";
  7.         foreach($pages as $page){
  8.                 echo "<li>$page</li>";
  9.         }
  10.         echo "</ol>";
5. esterio - 24 Ноября, 2012 - 19:59:58 - перейти к сообщению
ask
Зачем так извращаться

 

Powered by ExBB FM 1.0 RC1