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 に答える