2011-10-27 14 views

答えて

1

カレンダーを描画する機能を使用すると、例えば、次/前のリンクで$month$yearを供給する必要が

function draw_calendar($month,$year){ 

あるので、

/calendar.php?month=12&year=2011 

このデータは、そのようなリンクがクリックされたときに$_GETで利用可能です。あなたはunsanitizedデータをたくないので、あなたがあなたのカレンダースクリプトの先頭に、このようにそれをフェッチ:フィルタ機能は、我々は1と12と2010年と2015年の間に年間の月を得ることを確認します

$input = filter_input_array(
    INPUT_GET, 
    array(
     'month' => array(
      'filter' => FILTER_VALIDATE_INT, 
      'options' => array('min_range' => 1, 'max_range' => 12) 
     ), 
     'year' => array(
      'filter' => FILTER_VALIDATE_INT, 
      'options' => array('min_range' => 2010, 'max_range' => 2015) 
     ) 
    ) 
); 

(に応じて調整適切に表示されるようにオプションを削除してください)。渡された数値がその範囲内にない(またはリンクがまだクリックされていない)場合は、falseが返されます。つまり、デフォルト値を設定する必要があります。

$input['year'] = $input['year'] ?: date('Y'); 
$input['month'] = $input['month'] ?: date('n'); 

これはスクリプトに渡された有効な値を使用するか、無効な値の場合には、現在の年および/または月に年および/または月を設定しますか。

今カレンダー描く:あなたは手動月は12または1であるかどうかを確認してから増加/に応じて年を低下させたりDateTimeオブジェクトを使用することができ、次/前のリンクについては

echo draw_calendar($input['month'], $input['year']); 

$dateTime = new DateTime; 
$dateTime->setDate($input['year'], $input['month'], 1)); 
printf(
    '<a href="/calendar.php?month=%d&amp;year=%d">Next</a>' . 
    '<a href="/calendar.php?month=%d&amp;year=%d">Previous</a>', 
    $dateTime->modify('-1 month')->format('n'), 
    $dateTime->format('Y'), 
    $dateTime->modify('+2 month')->format('n'), 
    $dateTime->format('Y') 
); 

demo (slightly abridged)

別のオプションは、セッション中に現在の月と年を格納することと、そしてちょうど肝炎う次の/前のリンクは年と月がなく、ちょうど前後に行くために+1や-1のようなものです。しかし、あなたはある月にジャンプする直接の方法はありません。

これだけです。

+0

'INPUT_GET'の後にコンマがありませんか? –

+0

@ Jaredはい、ありがとうございます。一定。他のマイナーなタイプミスを自由に編集する – Gordon

関連する問題