CodeIgniter set_select在帖子后没有重新填充

时间:2012-02-21 17:11:00

标签: php validation codeigniter

我在CodeIgniter中创建了一个选择框。当我从数据库中拉出值时,表单填充没问题。但在我提交表单后,选择框将重置为零。

这是我的代码:

<select name="week[tuesday][startam]" id="" class="small">
    <?php for( $i = 0; $i < 24; $i=$i + 0.25 ):?>
           <option value="<?php echo $i; ?>"<?php echo set_select('week[tuesday][startam]', $i, ($i==(float)$model_week['tuesday']['startam'])); ?>><?php printf('%02d:%02d', floor($i), ( ($i-floor($i))*60 ) ); ?></option>
    <?php endfor; ?>
</select>

我想知道问题是set_select()是将$_POST[week][tuesday][startam]值(字符串)与$i(浮点数)进行比较。但是将$i转换为字符串似乎没有什么区别。

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

感谢@chaft的评论,我再次查看了我的验证规则,发现了我担心丢失的字段。我将它们添加到规则集中,现在一切都按预期工作。所以,对于我发布的上述代码,我有:

$validation_rules = array(
    array(
        'field' => 'week[tuesday][startam]',
        'label' => 'Tuesday morning start',
        'rules' => 'trim'
    )
)
$this->form_validation->set_rules( $validation_rules );
$is_valid = $this->form_validation->run();

答案 1 :(得分:0)

可能因为在你提交之后,$ model_week ['tuesday'] ['startam']没有开始值,因此没有set_select将第三个参数设置为TRUE

检查$ _POST,如果设置,则将值设置为发布值;

if($_POST){
    $model_week['tuesday']['startam']=$_POST['week']['tuesday']['startam'];
}else{
    $model_week['tuesday']['startam']=5;//or initial db value
}

    <select name="week[tuesday][startam]" id="" class="small">
        <?php for( $i = 0; $i < 24; $i=$i + 0.25 ):?>
               <option value="<?php echo $i; ?>"<?php echo set_select('week[tuesday][startam]', $i, "FALSE"); ?>><?php printf('%02d:%02d', floor($i), ( ($i-floor($i))*60 ) ); ?></option>
        <?php endfor; ?>
    </select>

^看看你是否可以让代码拥有除00:00以外的选定值

你做不到。因为如果没有1 set_selected选择第三个参数为TRUE,你将永远不会选择一个选项,无论是在默认页面加载还是在表单提交之后。


这是一个快速而又肮脏的例子:

public function index(){
    if($_POST){
        $model_week['tuesday']['startam']=$_POST['week']['tuesday']['startam'];
    }else{
        $model_week['tuesday']['startam']=5;//would be the default value
    }
?>
<form action="" method="POST" accept-charset="utf-8">
    <select name="week[tuesday][startam]" id="" class="small">
        <?php for( $i = 0; $i < 24; $i=$i + 0.25 ):?>
            <option value="<?php echo $i; ?>"
                <?php echo set_select('week[tuesday][startam]', $i, ($i==(float)$model_week['tuesday']['startam'])); ?>>
                <?php printf('%02d:%02d', floor($i), ( ($i-floor($i))*60 ) ); ?>
            </option>
        <?php endfor; ?>
    </select>
    <input type="submit" name="some_name" value="rrrr" id="some_name">
    </form>
<?php
}

答案 2 :(得分:0)

我遇到了同样的问题,就像JasonC所做的那样,验证了表单的工作原理。我有两个字段,但只有1个在发布时正确设置。我没想到表单验证会导致这样的问题。感谢chaft!