|
|
|
| Ничего не трогал, но сессия вдруг перестала работать. У меня сохранялся массив $metro при первом посещении страницы и считывался из сессии при последующих посещениях (через get post передать массив не смог, решил писать его в сессию). Все вроде работало, как вдруг перестало считываться из сессии. Вот код:
// Инициируем сессию
session_start();
if ($action != 1)
{
unset($_SESSION['metro']);
$_SESSION['metro'] = $metro;
}
else
{
$metro = $_SESSION['metro'];
} | |
|
|
|
|
|
|
|
для: rubiroide
(15.04.2010 в 15:40)
| | Как можно передать массив с одной страницы на другую. Может есть альтернативный способ? | |
|
|
|
|
|
|
|
для: rubiroide
(15.04.2010 в 15:40)
| | а что из себя представляет $metro? | |
|
|
|
|
|
|
|
для: bab-nike
(15.04.2010 в 16:07)
| | Это массив станций метро (строк с название станций).
В форме (при помощи списка) выбираются станции метро и передаются на нужную страницу.
Осуществляю поиск по базе и вывожу найденные. Найденных вариантов может быть много, поэтому вывожу первые 10. Чтобы показать следующие 10 надо передать массив снова (или временно сохранить его где-нибудь). | |
|
|
|
|
|
|
|
для: rubiroide
(15.04.2010 в 16:13)
| | Пропадает, значит вы неверно работаете с ней (прерывается сессия), либо работа логики вашего скрипта лишена всякой логики. Вот и ищите причину в коде своем.
В данном же коде, кроме как лишней строки, ничего предосудительного нет:
f ($action != 1)
{
unset($_SESSION['metro']); //вот это лишнее.
$_SESSION['metro'] = $metro;
}
else
{
$metro = $_SESSION['metro'];
} | |
|
|
|
|
|
|
|
для: rubiroide
(15.04.2010 в 16:13)
| | ну если этот массив почти во всех страницах должен работать, лучше записать его в отдельный файл, скажем spisok.php, и вставить в страницу вот так
<?php require_once('spisok.php'); ?>
|
| |
|
|
|
|
|
|
|
для: bab-nike
(15.04.2010 в 16:20)
| | Массив каждый раз меняется при новом поиске (зависит от других ограничений поиска).
Вот я и подумал, что лучше не переписывать каждый раз файл, могут быть проблемы с одновременным поиском разными пользователями. Нужно передавать массив на страницу.
Сейчас посмотрел, вроде запись проходит верно, но вот не считывается.
session_start();
if ($action != 1)
{
unset($_SESSION['metro']);
$_SESSION['metro'] = $metro;
}
else
{
$metro = $_SESSION['metro'];
}
echo count($_SESSION['metro']);
Выводит количество правильно, значит записалось. При переходе выводит 0 (считывает пустой массив)
$metro = $_SESSION['metro']; не работает | |
|
|
|
|
|
|
|
для: rubiroide
(15.04.2010 в 16:31)
| | Еще раз повторить? НЕТ В ЭТИХ СТРОКАХ КОДА ПРИЧИНЫ!
А уничтожить переменную и потом сразу ее объявить вновь, это лишено всякого смысла.
Все ваше можно записать так:
<?
session_start();
//заносим
if(!isset($_SESSION['metro'])) $_SESSION['metro'] = $metro;
//вот так, но не понятна проверка
$metro = $action == 1 ? $_SESSION['metro'] : $metro;
//может просто
$metro = $_SESSION['metro']
|
Ищите причину в логике работы вашего скрипта/скриптов.
PS. Кстати, если $metro исходный массив, то зачем все это, получается просто рокировка. Нужно использовать везде $_SESSION['metro']. | |
|
|
|
|
|
|
|
для: sim5
(15.04.2010 в 16:35)
| | Напишу логику работы скрипта. Может кто поможет:
Есть страница с формой, где пользователь выбирает станции метро(metro.php).
После нажатия на кнопку он попадает на страницу с моим скриптом(poisk.php).
Делается выборка БД, результат выводится на страницу. Найденных вариантов может быть очень много.
Всё это со скриптом я затеял чтобы выводить не все варианты, а только 10 первых найденных.
Чтобы увидеть следующие 10 пользователь жмет на цифру 2 внизу. При нажатии происходит переход на ту же страницу(poisk.php). Через get передаю признак того что я на стр. 2. Теперь мне нужно снова сделать выборку и показать вторую десятку найденных. Для того чтобы сделать выборку мне нужен массив, который пришел со страницы metro.php.
ИТОГО: все что мне нужно - передать массив между страницами! ПОДСКАЖИТЕ КАК? | |
|
|
|
|
|
|
|
для: rubiroide
(15.04.2010 в 21:44)
| | $action помогает определиться что делать - записывать или считывать.
Когда мы в первый раз попадаем на страницу поиска $action!=1 и мы должны перезаписать массив в сессию. Для этого я сначала удаляю что было в массиве до этого и записываю туда то что пришло.
Когда мы попадаем второй раз $action уже равен 1 и надо считать то что лежит в сессии. | |
|
|
|
|
|
|
|
для: rubiroide
(15.04.2010 в 21:44)
| | У Вас поисковой запрос с банальной постраничной навигацией.
Никакие сессии Вам не нужны вообще - они лишь навредят. | |
|
|
|
|
|
|
|
для: Trianon
(15.04.2010 в 22:37)
| | Тогда помогите новичку советом как передать массив из страницы на саму себя. Можно ли его в get запихать? | |
|
|
|
|
|
|
|
для: rubiroide
(15.04.2010 в 22:44)
| | Вам не нужно передавать никакой массив.
Запрос к любой странице должен обрабатываться так, как если бы он был самым первым запросом этого пользователя.
Посетитель может и сразу захотеть посмотреть поисковую выдачу начиная со второй страницы (это кстати для современного состояния яндекса весьма актуально на практике) | |
|
|
|
|
|
|
|
для: Trianon
(15.04.2010 в 23:03)
| | Кажется в моем случае это нереально. Такой вот я скрип от незнания написал(http://www.arenda-liferealty.ru/ofis.php). База очень динамичная (агентство недвижимости) и через час на стр. 2 может быть совсем не то... Страница формируется на основе анализа массива, который я передаю (массив станций метро). Передать его не получается :( | |
|
|
|
|
|
|
|
для: rubiroide
(15.04.2010 в 23:09)
| | Как он выглядит-то этот массив?
Может у Вас не массив, а просто набор сгенерирован?
станций метро даже в самых крупных городах редко бывает больше нескольких сотен.
Набор такой мощности можно упаковать в несколько десятков символов. А их можно передать хоть через GET | |
|
|
|
|
|
|
|
для: rubiroide
(15.04.2010 в 23:09)
| | Проблему решил. Спасибоза помощь. Просто перенес код
if ($action != 1)
{
$metro = $_GET['metro'];
$_SESSION['metro'] = $metro;
}
else
{
$metro = $_SESSION['metro'];
}
|
поближе к session_start(); и все заработало.
ВЫВОД: код работы с сессией не надо разбрасывать по скрипту!!!!!!
P.S. Скрипт неделю назад работал и в разбросанном виде. | |
|
|
|
|
|
|
|
для: rubiroide
(16.04.2010 в 00:06)
| | м-да, каждый для себя делает какие угодно выводы )))
просто может быть сначала нужно что-то делать, и уже потом смотреть на ожидаемый результат, а не наоборот | |
|
|
|