我正在尝试在我的网页上加载$_SESSION
变量和另一个变量。
此处的页面结构是第1页 - >第2页 - >第3页;它是一种多部分形式。第2页上有一个后退按钮,允许您返回到第1页。我正在尝试使用会话变量来保持第1页中的输入字段不变。
我使用表单提交从第1页到第2页。以下是处理检索POST变量的适用的PHP代码:
<?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页上,它将显示我想要的内容。唯一的问题是会话变量不会延续到Page 1。
如果我将会话变量设置为字符串,它将返回到第1页。出于某种原因,即使发布的变量有效并且包含正确的字符串,会话变量也不会将它们带过来。
如果我这样做:
$_SESSION["rn"] = $retailerName;
然后会话变量的值不会转移到Page 1。
如果我这样做:
$_SESSION["rn"] = "asdf";
然后会话变量的值将转移到Page 1。
通常情况下,这只是意味着我发布的变量很糟糕,但在这种情况下我知道它们可以正常工作,因为页面的其余部分专门用于输出已发布的变量,而且它正确地完成了。
SESSID保持不变,所以这不是问题。我也能够在网站的其他部分继承其他会话变量,并且它们可以很好地工作。
为什么$_SESSION
变量不会将适当且有效的已发布变量传递给第1页,但它会携带一个字符串?
答案 0 :(得分:1)
你忘记了
session_start();
在PHP的顶部(或附近)?
表单的type
属性是否设置为POST
?
答案 1 :(得分:0)
不确定这里的完整情况,但是......
在我看来这里的事件流存在问题,我会尝试包含语句来在if语句中设置会话变量,如:
if($retailerName){
$_SESSION['rn'] = $retailerName;
...........
}
也许某种方式在设置POST变量后会再次调用第2页,这会将会话变量重置为空,因为没有POST数据。
也有可能这些第1页和第2页正在iframe中使用?如果是这样,那么加载第1页和第2页的顺序可能不正确。
答案 2 :(得分:0)
如果在返回第1页时执行print_r($ _ SESSION)的var_dump($ _ SESSION)会发生什么?好像你使用了session_start(),因为$ _SESSION ['rn'] =“abc”确实有效。
您还应该知道文件顶部的设置(因此$ retailerName = $ _POST ['零售商'])应该在某些检查中。
if($_SERVER['REQUEST_METHOD'] == "POST") {
$retailerName = $_POST['retailer'];
$_SESSION['rn'] = $retailerName;
}
否则,当再次访问页面时,所有内容都将被删除(因此有一个空的$ _POST数组会删除$ _SESSION ['rn']值。
答案 3 :(得分:0)
您在页面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)并在第2页顶部执行print_r($ _ GET),在第2页底部执行另一个print_r($ _ SESSION)。
现在转到浏览器中的第1页。你的值是否设置为null?再次填写第1页的表格并发布到第2页。第2页是否显示您的表格值?也许表单值没有正确传递给第2页。
如果您看到表单值,那么$ _SESSION数组中的属性设置应该有效。您应该会在第2页的底部看到$ _SESSION数组正确打印出来。
返回第1页。会话变量是否已打印出来?如果没有,那么有些东西会覆盖$ _SESSION数组。检查包含/所需文件。