我在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
转换为字符串似乎没有什么区别。
有什么想法吗?
答案 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!