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


PHP $_SESSION use forms to increase/decrease date values keep value after 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')) );
 }

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

你会建议我怎么做?

也请检查$_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') );
}

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

 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'];
 }