我已经查看了有关会话变量未保存的所有问题,但没有看到我的问题,所以我要问它。
我有一个表单,一旦提交它就会在我的数据库中搜索该名称。初始表单在第 1 页。在第 2 页,我从第 1 页获取变量并像这样保存它
$searchTerm = $_POST['find'];
它被用作数据库的搜索,它工作得很好。在此之下,我有我的 sql 语句,然后我放置了这个
//initialize the session
if (!isset($_SESSION)) {
session_start();
}
$_SESSION['searchTerm'] = $searchTerm;
然后,我在第 2 页测试了 $_SESSION['searchTerm'] 以确保它正确保存,并且确实如此。当我尝试从第 2 页转到作为表单确认页面的第 3 页时,我的问题出现了。我在第 3 页的顶部有会话开始子句,我什至插入了
ini_set('display_errors',1);
error_reporting(E_ALL);
检查错误,没有显示错误。所以我的下一步是测试会话本身,看看它是否正在刷新会话 ID。我在这个网站 www.webassist.com/forums/posts.php?id=5735 上找到了一个脚本来测试服务器是否可能导致问题。该脚本工作正常,没有问题,表明服务器不是问题。但是,当我将第二页和第三页上传到服务器并放入时
<?php echo session_id(); ?>
第 2 页和第 3 页的数字完全不同,因此使我的变量为空。我做了进一步的研究,并认为这可能是因为有一个 session_destroy 或 session_unset 但我没有把其中一个放在任何一个页面上。当我在本地机器上尝试这个时,我得到了相同的会话 ID,但我设置的会话变量仍然是空白的。
有没有人对如何或为什么会发生这种情况有任何其他想法?
** * ** * ****编辑** * ** * ** * ** * ** * ** * ** *
第 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 和我的修复* ** * ** * ** *
所以在与你们中的一些人进行了一些交流之后,Aaron Gong 建议我从空白页开始,然后从那里开始。我这样做了,终于诊断出这个问题。这是我没有想到我应该拥有的东西。我不喜欢使用dreamweaver,现在我记得为什么了。当我最初创建第 2 页时,我使用 Dreamweavers 插入代码插入我的 sql 语句来进行更新。好吧,它在代码中放置了这几行代码。
$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
$editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}
如果您试图将用户发送到另一个页面以确认他们的条目,这将完全搞砸您。我将其注释掉并将 $editFormAction 设置为我的页面,并在标题字符串和中提琴中使用它立即解决了我的问题。我没有意识到的是,当它刷新页面时,它正在清空我的 $_POST 变量,并最终通过 Aaron 建议的空页面发现了该错误。
希望这对其他人有所帮助,我将永远不会再信任 Dreamweaver 的代码。我学会了手工编码,应该知道得更好,但我很着急,想哦,这不会伤害它。
再次感谢您的所有建议。