здравствуйте! не могу разобраться, в чем недочет при использовании сессий. есть код PHP: if (isset($_GET['id'])) { if (!isset($_GET['p'])) { if (isset($_SESSION['p1'])) {unset($_SESSION['p1']);} $p1= // формирование ссылки вида self.php?id=1&p=2 $_SESSION['p1']=$p1; } else { $p1=$_SESSION['p1']; } } else {} суть: в зависимости от id выводится разное содержимое (набор изображений) в модальном окне fancybox. выглядит модальное окно так: http://funkyimg.com/u2/423/153/243423_JPG.jpg в самом же модальном окне переключение между картинками (просмотр большой картинки при нажатии на превью) выполняется через переменную р (с ajax незнакома, потому решила использовать сессии). Переменная р1 должна генерироваться один раз и использоваться все время, пока открыто модальное окно. Она содержит ссылку на большую картинку (такие же переменные р2, р3, р4, я их тут не указывала для сокращения кода). Проблема в том, что при первичном изменении основной картинки набор картинок перезагружается. то есть, как я понимаю, используется сохраненная ранее переменная p1. но в коде присутствует проверка, если запуск модального окна первичный, то очистить сохраненную ранее переменную. В чем моя ошибка? Заранее спасибо за ответы!
А в чем прелесть использования сессий для решения этой задачи? Да и вообще, не пойму суть сессий в данном решении.
нет, с этими переменными все правильно. переменная p1 отвечает за ссылку на превьюшке, а переменная р определяет, какая именно картинка должна быть отображена. переменная р1 содержит в себе значение р: PHP: $p1= // формирование ссылки вида self.php?id=1&p=2 в блоке (строки 11-13) анализируется значение переменной р и определяется, какая картинка должна отображаться в полном размере.
суть сессий - при запуске модального окна происходит выборка из базы случайно 4х картинок. и при работе уже в самом модальном окне (просмотр одной из картинок) должно быть сохранено, какие именно картинки были выбраны. без этого картинки будут случайно генерироваться снова и снова
Примерное рассуждение. PHP: <?php // Дескриптор окна $_SESSION['id'] = isset($_GET['id']) ? abs(intval($_GET['id'])) : -1; // Если открыто новое окно if(empty($_SESSION['images'])) { // Запрашиваем случайные изображение, // в результате получим примерно следующий массив $_SESSION['images'] = array(25, 3, 8, 14); } // Если же открыто тоже самое окно else if(isset($_SESSION['images']) && $_SESSION['id'] == $_GET['id']) { // Показываем картинки из массива echo $_SESSION['images'][$_GET['id']-1]; } // Если открыто иное окно else { // Обнуление прежнего массива $_SESSION['images'] = array(); // Заполнение новыми значениями $_SESSION['images'] = array(15, 55, 3, 13); } ?> Естественно, код стоит рационализировать, чтобы не писать один и тот же участок несколько раз. Но принцип ясен.
Оптимизировал (более ясный код): PHP: <?php // Дескриптор окна $_SESSION['id'] = isset($_GET['id']) ? abs(intval($_GET['id'])) : -1; // Если открыто новое окно if(empty($_SESSION['images']) || $_SESSION['id'] != $_GET['id']) { // Обнуление прежнего массива $_SESSION['images'] = array(); // Заполнение новыми значениями $_SESSION['images'] = array(15, 55, 3, 13); } // Если же открыто тоже самое окно else { // Показываем картинки из массива echo $_SESSION['images'][$_GET['id']-1]; // Ну можно попонтоваться с проверками if(count($_SESSION['images']) === 4) { // echo $_SESSION['images'][$_GET['id']-1]; } } ?>