我使用了以下代码,
<select class="form-control selection" name="currency">
<option value="">select currency</option>
<option value="AED"<?php echo set_select('currency', 'AED'); ?> >AED</option>
<option value="SAR"<?php echo set_select('currency', 'SAR'); ?> >SAR</option>
<option value="MAD"<?php echo set_select('currency', 'MAD'); ?> >MAD</option>
<option value="TRY"<?php echo set_select('currency', 'TRY'); ?> >TRY</option>
</select>
但不幸的是,在表单验证失败后,它没有显示选定的值。为什么这个基本的set_select()方法不起作用?我已经在其他一些领域中使用过这个并且一切正常
答案 0 :(得分:8)
在使用set_value()
,set_select()
,set_checkbox()
,set_radio()
之前,即使不需要/验证,您也必须将这些字段传递给验证。
答案 1 :(得分:2)
使用CodeIgnIter set_*
表单辅助函数时,只有两种情况:
Form_validation
库。Form_validation
库)。为了使用set_*
辅助函数,不必必须使用表单验证库,但是如果您正在使用验证库,必须至少为该字段设置验证规则。
以下适用于所有set_*
表单帮助程序函数。但我会尝试描述set_select()
的工作原理:
语法: set_select($field = '', $value = '', $default = FALSE)
当您使用set_select()
函数时,CodeIgniter会将_get_validation_object()
函数用于look for the validation object。
_get_validation_object()
会返回object
或FALSE
(如果尚未加载验证)。
当它返回FALSE
时,set_select()
函数搜索$_POST
变量以在数组中找到指定的field
名称,并在以下by checking function argouments中找到例如$value
和$default
,它确定是返回selected="selected"
属性/值还是空字符串''
。
因此,它可以在不使用表单验证库的情况下工作。
但是如果之前加载了验证库,则set_select()
函数will pass the arguments加载到Form_validation::set_select()
方法,并返回结果。
在Form_validation
类中,有一个名为_field_data
的私有属性,它是一个包含所有字段名称/值的数组(您设置的那些他们的验证规则)。
Form_validation::set_select()
方法检查field
数组中是否存在_field_data
,并在失败时返回空字符串。
_field_data
数组is populated by验证set_rules()
方法。
因此,如果您使用的是验证库,则必须至少为field
设置一个验证规则,以使set_select()
表单帮助程序功能正常工作。
这就是为什么你无法让它发挥作用。
我希望这个答案有助于更好地理解set_*
函数。
答案 2 :(得分:1)
试试这个:
修改表单助手中的set_select
函数:
if (count($_POST) === 0)
{
return ' selected="selected"';
}
到
if (count($_POST) === 0)
{
if ($default)
{
return ' selected="selected"';
}
else
{
return '';
}
}
答案 3 :(得分:1)
正如他们所说,只有在验证这些字段时,codeigniter set select才有效。如果不需要那些字段,则不需要重新填充