php
#php
Вопрос:
Я пытаюсь загрузить $_SESSION
переменную с другой переменной на моей странице.
Структура страницы здесь — Страница 1 -> Страница 2 -> Страница 3; это форма, состоящая из нескольких частей. На странице 2 есть кнопка «Назад», которая позволяет вам вернуться на страницу 1. Я пытаюсь использовать переменные сеанса, чтобы поля ввода на странице 1 не оставались пустыми.
Я использую форму отправки, чтобы перейти со страницы 1 на страницу 2. Вот применимый PHP-код на странице 2, который обрабатывает извлечение переменных POST:
<?php
$retailerName = $_POST["retailerName"];
$description = $_POST["description"];
$savingsDetails = $_POST["savingsDetails"];
$terms = $_POST["terms"];
$phone = $_POST["phone"];
$address = $_POST["address"];
$zone = $_POST["zone"];
$dateExp = $_POST["dateExp"];
$tag = $_POST["tag"];
$_SESSION["rn"] = $retailerName;
$_SESSION["de"] = $description;
$_SESSION["sd"] = $savingsDetails;
$_SESSION["tm"] = $terms;
$_SESSION["ph"] = $phone;
$_SESSION["ad"] = $address;
$_SESSION["zo"] = $zone;
$_SESSION["ex"] = $dateExp;
$_SESSION["tg"] = $tag;
?>
Я знаю, что переменные устанавливаются правильно.
Я могу сделать это:
echo $retailerName;
echo $_SESSION["rn"];
На странице 2 и он покажет, чего я хочу. Единственная проблема заключается в том, что переменные сеанса не переносятся на страницу 1.
Если я установлю для переменных сеанса значение string, оно вернется на страницу 1. По какой-то причине, даже если опубликованные переменные являются допустимыми и содержат правильную строку, переменная сеанса не будет переносить их.
Если я сделаю это:
$_SESSION["rn"] = $retailerName;
Тогда значение переменной сеанса не будет перенесено на страницу 1.
Если я сделаю это:
$_SESSION["rn"] = "asdf";
Тогда значение переменной сеанса будет перенесено на страницу 1.
Обычно это просто означает, что мои опубликованные переменные плохие, но в этом случае я знаю, что они работают, поскольку остальная часть страницы посвящена выводу опубликованных переменных, и она делает это правильно.
Идентификатор сеанса остается неизменным, так что проблема не в этом. Я также могу переносить другие переменные сеанса в другие части веб-сайта, и они работают отлично.
Почему $_SESSION
переменные не переносят правильную и действительную опубликованную переменную на страницу 1, но она переносит строку?
Страница 1 Pastebin
Страница 2 Pastebin
Ответ №1:
Ты забыл
session_start();
В (или около) верхней части вашего PHP?
type
Установлен ли атрибут формы в POST
?
Комментарии:
1. Нет, я могу передавать строки в переменной сеанса.
2. Я знаю, но я предположил, что, возможно, в вашем тесте вы создали другую страницу. Извините.
3. Да, это СООБЩЕНИЕ. Я заранее использовал $_REQUEST, и переход на POST не улучшил ситуацию. Переменные проходят правильно; Я могу вывести все опубликованные переменные на странице 2.
4. Никакой опечатки, я сократил имена переменных, мой фактический код имеет ‘rn’.
Ответ №2:
Что произойдет, если вы выполните var_dump($ _SESSION) из print_r($ _SESSION) при возврате на страницу 1? Похоже, вы использовали session_start(), потому что $_SESSION[‘rn’] = «abc» действительно работает.
Вы также должны знать, что настройки в верхней части файла (так что $ retailerName = $ _POST [‘retailer’]) должны быть в пределах некоторых проверок fe.
if($_SERVER['REQUEST_METHOD'] == "POST") {
$retailerName = $_POST['retailer'];
$_SESSION['rn'] = $retailerName;
}
В противном случае все будет стерто при повторном посещении страницы (и, следовательно, с пустым массивом $ _POST, который стирает значение $ _SESSION[‘rn’].
Комментарии:
1. Все переменные сеанса, которые я пытаюсь передать, имеют значение NULL.
2. и нет никаких шансов, что на странице 1 все переменные сбрасываются в NULL?
3. Нет, только переменные, которые я пытаюсь передать. Остальные в порядке.
4. Не могли бы вы добавить полный код со страниц 1 и 2 в pastebin? Кажется действительно странным, что это не работает, если ни одна из приведенных возможных ошибок, похоже, не имеет места.
5. странно .. и что происходит, когда вы переключаетесь со страницы 1 обратно на страницу 2, содержит ли тогда сеанс правильные ключи?
Ответ №3:
Не уверен в полном сценарии здесь, но…..
Мне кажется, что здесь есть проблема с потоком событий, я бы попробовал включить инструкции для установки переменных сеанса в операторе if, например:
if($retailerName){
$_SESSION['rn'] = $retailerName;
...........
}
Может быть, каким-то образом есть еще один вызов на страницу 2 ПОСЛЕ установки переменных POST, который сбрасывает переменные сеанса на пустые, потому что нет данных POST.
Также случайно эти страницы 1 и 2 используются в iframes? Если это так, то, возможно, последовательность загрузки страницы 1 и страницы 2 неверна.
Ответ №4:
У вас есть тот же код в верхней части вашей страницы 1?
$retailerName = $_POST["retailerName"];
$description = $_POST["description"];
$savingsDetails = $_POST["savingsDetails"];
$terms = $_POST["terms"];
$phone = $_POST["phone"];
$address = $_POST["address"];
$zone = $_POST["zone"];
$dateExp = $_POST["dateExp"];
$tag = $_POST["tag"];
Возможно, все ваши переменные сбрасываются, прежде чем вы попытаетесь получить свойства со следующим:
$_SESSION["rn"] = $retailerName;
echo $_SESSION["rn"] // this will not be what you want now
Единственное, что я могу думать, это то, что все, что находится на странице 1, сбрасывает массив $ _SESSION . В верхней части страницы 1 и страницы 2 выполните print_r($ _SESSION) и выполните print_r($ _GET) в верхней части страницы 2 и еще один print_r ($ _SESSION) в нижней части страницы 2.
Теперь перейдите на страницу 1 в вашем браузере. Установлены ли ваши значения в null там? Снова заполните свою форму на странице 1 и отправьте сообщение на страницу 2. Отображаются ли на странице 2 значения вашей формы? Возможно, значения формы неправильно передаются на страницу 2.
Если вы видите значения своей формы, то ваша настройка свойств в массиве $ _SESSION должна работать. Вы должны увидеть, что массив $ _SESSION правильно распечатан внизу страницы 2.
Вернитесь на страницу 1. Распечатаны ли переменные сеансов? Если нет, то что-то перезаписывает массив $ _SESSION. Проверьте включенные / требуемые файлы.
Комментарии:
1. Нет, я убедился, что это не так. Имейте в виду, я могу установить переменную сеанса в строку, поэтому я знаю, что она не перезаписывается. Это что-то не так с комбинацией переноса опубликованной строки на предыдущую страницу, которая является моей проблемой.
2. Я отредактировал свой ответ, чтобы он содержал шаги по устранению неполадок, которые я бы предпринял, чтобы найти вашу проблему