Перейти к публикации

Рекомендованные сообщения

Приветствую!

 

<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, при вызове.
Если перегрузить страницу - все хорошо, селект проверяет сессию и поднимает нужный пункт. Но в момент подгрузки модуля, когда для пользователя как бы открылась новая страница, а на самом деле нет - в селекте старое значение, ведь без перезагрузки он не может проверить сессию.

Заранее спасибо за добрый совет.

Ссылка на сообщение
Поделиться на других сайтах
16 минуту назад, zilber сказал:

Заранее спасибо за добрый совет.

ну как вариант записать значение $action в куки.

https://github.com/carhartl/jquery-cookie

очень проста в обращении и работает как часы :)

 

записали:

$.cookie('name', '$action', { expires: 7, path: '/' });

считали:

$.cookie('name');

 

Ссылка на сообщение
Поделиться на других сайтах

Привет! А зачем?

Проблема же не в сохранении action, а в сохранении значения селекта :-)

Ссылка на сообщение
Поделиться на других сайтах
12 часа назад, zilber сказал:

Проблема же не в сохранении action, а в сохранении значения селекта

ну тогда значение селекта туда передавать... B)

Ссылка на сообщение
Поделиться на других сайтах

Ну стой, может я не до конца понимаю...
Записал я куку со значением селекта. Чтобы браузер ее прочитал, страница должна быть перегружена, верно ведь?
А если она перегружена, то и использованный мной метод отлично справится, нет?

UPDATE

Я запутался :-)
Повесил на кнопку подтверждения выбора перезагрузку страницы - и все равно та же история ))))

Изменено пользователем zilber
Ссылка на сообщение
Поделиться на других сайтах

У вас в коде стоит $_SESSION['e_id'] == $item['e_id'].

 

Вы записываете куки, а проверяете в скрипте не куки, а сессии. Это как бы совсем разные вещи.

Ссылка на сообщение
Поделиться на других сайтах

Нет, я куки не пишу, просто обсуждаем это :)
 

Есть index.php, в котором формируется селект из базы. Форма, в которой находится селект, отправляет выбранное значение в мод.
В моде значение принимается, пишется в сессию

$e_id = $_GET['e_id'];
$_SESSION['e_id'] = $e_id;

В сессии застревает e_id.
Ну а в селекте файла index.php изначально проверка на наличие e_id в сессии.

UPDATE

Я понимаю, что сессия прибивается при закрытии браузера. Ну а тот случай, когда сессия не закрывается, когда пользователь остается...
Блин... Я понимаю, что проблема как-то очень легко и просто диагностируется, но пока не допру

Ссылка на сообщение
Поделиться на других сайтах
29 минуты назад, zilber сказал:

Я запутался :-)

во-во

и я тоже :)

Как я понимаю тебе нужно чтобы сохранялся значение выбранного селекта? Да! Поэтому до перезагрузки его нужно считывать из передаваемых параметров и записывать в куки, а после перезагрузки уже читать из кук, если в параметрах пусто. Вот и всё...

 

Ссылка на сообщение
Поделиться на других сайтах

Я понимаю, что куки мне дадут то, что в следующий раз, когда человек зашел на сайт, ему будет отмечено в селекте то, где он сидел в крайний раз...
Но когда он в первый раз на сайте... У него нет ни сессии, ни куки... Он выбрал пункт. Пункт записался куда угодно, да хоть в оба варианта... Но в процессе инклюда модуля, значение селекта сбросится. А станет верным только при перезагрузке страницы целиком, когда браузер всосет данные сессии, или куки.
Как бы добиться, чтобы при инклюде модуля значение уже выставлялось верным?
Я чувствую, что я туплю где-то, как всегда...

UPDATE

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

Изменено пользователем zilber
Ссылка на сообщение
Поделиться на других сайтах

Фактически это выглядит так:
Чел на странице 1. Выбрал в селекте страницу 2. Нажал открыть. Открылась страница 2.
В селекте - выставляется страница 1 так как он для того чтобы на нее попасть - выбирал ее ранее.
После перезагрузки страницы селект выставляет верную страницу 2.

UPDATE

Это уже с куками (хотя один хрен то же самое с сессиями), ведь в данном случае принцип тот же.
Я так понимаю, что это происходит потому, что сначала идет переадресацию на страницу, а потом ставится кука в идентификатором новой страницы. То есть на момент загрузки новой страницы в куке еще старая страница, поэтому она и выставляется в селекте. А вот при перезагрузке читается новая кука и все ок.
Получается, что нужно сначала выставить куку с результатами выбора, а потом уже загружать выбранную страницу.
Верно?

Изменено пользователем zilber
Ссылка на сообщение
Поделиться на других сайтах
18 минуту назад, zilber сказал:

Получается, что нужно сначала выставить куку с результатами выбора, а потом уже загружать выбранную страницу.
Верно?

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

Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, odys сказал:

да, либо на первой странице читать из параметров url

Пока не допру, как поставить куку прежде, чем перегрузить страницу. Ведь выбранное значение становится чем-то "осязаемым", когда передается в запросе, а запрос происходит, когда страница уже перезапускается.

А что ты имеешь в виду под параметрами url в данном контексте?

То есть считать детали из урла вида &блабла=2&брабра=3?

Ссылка на сообщение
Поделиться на других сайтах
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/

Ссылка на сообщение
Поделиться на других сайтах

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

Ссылка на сообщение
Поделиться на других сайтах
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']);
}
Ссылка на сообщение
Поделиться на других сайтах
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 ))

Ссылка на сообщение
Поделиться на других сайтах

Если что, проблему снятия значения выбранного пункта из динамического селекта решил так:

var form = document.forms.имя формы;
var elem = form.elements.имя селекта;
var sel = elem.value;

Вдруг кому пригодится.

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...