Обновленная переменная сеанса php не обновляется, если не нажать кнопку «обновить» - PullRequest
0 голосов
/ 13 марта 2011

У меня есть сайт, основанный на PHP / MySQL.Каждая форма (метод POST) отправляет обратно переменную, которую я сохраняю в переменных SESSION при каждой отправке формы, используя общий код в заголовке файла:

session_start(); foreach ($_POST as $key => $value) {
if ($key != "submit") {
    $_SESSION[$key] = $value;
}
foreach ($_SESSION as $key => $value) $$key = $value;

Код работает правильно (без ошибок, переменные правильно сохранены в СЕССИИ).В самой форме каждое поле имеет ссылку на переменную SESSION, поэтому, когда пользователь возвращается в форму, вызывается ранее выбранная переменная из SESSION, например:

<input type="text" name="fmElement" id="fmElement" size="5" maxlength="2" value="<?php echo @$fmElement; ?>">

($_POST ['fmElement'] сохраняется в переменной SESSION $ _SESSION ['fmElement'], быстро после сохранения в переменной $ fmElement)

У меня есть кнопка с именем "restart", которая просто вызывает страницу (НЕ яваскрипт "вернуться"; я действительно помню страницу) и позволяю пользователю изменять значения, введенные в форму, а затем снова отправлять их обновленный запрос.Моя главная проблема заключается в том, что, хотя переменные SESSION правильно обновлены, они НЕ будут показывать последние изменения в переменных SESSION, а те, что были сохранены ранее.Однако, когда я заставляю браузер обновить страницу, поле fmElement затем обновляется!

Вот пример, чтобы прояснить ситуацию: a) пользователь выбирает «K» в качестве первого элемента (это примернохимия => к = калий).б) Пользователь нажимает ОК и получает информацию о «К».в) Затем он хочет изменить это и нажать «перезагрузить».г) Затем он выбирает «Pb» (ведущий) и нажимает «ОК» (снова).e) Форма правильно учитывает это изменение и показывает результаты для «Pb».е) ОДНАКО, и вот ошибка ... когда он нажимает второй раз на «перезапуск», то браузер отправит обратно «K» (а не «Pb») в поле fmElement ... WTF?!?(извиняюсь за это неловкое выражение).g) Только когда пользователь заставляет обновить страницу, тогда поле fmElement правильно показывает «Pb», доказывая, что переменная SESSION $ _SESSION ['fmElement'] была корректно обновлена ​​со вторым запросом (точка d).

Я уже пробовал следующее, но ничего из этого не работает ... 1) Принудительно обновить страницу, отправив также скрытую переменную "refresh" и принудительно обновить браузер с помощью JavaScript (между ...),как ...

    if (@$_POST['refresh'] == "1") echo "<script type='text/javascript'>window.reload();</script>";

2) Принудительно НЕ сохранять браузер в кеше с такой мета-меткой:

<META HTTP-EQUIV="CACHE-CONTROL" CONTENT="NO-CACHE">

Я мог бы выслать вам полный исходный код, но это будетВсего 500 строк ... Пожалуйста, кто-нибудь может мне помочь?Большое спасибо заранее!

Жюльен

1 Ответ

0 голосов
/ 13 марта 2011

У меня была такая же проблема, я пытался предотвратить кэширование и все остальное.Единственный способ решить эту проблему - использовать запрос GET вместо POST.Кроме того, я недавно решил аналогичную проблему, выполнив обновление страницы PHP, когда вы вернетесь на страницу.Добавьте параметр запроса к URL-адресу, когда они возвращаются в форму (это может решить проблему, поскольку может нарушить кэширование из-за другой страницы), а затем, если эта строка запроса существует, выполните header("Location: $url") с $ url, установленным в формурасположение страницы без строки запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...