Я просмотрел все проблемы с переменной сеанса, не сохраняя и не вижу своей проблемы, поэтому я собираюсь спросить об этом.PHP-переменная сеанса не сохраняется
У меня есть форма, которая однажды отправила его в мою базу данных для этого имени. Исходная форма на странице 1. На странице 2 я беру переменную со страницы 1 и сохранить его как этот
$searchTerm = $_POST['find'];
, который используется в качестве поиска в базе данных, и она прекрасно работает. Под этим я мое заявление SQL, то я поместил этот
//initialize the session
if (!isset($_SESSION)) {
session_start();
}
$_SESSION['searchTerm'] = $searchTerm;
Я тестируют $ _SESSION [ «SEARCHTERM»] на странице 2, чтобы убедиться, что она сохраняет должным образом, и это делает. Моя проблема возникает, когда я пытаюсь перейти на 3-й странице, которая является страница подтверждения для формы со страницы 2. Я имею условие начала сеанса в верхней части 3-й странице, и я даже вставлено
ini_set('display_errors',1);
error_reporting(E_ALL);
в проверьте наличие ошибок, ошибок не было. Итак, моим следующим шагом было протестировать сам сеанс, чтобы узнать, обновляет ли он идентификатор сеанса. Я нашел сценарий на этом сайте www.webassist.com/forums/posts.php?id=5735, чтобы проверить, может ли сервер быть причиной проблемы. Скрипт отлично работает без проблем, показывая, что сервер не является проблемой. Однако, когда я загрузить мою 2-й и 3-й страницу на сервер и поставить в
<?php echo session_id(); ?>
числа со страницы 2 и 3 страницы совершенно разные поэтому делаю мой переменный нуль. Я сделал дальнейшие исследования и думал, что это может быть потому, что был session_destroy или session_unset, но я не помещал их ни на одну из этих страниц. Когда я попробовал это на своей локальной машине, у меня был тот же идентификатор сеанса, но все же переменная сессии, которую я установил, была пустой.
Есть ли у кого-нибудь другие идеи о том, как и почему это произойдет?
** * ** * ****редактировать ** * ** * ** * ** * ** * ** * ** *
страница 1 имеет такую форму
<form name="search" method="post" action="page2.php">
<div>
<!-- Search-->
<label>Search by Last Name:</label>
<div>
<table width="100%">
<tr>
<td><input type="text" id="" name="find" placeholder=""></td>
<td><button id="submit" type="submit"><span>Search</span></button></td>
</tr>
</table>
</div>
</div>
</form>
страница 2
$searchTerm = $_POST['find'];
if(!empty($searchTerm) && ctype_alpha($searchTerm))
{
$whereclause = "WHERE mytable.lastName = '".$searchTerm ."'";
}
else {
$whereclause = "";
}
// sql query is here this one searches it is long and just used the $whereclause above.
// second sql query that is only submitted if button from the form below is hit is here.
$insertGoTo = "confirmPage3.php";
if (isset($_SERVER['QUERY_STRING'])) {
$insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";
$insertGoTo .= $_SERVER['QUERY_STRING'] ;
}
header(sprintf("Location: %s", $insertGoTo));
//initialize the session
if (session_id() == '') {
session_start();
}
$_SESSION['searchTerm'] = $searchTerm;
// then the form is listed below that with the rest of the html
страница 3
<?php if(session_id() == '') session_start(); ?>
if(!empty($_SESSION['searchTerm']) && ctype_alpha($_SESSION['searchTerm']))
{
$whereclause = "WHERE myTable.lastName = '".$_SESSION['searchTerm'] ."'";
}
else {
$whereclause = "";
}
// More sql statement here for this one it is only selecting not updating or changing anything.
// Table below this that is used to hold the items retrieved from the database.
** * ** * ** * **редактировать 2 и мое исправление* ** * ** * ** *
так после некоторых спин и с некоторыми из вас, Аарона Gong предложил Я начинаю с пустой страницы и оттуда. Я сделал это и, наконец, поставил диагноз. Это было то, что я не думал о том, что мне очень хорошо. Мне не нравится использовать Dreamweaver, и теперь я помню, почему. Когда я изначально создал страницу 2, я использовал Dreamweavers, чтобы вставить код для вставки моей инструкции sql для обновления. Ну, он поместил в код эти строки кода.
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
Это полностью сработает с вами, если вы попытаетесь отправить пользователя на другую страницу, чтобы подтвердить свои записи. Я прокомментировал это и установил $ editFormAction на свою страницу и использовал это в строке заголовка и альте, которые сразу же исправили мою проблему. То, что я не понял, - это когда он обновлял страницу, что он опорожнял мою переменную $ _POST и обнаружил эту ошибку, наконец, через пустые страницы, предложенные Аароном.
Надеюсь, это поможет кому-то еще, и я больше никогда не вернусь коду из Dreamweaver. Я научился программировать вручную и должен знать лучше, но я торопился и думал, что это не повредит.
Еще раз спасибо всем вашим предложениям.
Вы начинаете сеанс на каждой странице, которую хотите использовать переменную '$ _SESSION', или создать ее? –
Да переменная $ _SESSION и начало сеанса находятся на всех страницах, на которых необходимо включить. – puddleJumper
Почему, по вашему мнению, какой-либо код будет выполнен после изменения местоположения 'header'? Пожалуйста, попробуйте мой ответ. Кроме того, удалите оператор 'if' со страницы 3. Просто выполните' session_start() '. Нет ifs, ands или buts. –