PHP $ _SESSION使用表单来增加/减少日期值,刷新后保持值

时间:2012-08-07 08:04:59

标签: php session post refresh

我有这段代码:

<?php
 if (isset($_POST['decrease_date'])) {
  $monday_value = ($_SESSION['sess_mon'] = strftime("%Y-%m-%d", strtotime("{$_SESSION['sess_mon']} -1 day")) );
 }
 if (isset($_POST['increase_date'])) {
  $monday_value = ($_SESSION['sess_mon'] = strftime("%Y-%m-%d", strtotime("{$_SESSION['sess_mon']} +1 day")) );
 }
 else {
  $monday_value = ($_SESSION['sess_mon'] = date('Y-m-d', strtotime('Monday this week')) );
 }
?>

<form action='absence.php' method='post'>
 <input type="hidden" name="decrease_date"/>
 <input type='submit' value='Previous'>
</form>

<form action='absence.php' method='post'>
 <input type="hidden" name="increase_date"/>
 <input type='submit' value='Next'>
</form>

正如您所看到的,我正在尝试使用表单和会话来增加/减少日期并将其存储在变量中。

现在我想刷新页面,但保留刷新请求之前处于活动状态的会话值。现在它会根据提交的形式减少或增加,因为我没有PRG模式。

我可以将表单提交发送到另一个文件,但我需要

else {
 $monday_value = ($_SESSION['sess_mon'] = date('Y-m-d', strtotime('Monday this week')) );
 }

因为每当用户首次进入页面时,该值应显示为“本周一”。

你会如何推荐我去做?

2 个答案:

答案 0 :(得分:1)

也可以检查$_SESSION['sess_mon']

if( !empty( $_SESSION['sess_mon'] ) )
{

    if ( !empty( $_POST['decrease_date'] ) )
    {
        $monday_value = $_SESSION['sess_mon'] = strftime("%Y-%m-%d", strtotime("{$_SESSION['sess_mon']} -1 day") );
    }
    elseif ( !empty( $_POST['increase_date'] ) )
    {
        $monday_value = $_SESSION['sess_mon'] = strftime("%Y-%m-%d", strtotime("{$_SESSION['sess_mon']} +1 day") );
    }
}

// EDIT: new if-branch instead of else
if( empty( $monday_value ) )
{
    $monday_value = $_SESSION['sess_mon'] = date('Y-m-d', strtotime('Monday this week') );
}

答案 1 :(得分:1)

您应该在增加/减少日期后尝试重定向页面:

 if (isset($_POST['decrease_date'])) {
  $monday_value = ($_SESSION['sess_mon'] = strftime("%Y-%m-%d", strtotime("{$_SESSION['sess_mon']} -1 day")) );
  header("Location: http://" . $_SERVER['SERVER_NAME'] . "/absence.php");
 }

这样,刷新页面时不会重新发布。

此外,您应该将检查分开以查看会话变量是否是从其他if设置的,因为否则每次请求都会重置该值,也不会增加或减少。

if(!isset($_SESSION['sess_mon'])) {
  $monday_value = ($_SESSION['sess_mon'] = date('Y-m-d', strtotime('Monday this week')) );
 }
 else {
  $monday_value = $_SESSION['sess_mon'];
 }