2011-10-27 85 views

回答

1

由於繪製壓延機的功能是

function draw_calendar($month,$year){ 

你必須提供$month並在下一/上一環節$year,例如

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

單擊此鏈接時,此數據可在$_GET中找到。你不想unsanitized數據,所以你把它拿來像這樣在您的日曆腳本的頂部:

$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) 
     ) 
    ) 
); 

過濾功能將確保我們得到1和12,以及2010年和2015年之間的年間的一個月(相應調整或者按照您認爲合適的方式刪除選項)。如果通過的號碼不在該範圍內(或者沒有鏈接被點擊),我們將爲他們獲得false,這意味着我們將不得不設置理智默認值,例如,

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

這將既可以使用傳遞給腳本的有效值或無效值的情況下,一年和/或月設置爲當前年份和/或月份。

現在畫的日曆:

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

對於下一/上一鏈接,您可以手動檢查月份是否是12或1,然後增加/相應減少當年或使用DateTime對象

$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)

另一種選擇是,以目前的月和年在會話中存儲,然後就甲肝e下一個/上一個鏈接,無需年份和月份,而只是像+1和-1這樣的來回。但是,你沒有直接的方式跳到某個月。

這就是它的全部。

+0

「INPUT_GET」後是否缺少逗號? –

+0

@Jared是的,謝謝。固定。隨時編輯任何其他小錯別字 – Gordon

相關問題