Php 代码点火器设置\选择post后不重新填充

Php 代码点火器设置\选择post后不重新填充,php,validation,codeigniter,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; ?>"&

我在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>


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

检查$u POST,如果设置,则将该值设置为POST值

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



感谢@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();

我遇到了同样的问题,就像JasonC所做的那样,验证表单是否有效。我有2个字段,但在发布时只有1个字段被正确设置。我没有想到表单验证会导致这样的问题。感谢查特

你能发布你的控制器吗?至少是表单验证部分。我想你了解了一些事情:我不认为我已经将它们添加到规则数组中-将添加并重新测试。现在添加到验证规则中,它似乎工作正常。问题解决了。谢谢你的建议,@chaft@JasonC我们能看看吗?我很好奇form_验证是如何解决这个问题的。。。我可能对正在发生的事情有严重的误解,希望能学到一些东西。@stormdrain您必须使用验证规则重新填充表单字段,以便
设置一些可以工作的东西。不是很明显,但仍然是。您可以在这里了解更多信息:它不需要设置为true,因为第三个参数仅在不提交时使用。提交后,默认值是什么并不重要,因为您只是尝试使用刚刚提交的值填充表单,而不是使用默认值。那么如何使用提交的值填充表单呢?魔术否,您有一个选项值设置为“已选定”,且值已提交!set_selected不仅用于默认值,您还可以使用它来设置要选择的值。是的,没错,但是您所说的第三个参数仅用于在不提交时设置默认值。表单帮助程序通过将postdata与
set\u select()
的第二个参数进行比较,根据您刚刚提交的内容设置所选的
。第三个参数是可选的,助手仍然可以在不使用magic的情况下工作。我想说的是,如果没有任何选项“set_select”将第三个参数设置为TRUE,则绝对不会选择任何选项。很简单:如果你想在提交后选择一个选项,其中一个选项必须是TRUE。使用我输入的最后一位代码创建一个虚拟函数,转到页面,提交,然后您将看到所选择的提交值。在表单提交之后,您不必使用第三个参数来让助手工作。因此,即使所有第三个参数都为false,它在提交后仍然可以正常工作。
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
}
$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();