丢失表格数据

时间:2014-01-07 16:13:43

标签: php forms back

我想在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;
}

在两种方式中我都会丢失数据。我怎样才能做得更好?

3 个答案:

答案 0 :(得分:2)

这对我有用,并且需要包含ob_start();(在下面的PHP中),否则会抛出错误,例如:

  

PHP警告:无法修改标头信息 - 已经由(输出已开始)

发送的标头

完全按照所示使用以下内容,然后修改以适应以后。

使用 Sessions 是达到此目的的一种方法。如果填充,每个字段将重新出现在输入框中。

HTML表单(form.php)

<?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(submitted.php)

<?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在页面加载时重新填充表单(或随意)