PHP - 动态填充的选择下拉列表中的预选/保存选项

时间:2013-03-28 10:59:04

标签: php session select option

我有一个下拉框,其中包含1-31天,我想存储/保存用户之前选择的内容,如果他们返回页面。

我生成框的功能是:

public function fetchDDMMYYYYDropdown($select_d,$session_d) {
        $days = range (1, 31);
        $dropdown .=  '<select name="'.$select_d.'">';
        foreach($days as $key=>$name){
            if($session_d==$name){
                $session = 'selected';
            }
            $dropdown .= '<option value="'.sprintf("%02d", $name).'" selected="'.$session.'">'.sprintf("%02d", $name).'</option>';
        }
        $dropdown .=  '</select>';

        return $dropdown;
    }

我的表单在此页面上:

<?php
session_start();
include("includes/func.class.php");

$dob = $func->fetchDDMMYYYYDropdown('dob_d', $_SESSION['dob_d']);
?>
<form action="t35t_send.php" method="get">
<?php echo $dob;?>
<input type="submit" value="send">
</form>

这就是为了保存SESSION变量:

session_start();
$_SESSION['dob_d'] = $_GET['dob_d'];
$dob = $_SESSION['dob_d'];
echo $dob;

我可以告诉$ _SESSION ['dob_d']是正确的并保存,因为我可以在函数和初始表单页面中输出它 - 所以它只是以下哪个一定不能正确但是此时下拉列表框只是重置为第一个值,而不是保存的会话:

if($session_d==$name){
    $session = 'selected';
}
$dropdown .= '<option value="'.sprintf("%02d", $name).'" selected="'.$session.'">'.sprintf("%02d", $name).'</option>';

2 个答案:

答案 0 :(得分:1)

试试这个

function fetchDDMMYYYYDropdown($select_d,$session_d) {

    $days = range (1, 31);
    $dropdown .=  '<select name="'.$select_d.'">';
    foreach($days as $key=>$name){
        if($session_d==$name){

            $session = 'selected = selected';
        }
        else
        {
            $session = '';
        }
        $dropdown .= '<option value="'.sprintf("%02d", $name).'"'.$session.'">'.sprintf("%02d", $name).'</option>';
    }
    $dropdown .=  '</select>';

    return $dropdown;
}

问题是,如果“选项”中存在“已选中”,即使然后选择了值,也会在之前的代码中进行选择..'每个日期都会选择该值。所以很容易显示'31'。 我更改了代码,以便'selected = selected'获得保存值的回显。

希望它可以帮到你

答案 1 :(得分:0)

粗略猜测你的if条件是否没有返回true,

尝试检查两个变量的值。

只是为了确认你可以替换下面的代码并尝试。

if($session_d == sprintf("%02d", $name)){
    $session = 'selected';
}
$dropdown .= '<option value="'.sprintf("%02d", $name).'" selected="'.$session.'">'.sprintf("%02d", $name).'</option>';