За последние 24 часа нас посетили 30699 программистов и 1479 роботов. Сейчас ищут 865 программистов ...

Сессии

Тема в разделе "PHP для новичков", создана пользователем dots_rei, 18 авг 2009.

  1. dots_rei

    dots_rei Активный пользователь

    С нами с:
    7 авг 2009
    Сообщения:
    193
    Симпатии:
    0
    здравствуйте! не могу разобраться, в чем недочет при использовании сессий.

    есть код
    PHP:
    1. if (isset($_GET['id']))
    2. {
    3.     if (!isset($_GET['p']))
    4.     {
    5.         if (isset($_SESSION['p1'])) {unset($_SESSION['p1']);}
    6.  
    7.         $p1= // формирование ссылки вида self.php?id=1&p=2
    8.         $_SESSION['p1']=$p1;
    9.     }
    10.     else
    11.     {
    12.         $p1=$_SESSION['p1'];
    13.     }
    14. }
    15. else
    16. {}
    суть: в зависимости от id выводится разное содержимое (набор изображений) в модальном окне fancybox. выглядит модальное окно так: http://funkyimg.com/u2/423/153/243423_JPG.jpg

    в самом же модальном окне переключение между картинками (просмотр большой картинки при нажатии на превью) выполняется через переменную р (с ajax незнакома, потому решила использовать сессии).

    Переменная р1 должна генерироваться один раз и использоваться все время, пока открыто модальное окно. Она содержит ссылку на большую картинку (такие же переменные р2, р3, р4, я их тут не указывала для сокращения кода).

    Проблема в том, что при первичном изменении основной картинки набор картинок перезагружается. то есть, как я понимаю, используется сохраненная ранее переменная p1. но в коде присутствует проверка, если запуск модального окна первичный, то очистить сохраненную ранее переменную.

    В чем моя ошибка?

    Заранее спасибо за ответы!
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А в чем прелесть использования сессий для решения этой задачи?
    Да и вообще, не пойму суть сессий в данном решении.
     
  3. dots_rei

    dots_rei Активный пользователь

    С нами с:
    7 авг 2009
    Сообщения:
    193
    Симпатии:
    0
    нет, с этими переменными все правильно. переменная p1 отвечает за ссылку на превьюшке, а переменная р определяет, какая именно картинка должна быть отображена. переменная р1 содержит в себе значение р:

    PHP:
    1. $p1= // формирование ссылки вида self.php?id=1&p=2
    в блоке (строки 11-13) анализируется значение переменной р и определяется, какая картинка должна отображаться в полном размере.
     
  4. dots_rei

    dots_rei Активный пользователь

    С нами с:
    7 авг 2009
    Сообщения:
    193
    Симпатии:
    0
    суть сессий - при запуске модального окна происходит выборка из базы случайно 4х картинок. и при работе уже в самом модальном окне (просмотр одной из картинок) должно быть сохранено, какие именно картинки были выбраны. без этого картинки будут случайно генерироваться снова и снова
     
  5. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Примерное рассуждение.

    PHP:
    1. <?php
    2.  
    3. // Дескриптор окна
    4. $_SESSION['id'] = isset($_GET['id']) ? abs(intval($_GET['id'])) : -1;
    5.  
    6.  
    7. // Если открыто новое окно
    8. if(empty($_SESSION['images']))
    9. {
    10.     // Запрашиваем случайные изображение,
    11.     // в результате получим примерно следующий массив
    12.     $_SESSION['images'] = array(25, 3, 8, 14);
    13. }
    14. // Если же открыто тоже самое окно
    15. else if(isset($_SESSION['images']) && $_SESSION['id'] == $_GET['id'])
    16. {
    17.     // Показываем картинки из массива
    18.     echo $_SESSION['images'][$_GET['id']-1];
    19. }
    20. // Если открыто иное окно
    21. else
    22. {
    23.     // Обнуление прежнего массива
    24.     $_SESSION['images'] = array();
    25.    
    26.     // Заполнение новыми значениями
    27.     $_SESSION['images'] = array(15, 55, 3, 13);
    28. }
    29.  
    30. ?>
    Естественно, код стоит рационализировать, чтобы не писать один и тот же участок несколько раз.
    Но принцип ясен.
     
  6. dots_rei

    dots_rei Активный пользователь

    С нами с:
    7 авг 2009
    Сообщения:
    193
    Симпатии:
    0
    спасибо! буду пробовать
     
  7. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Оптимизировал (более ясный код):

    PHP:
    1. <?php
    2.  
    3. // Дескриптор окна
    4. $_SESSION['id'] = isset($_GET['id']) ? abs(intval($_GET['id'])) : -1;
    5.  
    6.  
    7. // Если открыто новое окно
    8. if(empty($_SESSION['images']) || $_SESSION['id'] != $_GET['id'])
    9. {
    10.     // Обнуление прежнего массива
    11.     $_SESSION['images'] = array();
    12.    
    13.     // Заполнение новыми значениями
    14.     $_SESSION['images'] = array(15, 55, 3, 13);
    15. }
    16. // Если же открыто тоже самое окно
    17. else
    18. {
    19.     // Показываем картинки из массива
    20.     echo $_SESSION['images'][$_GET['id']-1];
    21.  
    22.             // Ну можно попонтоваться с проверками
    23.     if(count($_SESSION['images']) === 4) {
    24.         // echo $_SESSION['images'][$_GET['id']-1];
    25.     }
    26. }
    27.  
    28. ?>
     
  8. dots_rei

    dots_rei Активный пользователь

    С нами с:
    7 авг 2009
    Сообщения:
    193
    Симпатии:
    0
    проблема решена

    был мой косяк... не там вставила функцию генерации случайных картинок :oops: