我正在尝试使用会话在表单上存储信息,以防验证返回false,然后用户不必重新填写表单。我是这样做的:
PAGE A:
<?
session_start();
$Fname = $_SESSION['FirstName'];
?>
<html>
<input type="text" id="First" value="<? if($Fname){echo $Fname;}?>">
</html>
第B页:
<?
$Fname = $_POST['First'];
session_start();
$_SESSION['FirstName'] = $Fname;
//validation is not good then
header('Location: PageA.php');
?>
问题在于,当发送回到页面A时,输入中没有任何内容显示,但是它会随机显示,或者我会刷新它可能会显示出来。在大多数情况下,它只是不起作用,我不明白这种情况刚刚开始发生,当我修改删除其中一个会话变量并由于其他原因用cookie替换它,但决定不去那条路。我仍然没有看到我能做些什么才能开始引起这个问题。有任何想法吗?我正在考虑使用php.ini文件的东西,因为我有一个单独的表单,具有相同的设置,我从来没有碰过它,现在它在我最后一次检查时不起作用。
更新
我刚刚尝试过这个表单,我故意错误地提交了表单以触发验证,并且它已经发回了我已经提到的空白输入。我点击了另一个页面,然后回到表单并显示输入。好像它的存储似乎没有被立即读取?不知道这是否有帮助。
答案 0 :(得分:2)
在页面B上session_start()
应该是页面上的第一个命令。为了确保
答案 1 :(得分:0)
不确定它是否是拼写错误,但是在输入标记中没有指定“name”属性,这意味着当你转到第B页时会出现一个空的$ _POST数组。
答案 2 :(得分:0)
很难(至少对我来说)没有进一步细节的帮助,但这是我的想法:
显然,header()有时可以在写入会话cookie之前进行重定向。这可以解释为什么有时它会起作用,有时却不起作用。但是,正如我所说,不确定这是否适用于您的代码。
答案 3 :(得分:0)
您根本不需要SESSION
...
PAGE A:
<?
$Fname = isset($_POST['First']) ? $_POST['FirstName'] : '';
?>
<html>
<form method='post' action='PageB.php'>
<input type="text" id="First" value="<? if($Fname){echo $Fname;}?>"/>
</form>
</html>
第B页:
<?
//validation is not good then
include 'PageA.php';
exit;
?>
答案 4 :(得分:0)
我通过填写你在你的例子中遗漏的东西来完成它;它对你有用吗?
PageA.php
请注意添加<form action="PageB.php" method="POST">
并将id="First"
更改为name="First"
<?
session_start();
$Fname = $_SESSION['FirstName'];
?>
<html>
<form action="PageB.php" method="POST">
<input type="text" name="First" value="<? if($Fname){echo $Fname;}?>">
</form>
</html>
PageB.php
(不变)
<?
$Fname = $_POST['First'];
session_start();
$_SESSION['FirstName'] = $Fname;
//validation is not good then
header('Location: PageA.php');
?>