Установка переменной сеанса PHP только при обновлении - PullRequest
0 голосов
/ 09 августа 2011

У меня есть довольно простой набор php-форм, которые проводят пользователей через 3 этапа перед окончательной отправкой их информации.

Я использую переменные сеанса для сохранения данных на каждой странице, а такжеизвлеките каждую переменную сеанса в поля, которые, возможно, уже были отправлены, чтобы формы были «липкими».

Проблема в том, что, как только они попадают в 3-ю часть формы, если они возвращаются назад, используя ссылкупри условии, что это ошибки, потому что фактически не было POST данных из 1-го раздела, поэтому нечего устанавливать для переменных сеанса.

Чтобы противостоять этому, я добавил следующий фрагмент кода для всех моих переменных:

    if(!isset($_SESSION['home_tel'])){
        session_register('home_tel');
        $_SESSION['home_tel'] = $_POST['home_tel'];                         
    }

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

Есть ли простой способ проверить значения сеанса, чтобы увидеть, изменились ли они до и доустановить переменную сеанса?В качестве альтернативы есть только способ проверить, был ли он опубликован или нет, и если это так, то создал переменную.Я пытался, если (isset ($ _ POST ['home_tel'])) .... и т. Д., Но это, похоже, не работает.

Любая помощь будет здорово ??

Большое спасибо, Джонни

Ответы [ 3 ]

2 голосов
/ 09 августа 2011
if(isset($_POST['home_tel']) && ($_POST['home_tel'] != $_SESSION['home_tel'])){
    $_SESSION['home_tel'] = $_POST['home_tel'];
}

Это установит $_SESSION['home_tel'], если была отправлена ​​запись и если новое значение отличается от старого значения.

0 голосов
/ 09 августа 2011

Во-первых, как вы обнаружили, хранение данных транзакций в сеансе - плохая идея. Вы уже столкнулись с проблемами с кнопкой «Назад», вскоре вы обнаружите проблемы, когда пользователь откроет второе окно в том же сеансе.

Есть ли простой способ проверить значения сеанса, чтобы увидеть, изменились ли они до обновления переменной сеанса?

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

$reserved_values=array('email','authenicated_user');
foreach ($_POST as $name=>$val) {
  if (!in_array($name, $reserved_values) 
      && array_key_exists($name, $_SESSION)) {
      $_SESSION[$name]=$val;
  }
}
0 голосов
/ 09 августа 2011

Вы больше не хотите использовать session_register:

Эта функция УСТАРЕЛА с PHP 5.3.0. Опираясь на это особенность крайне не рекомендуется.

http://www.php.net/session_register

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