2009-10-28 49 views
-1

咖啡和大腦的放棄... ...任何人都可以幫助使這種形式日期下拉功能保留選定月$ _POST ['submit']或isset($在那裏的情況下是一個錯誤/遺漏場等使php的日期下拉功能'粘'

function createMonths($id='month_select', $selected=null) 
{ 
    /*** array of months ***/ 
    $months = array(
      1=>'Jan', 
      2=>'Feb', 
      3=>'Mar', 
      4=>'Apr', 
      5=>'May', 
      6=>'Jun', 
      7=>'Jul', 
      8=>'Aug', 
      9=>'Sep', 
      10=>'Oct', 
      11=>'Nov', 
      12=>'Dec'); 

    /*** current month ***/ 
    $selected = is_null($selected) ? date('m') : $selected; 

    $select = '<select name="'.$id.'" id="'.$id.'">'."\n"; 
    foreach($months as $key=>$mon) 
    { 
     $select .= '<option value="'.str_pad($key, 2, "0", STR_PAD_LEFT).'"'; 
     $select .= ($key==$selected) ? ' selected="selected"' : ''; 
     $select .= ">$mon</option>\n"; 


    } 
    $select .= '</select>'; 
    return $select; 
} 

回答

0

在你有無效表單數據的情況下丟失的),你應該檢查$ _ POST [「month_select」]變量設置,而不是空並創建您的下拉列表中傳遞的值如下:

$selected = (!empty($_POST['month_select'])) ? $_POST['month_select'] : null; 
createMonths('month_select', $selected); 

function createMonths($id='month_select', $selected = null) 
{ 
    /*** array of months ***/ 
    $months = array(
      '01'=>'Jan', 
      '02'=>'Feb', 
      '03'=>'Mar', 
      '04'=>'Apr', 
      '05'=>'May', 
      '06'=>'Jun', 
      '07'=>'Jul', 
      '08'=>'Aug', 
      '09'=>'Sep', 
      '10'=>'Oct', 
      '11'=>'Nov', 
      '12'=>'Dec'); 

    /*** current month ***/ 
    $selected = is_null($selected) ? date('n') : $selected; 

    $select = '<select name="'.$id.'" id="'.$id.'">'."\n"; 
    $select .= "<option value=""></option>\n"; 
    foreach($months as $key => $mon) 
    { 
     $select .= '<option value="'.$key.'"'; 
     $select .= ($key == $selected) ? ' selected="selected"' : ''; 
     $select .= ">$mon</option>\n"; 
    } 
    $select .= '</select>'; 
    return $select; 
} 

我還根據關於date('n')的建議修正了您的createMonths()函數,並將您的數組鍵改爲字符串,因爲這樣可以避免必須填滿你的月份。

+0

由於今天月份被選中默認變量永遠不會是空的沒有? – brainache 2009-10-28 12:45:44

+0

@brainache - 正確的,我剛剛添加了一個空的選項,之後爲他循環了幾個月。不過,這並不一定是個問題,因爲$ _POST的選擇狀態只有在表單已發佈的情況下才有效。如果你想驗證用戶確實已經從列表中選擇了一個選項,而不是簡單地在這種情況下通過* January *,那麼這僅僅是有用的。 – 2009-10-28 12:52:11

+0

爲了簡化,上面的代碼現在從一個空的選定選項開始。在提交表單時,現在將選擇正確的選項(假設選擇了一個)或者默認爲空的選定選項。 – 2009-10-28 12:54:02