Php 代码点火器设置\选择post后不重新填充
我在CodeIgniter中创建了一个选择框。当我从数据库中取出值时,表单填充没有问题。但是在我提交表单之后,选择框被重置为零 这是我的密码: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; ?>"&
<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();