我有这个代码:
<?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'];
}