PHP发布值在刷新时删除

时间:2014-07-05 12:23:00

标签: php

为什么每次刷新页面时都会丢失所有表单数据?我发布了上一页的数据并使用echo $_POST['test'];它显示了所有内容,当我刷新页面时,没有任何内容被打印出来。

我也尝试过使用会话,但刷新页面时也会覆盖会话。

<?php 
SESSION_START();
$_SESSION['coupons_count'] = $_POST['points'];
$_SESSION['dateofcoupon'] = $_POST['dateofcoupon'];
$_SESSION['timeofcoupon'] = $_POST['timeofcoupon'];
$_SESSION['points'] = $_POST['points'];
$_SESSION['storename'] = $_POST['storename'];
?>
<h2>Coupon Details</h2>
<form id="form1" method="post">
<span style="width:120px;"><strong>Restaurant:</strong></span> <?php echo $_SESSION['storename']; ?>

<strong>Date:</strong> <?php echo $_SESSION['dateofcoupon']; ?>

<strong>Start Time:</strong> <?php echo substr($_SESSION['timeofcoupon'], 0, -10); ?>

<strong>End Time:</strong> <?php echo substr($_SESSION['timeofcoupon'], 8, -2); ?>

<strong>Coupons:</strong> </php echo $_SESSION['points']; ?>

4 个答案:

答案 0 :(得分:2)

你的情景:

1)从$_POST添加空值(没有错误?因为已经定义了索引)

2)您发送表单数据

3)将$_POST个变量保存回会话

4)刷新页面/删除所有$_POST变量

5)再次分配空变量

所以基本上你必须检查$_POST个变量是否存在,只保存:

if (isset($_POST['points'])) {
    $_SESSION['coupons_count'] = $_POST['points'];
}
// repeat for all variables

答案 1 :(得分:0)

这是网络表单的正确行为。您有一个表单,您正在填写值并将其发布到自身,然后如果您将刷新页面,因为您没有再次发布任何值,因此您会看到显示。

如果要在多次刷新期间保持值的持久性,请将表单发布到单独的页面[最简单的解决方案];

就像你可以制作一个页面formdata.php并将其发布到formaction.php。 使用action =&#34; formaction.php&#34;在表单中添加操作标记 然后多次刷新操作页面,您将看到所有变量持久。

答案 2 :(得分:0)

最后,我最终以一种奇怪的方式使用。

if($_POST['points'] != null)
{
$_SESSION['coupons_count'] = $_POST['points'];
$_SESSION['dateofcoupon'] = $_POST['dateofcoupon'];
$_SESSION['timeofcoupon'] = $_POST['timeofcoupon'];
$_SESSION['points'] = $_POST['points'];
$_SESSION['storename'] = $_POST['storename'];
}

我知道,这不是一种专业的方式,但我正在寻找一个快速提示摆脱这个问题。

答案 3 :(得分:0)

我不确定你在抱怨什么。如果您在刷新页面时没有再次发布值(并且您的浏览器应该询问您是否应该再次发送表单),那么您不能指望$ _POST中包含任何值。

无论如何,这可能对你有所帮助:

$pairs = array(
    "coupons_count" => "points",
    "dateofcoupon" => "dateofcoupon",
    "timeofcoupon" => "timeofcoupon",
    "points" => "points",
    "storename" => "storename",
);

foreach ($pairs as $sessionVar => $postVar) {
    if (isset($_POST[$postVar])) $_SESSION[$sessionVar] = $_POST[$postVar];
}

会话变量将被覆盖仅在时定义了相应的$ _POST值。