0

我有一个包含 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>';
4

2 回答 2

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”得到保存值的回显。

希望对你有帮助

于 2013-03-28T11:11:37.310 回答
0

粗略猜测您的 if 条件未返回 true,

尝试检查两个变量的值。

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

if($session_d == sprintf("%02d", $name)){
    $session = 'selected';
}
$dropdown .= '<option value="'.sprintf("%02d", $name).'" selected="'.$session.'">'.sprintf("%02d", $name).'</option>';
于 2013-03-28T11:08:05.403 回答