我有这段代码:
<?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')) );
}
因为每当用户首次进入页面时,该值应显示为“本周一”。
你会如何推荐我去做?
答案 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'];
}