zilber 3 Опубликовано: 12 ноября 2015 Рассказать Опубликовано: 12 ноября 2015 Приветствую! <form action="?mod=ehl" method="GET"> <input type="hidden" name="mod" value="ehl"> <select name="id"> <option value="0">сделайте выбор</option>'; .................. формируется список пунктов из базы .................. foreach($e as $item) { $selected = ($_SESSION['e_id'] == $item['e_id'] ? 'selected' : ''); echo '<option value="'.$item['e_id'].'" '.$selected.'>'.$item['e_name'].'</option>'; } echo '</select> <button type="submit">ОТКРЫТЬ</button> </form>'; При существовании сессии, содержащей e_id и при наличии соответствия, к соответствующему пункту меню приписывается selected. Соответственно открывается модуль ehl.php, куда передается выбранное значение e_id. Там оно пишется в сессию как новый e_id и используется далее в действиях на странице, через $action. Вопрос - как сохранить значение выбранного пункта, ведь перезагрузки страницы при подгрузке модуля не происходит, он инклюдится через include_once, при вызове. Если перегрузить страницу - все хорошо, селект проверяет сессию и поднимает нужный пункт. Но в момент подгрузки модуля, когда для пользователя как бы открылась новая страница, а на самом деле нет - в селекте старое значение, ведь без перезагрузки он не может проверить сессию. Заранее спасибо за добрый совет. Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 12 ноября 2015 Рассказать Опубликовано: 12 ноября 2015 16 минуту назад, zilber сказал: Заранее спасибо за добрый совет. ну как вариант записать значение $action в куки. https://github.com/carhartl/jquery-cookie очень проста в обращении и работает как часы записали: $.cookie('name', '$action', { expires: 7, path: '/' }); считали: $.cookie('name'); 1 Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 12 ноября 2015 Рассказать Опубликовано: 12 ноября 2015 Автор Привет! А зачем? Проблема же не в сохранении action, а в сохранении значения селекта :-) Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 12 часа назад, zilber сказал: Проблема же не в сохранении action, а в сохранении значения селекта ну тогда значение селекта туда передавать... Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 (изменено) Автор Ну стой, может я не до конца понимаю... Записал я куку со значением селекта. Чтобы браузер ее прочитал, страница должна быть перегружена, верно ведь? А если она перегружена, то и использованный мной метод отлично справится, нет? UPDATE Я запутался :-) Повесил на кнопку подтверждения выбора перезагрузку страницы - и все равно та же история )))) Изменено 13 ноября 2015 пользователем zilber Цитата Ссылка на сообщение Поделиться на других сайтах
celsoft 6 076 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 У вас в коде стоит $_SESSION['e_id'] == $item['e_id']. Вы записываете куки, а проверяете в скрипте не куки, а сессии. Это как бы совсем разные вещи. Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 Автор Нет, я куки не пишу, просто обсуждаем это Есть index.php, в котором формируется селект из базы. Форма, в которой находится селект, отправляет выбранное значение в мод. В моде значение принимается, пишется в сессию $e_id = $_GET['e_id']; $_SESSION['e_id'] = $e_id; В сессии застревает e_id. Ну а в селекте файла index.php изначально проверка на наличие e_id в сессии. UPDATE Я понимаю, что сессия прибивается при закрытии браузера. Ну а тот случай, когда сессия не закрывается, когда пользователь остается... Блин... Я понимаю, что проблема как-то очень легко и просто диагностируется, но пока не допру Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 29 минуты назад, zilber сказал: Я запутался :-) во-во и я тоже Как я понимаю тебе нужно чтобы сохранялся значение выбранного селекта? Да! Поэтому до перезагрузки его нужно считывать из передаваемых параметров и записывать в куки, а после перезагрузки уже читать из кук, если в параметрах пусто. Вот и всё... Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 (изменено) Автор Я понимаю, что куки мне дадут то, что в следующий раз, когда человек зашел на сайт, ему будет отмечено в селекте то, где он сидел в крайний раз... Но когда он в первый раз на сайте... У него нет ни сессии, ни куки... Он выбрал пункт. Пункт записался куда угодно, да хоть в оба варианта... Но в процессе инклюда модуля, значение селекта сбросится. А станет верным только при перезагрузке страницы целиком, когда браузер всосет данные сессии, или куки. Как бы добиться, чтобы при инклюде модуля значение уже выставлялось верным? Я чувствую, что я туплю где-то, как всегда... UPDATE Понимаю, что можно это решить, просто заставив селект формироваться постоянно заново, то есть тупо на новой странице все собирать заново. Но разве это рационально, потому что тогда рушится классная система главного файла и подключаемых модулей, которая удобна до чертиков. Изменено 13 ноября 2015 пользователем zilber Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 что-то типа такого: if($_GET['e_id'] == NULL){ $e_id = $_COOKIE['e_id']; } else { $e_id = $_GET['e_id']; SetCookie("e_id", $_GET['e_id']); } Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 (изменено) Автор Фактически это выглядит так: Чел на странице 1. Выбрал в селекте страницу 2. Нажал открыть. Открылась страница 2. В селекте - выставляется страница 1 так как он для того чтобы на нее попасть - выбирал ее ранее. После перезагрузки страницы селект выставляет верную страницу 2.UPDATE Это уже с куками (хотя один хрен то же самое с сессиями), ведь в данном случае принцип тот же. Я так понимаю, что это происходит потому, что сначала идет переадресацию на страницу, а потом ставится кука в идентификатором новой страницы. То есть на момент загрузки новой страницы в куке еще старая страница, поэтому она и выставляется в селекте. А вот при перезагрузке читается новая кука и все ок. Получается, что нужно сначала выставить куку с результатами выбора, а потом уже загружать выбранную страницу. Верно? Изменено 13 ноября 2015 пользователем zilber Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 18 минуту назад, zilber сказал: Получается, что нужно сначала выставить куку с результатами выбора, а потом уже загружать выбранную страницу. Верно? да, либо на первой странице читать из параметров url, а уже на второй страницы из кук или сессии. Просто после закрытия сессия удалиться, а кука останется. Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 Автор 5 минут назад, odys сказал: да, либо на первой странице читать из параметров url Пока не допру, как поставить куку прежде, чем перегрузить страницу. Ведь выбранное значение становится чем-то "осязаемым", когда передается в запросе, а запрос происходит, когда страница уже перезапускается. А что ты имеешь в виду под параметрами url в данном контексте? То есть считать детали из урла вида &блабла=2&брабра=3? Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 5 минут назад, zilber сказал: Пока не допру, как поставить куку прежде, чем перегрузить страницу для этого и используем jquery cookie, про который писал в начале. например: <select id="e_id"> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> <script> $( "#e_id" ).change(function() { $.cookie('e_id', .change(), { expires: 7, path: '/' }); }); </script> писал, как говориться, «на коленке», не проверял. Вот инфа про функцию change https://api.jquery.com/change/ Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 Автор Спасибо, уже врубился что ты имел в виду, копаю как раз в сторону твоего совета... Просто очень хотелось обойтись без js вовсе, поэтому интересовал метод без js ))) Цитата Ссылка на сообщение Поделиться на других сайтах
odys 384 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 11 минуту назад, zilber сказал: А что ты имеешь в виду под параметрами url в данном контексте? ну ты же в примере, самом первом, показал форму, соответственно когда отправляется форма в url страницы прописываются параметры формы: ?mod=eh1&e_id=1&name=privet ну и так далее. Это как раз и есть параметры url 3 минуты назад, zilber сказал: метод без js тогда параметры url либо это: if($_GET['e_id'] == NULL){ $e_id = $_COOKIE['e_id']; } else { $e_id = $_GET['e_id']; SetCookie("e_id", $_GET['e_id']); } Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 13 ноября 2015 Рассказать Опубликовано: 13 ноября 2015 Автор 9 минут назад, odys сказал: либо это: if($_GET['e_id'] == NULL){ $e_id = $_COOKIE['e_id']; } else { $e_id = $_GET['e_id']; SetCookie("e_id", $_GET['e_id']); } Ну а как это-то? :-) При отправке формы, когда значение готово к прочтению - это же впузыришь никуда без js )) Цитата Ссылка на сообщение Поделиться на других сайтах
zilber 3 Опубликовано: 16 ноября 2015 Рассказать Опубликовано: 16 ноября 2015 Автор Если что, проблему снятия значения выбранного пункта из динамического селекта решил так: var form = document.forms.имя формы; var elem = form.elements.имя селекта; var sel = elem.value; Вдруг кому пригодится. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.