0

我有这个代码:

<?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')) );
 }

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

你会建议我怎么做?

4

2 回答 2

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'];
 }
于 2012-08-07T09:09:21.277 回答
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') );
}
于 2012-08-07T08:13:51.773 回答