【问题标题】:Make php date dropdown function 'sticky'使 php 日期下拉功能“粘性”
【发布时间】:2009-10-28 12:20:39
【问题描述】:

咖啡喝光了,大脑已经放弃了…… ...如果出现错误/缺少字段等,任何人都可以帮助使此表单日期下拉功能在 $_POST ['submit'] 或 isset($missing) 上保留所选月份

 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;
}

【问题讨论】:

    标签: php forms function drop-down-menu


    【解决方案1】:

    如果您的表单数据无效,您应该检查 $_POST['month_select'] 变量是否已设置且不为空,并创建下拉列表并传入它的值,如下所示: p>

    $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() 函数,并将您的数组键更改为字符串,因为这样可以避免填充您的月份。

    【讨论】:

    • 因为默认选择了今天的月份,所以变量永远不会为空吗?
    • @brainache - 正确,我只是在为他循环数月之前添加了一个空选项。不过,这不一定是问题,因为 $_POST 上的选择状态仅在表单已发布时才有效。如果您希望验证用户是否确实从列表中选择了一个选项,而不是在这种情况下简单地跳过 January,这只会很有用。
    • 为了简化,上面的代码现在以一个空的选择选项开始。在提交表单时,它现在将选择正确的选项(假设选择了一个),否则默认为空的选项。
    • 好的...感谢您的工作,但这会使用户选择变得粘滞吗?需要 'selected' 为 date('n') cough ;P 直到提交后提交 'selected' 应该是用户选择
    • 它应该是粘性的。如果没有设置 $_POST 变量,该函数将以 $selected = null 开始,然后将 selected 更新为 selected = date('n') 其中,在foreach 循环,应该匹配键并设置 selected="selected"
    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多