Я написал сообщение об этом ранее и получил хорошие ответы, которые исправили ошибку, которую я имел, и я решил, что проблема решена. К сожалению, этого не произошло, и мой старый пост достаточно грязный, что я собираюсь перепроверить проблему, но с добавленной перспективой, которую я получил, боролся с этим еще раз.Переменные сеанса PHP пусто после обновления страницы
код (упрощенный):
<?php
session_start();
if (!$_SESSION["companyid"]) {
header("location: http://www.somepage.com");
}
mysql_connect("localhost", "name", "password") or die(mysql_error());
mysql_select_db("database") or die(mysql_error());
$companyid = $_SESSION["companyid"];
$_SESSION["youtubeurl"] = mysql_real_escape_string($_POST["youtubeurl"]);
$_SESSION["logourl"] = mysql_real_escape_string($_POST["logourl"]);
$_SESSION["plan1head"] = mysql_real_escape_string($_POST["plan1head"]);
$_SESSION["plan1description"] = mysql_real_escape_string($_POST["plan1description"]);
$_SESSION["plan1headline1"] = mysql_real_escape_string($_POST["plan1headline1"]);
$_SESSION["plan1price1"] = mysql_real_escape_string($_POST["plan1price1"]);
$_SESSION["plan1headline2"] = mysql_real_escape_string($_POST["plan1headline2"]);
$_SESSION["plan1price2"] = mysql_real_escape_string($_POST["plan1price2"]);
$_SESSION["plan1price1type"] = mysql_real_escape_string($_POST["plan1price1type"]);
$_SESSION["plan1price2type"] = mysql_real_escape_string($_POST["plan1price2type"]);
if(isset($_POST["submitpreview"])) {
$companyid = $_SESSION["companyid"];
$youtubeurl = $_SESSION["youtubeurl"];
$logourl = $_SESSION["logourl"];
$plan1head = $_SESSION["plan1head"];
$plan1description = $_SESSION["plan1description"];
$plan1headline1 = $_SESSION["plan1headline1"];
$plan1price1 = $_SESSION["plan1price1"];
$plan1headline2 = $_SESSION["plan1headline2"];
$plan1price2 = $_SESSION["plan1price2"];
$plan1price1type = $_SESSION["plan1price1type"];
$plan1price2type = $_SESSION["plan1price2type"];
}
?>
Теперь есть три страницы/случаи, связанные с этим:
- страницы с формами, которые проходят переменные на странице просмотра
- Просмотр страницы
- Представленная страница предварительного просмотра (значение страницы обновляется)
У человека есть своя страница, заполненная различными текстовыми полями и раскрывающимися меню (стр. 1). Они могут обновлять эту страницу, и когда они заполняют форму для этого и представляют ее, эти переменные передаются на страницу предварительного просмотра. Если им нравится страница предварительного просмотра, подтверждающая ее (отправка формы, которая выполняет «submitpreview»).
Вот моя проблема: все переменные сеанса, заполняемые формой (все, кроме идентификатора компании, которое хранится в сеансе при первом входе в систему), сразу же сбрасываются в переменную сеанса. Я повторил эти переменные сеанса в нижней части страницы предварительного просмотра (просто чтобы подтвердить, что они не пусты в этот момент времени), и их содержимое будет эхом отозвано, когда я доберусь до страницы предварительного просмотра. Тем не менее, когда пользователь подтверждает изменения, и установлен параметр submitpreview, внезапно эти переменные сеанса пусты. То есть все переменные сеанса, заполненные переменными формы, пусты. Переменные сеанса, которые были эхом отредактированы только до обновления страницы, исчезли за исключением переменной companyid. Поскольку переменная сеанса companyid все еще прекрасна, я знаю, что (1) сеансы на моем сервере должны работать правильно, и (2) проблема заключается в том, что код либо загружает переменные формы в сеансы, либо извлекает эти переменные. Любые теории относительно того, почему это может произойти?
Это меня очень расстроило. Я ценю ваше терпение со мной по этому вопросу и ценю любую помощь, которая предоставляется.
Добро пожаловать в переполнение стека! Пожалуйста, не используйте функции 'mysql_ *' для написания нового кода. Они больше не поддерживаются, и сообщество начало процесс [устаревания] (http://news.php.net/php.internals/53799). См. [Красная рамка] (http://uk.php.net/manual/en/function.mysql-connect.php)? Вместо этого вы должны узнать о [подготовленных заявлениях] (http: //en.wikipedia.org/wiki/Prepared_statement) и используйте либо [PDO] (http://php.net/pdo), либо [MySQLi] (http://php.net/mysqli). Если вы выберете PDO [здесь хороший учебник] (http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers). – War10ck
- session_start(); существуют на всех страницах? вы пытались print_r ($ _ SESSION), когда сеансы исчезают? – 2013-02-11 20:08:08
Когда я это делаю, он дает мне следующее: (У меня это напечатано после установки предварительного просмотра). Массив ([youtubeurl] => [logourl] => [plan1head] => [plan1description] => [plan1headline1] => [plan1price1] => [plan1headline2] => [plan1price2] => [companyid] => 7. И yes, session_start() находится в начале всех моих страниц. –