2009-10-28 85 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