我想在php上使用后退选项而不会丢失表单数据。
我试过这种方式;
if ($username==""){
echo 'Please fill. <input type="button" value="Back" onClick="history.back()">';
} else{
$doaction;
}
就这样;
$url= $_SERVER['HTTP_REFERER'];
if ($username==""){
echo "Please fill.";
header("refresh: 2; url=$url");
}
else{
$doaction;
}
在两种方式中我都会丢失数据。我怎样才能做得更好?
答案 0 :(得分:2)
这对我有用,并且需要包含ob_start();
(在下面的PHP中),否则会抛出错误,例如:
PHP警告:无法修改标头信息 - 已经由(输出已开始)
发送的标头
完全按照所示使用以下内容,然后修改以适应以后。
使用 Sessions 是达到此目的的一种方法。如果填充,每个字段将重新出现在输入框中。
<?php
session_start();
?>
<form method="post" action="submitted.php">
<p>
<label for='name'>Your Name:</label>
<br>
<input type="text" name="username" value="<?php echo isset($_SESSION['username']) ? $_SESSION['username'] : '' ?>">
</p>
<p>
<label for='name'>Email:</label>
<br>
<input type="text" name="email" value="<?php echo isset($_SESSION['email']) ? $_SESSION['email'] : '' ?>">
</p>
<input type="submit" name="submit" value="Submit">
<br>
</form>
<?php
ob_start();
session_start();
$_SESSION['username'] = $_POST['username'];
$_SESSION['email'] = $_POST['email'];
$url= $_SERVER['HTTP_REFERER'];
$username=$_POST['username'];
$email=$_POST['email'];
// use this one below, if you want to check more than one field
// if (empty($_POST['username']) || empty($_POST['email']) ){
if (empty($_POST['username'])){
echo "Fill in all fields.";
header("refresh: 2; url=$url");
}
else{
echo "OK, redirecting back to show fields are showing, or not.";
header("refresh: 2; url=$url");
}
答案 1 :(得分:0)
您的方法会重新加载公式,因此网络服务器会向客户端发送一个干净的表单。如果您需要预填充表单,则必须使用PHP脚本,该脚本知道以前填充的值并创建预填充表单。
答案 2 :(得分:0)
在你使用的代码,(假设你有一个表格进一步上涨)有正在传递的页面之间没有数据,因为没有什么是告诉脚本到页面之间传输数据,它的目的地。
在您的第一个示例中,history.back()
只是告诉浏览器返回当前查看之前查看的最后一页。在第二个示例中,标题行基本上只是告诉浏览器在两秒钟后返回上一页。
为了在页面传输之间保留数据,而不进一步了解您正在做什么,我建议使用JavaScript获取表单数据并将其传递给window.location调用中使用的URL(形成GET请求)您的表单数据),或者在您告诉浏览器切换页面之前使用javascript设置包含数据输入的cookie。
在第一个解决方案中,您可以使用php的$ _GET global来访问您的表单数据。
在第二个解决方案中,您可以使用javascript在页面加载时重新填充表单(或随意)