3

我的表单中有一个下拉字段,当我点击提交时,表单会通过验证,如果发生错误,则返回所有值。这项工作期待我的下拉菜单,我在下拉菜单中有 set_value 但它不起作用:(

这是我的代码

<?php echo form_dropdown('gender', $gender, set_value('gender')); ?>

我做错了什么或错过了什么?

4

6 回答 6

4

这样做效果很好:

<?php
$selected = ($this->input->post('gender')) ? $this->input->post('gender') : 'M';  
$gender = array("M" => "Male", "F" => "Female");
echo form_dropdown('gender', $gender, $selected);
?>
于 2013-01-21T20:12:14.630 回答
1

如果要对特定字段使用 set_value,则需要为该字段设置验证规则。没有验证规则使 set_value 返回 NULL(或我没有检查的空字符串)

在我的控制器中,我添加了

$this->form_validation->set_rules('gender','Gender','required');

在我的 form_validation->run 行之前。然后我可以使用你的语法:

<?php echo form_dropdown('gender', $gender, set_value('gender')); ?>

我发现 set_value() 有效,而不是 set_select()。请记住,您可以向 set_value 添加第二个参数,以在表单尚未验证时使用默认的男性或女性。我从后端数据库中提取现有值,然后将其传递进来:

<?php echo form_dropdown('gender', $gender, set_value('gender',$persons_gender_from_db)); ?>

另请注意,设置值返回选项数组的索引(“M”或“F”),而不是显示的值(“男性”或“女性”)。对于包含两个性别的更多选项的列表,我使用包含选项的数据库表的主键,以确保唯一性。

虽然我想知道什么时候我会第一次被要求将“其他”添加到性别选择列表中......

于 2014-12-14T22:57:11.480 回答
1

去除set_value('gender')

如:

<?php echo form_dropdown('gender', $gender, 'male'); ?>

正如 Trung 所提到的,您可以将数组作为第三个参数传递给多个选择。

于 2013-01-21T20:06:39.347 回答
0

使用form_dropdown,您必须使用set_select而不是set_value

CodeIgniter 文档

如果要在 上设置默认值,请将form_dropdown包含默认值的数组作为第三个参数传递给form_dropdown函数。

于 2013-01-21T19:51:43.210 回答
0

可能您没有验证表单。

用这个:

$this-> form_validation-> set_rules ('gender', 'Label', 'xss_clean');

要使用:

<? php echo form_dropdown ('gender', $ gender, set_value ('gender'));?>

如果不是,请使用表单验证,请执行以下操作:

<? php echo form_dropdown ('gender', $ gender, $ this-> input-> post ('gender'));?>
于 2013-10-22T17:59:57.210 回答
0

CodeIgniter 具有set_checkbox()并且set_radio()您需要使用它来代替set_value()

但是set_checkboxset_radio一些问题,并且似乎无法处理旨在处理创建和更新表单的表单。

这是修复。您可以将此代码放在帮助程序中或扩展 form_validation 类。

<?php echo form_dropdown('gender', $gender, set_it('gender','M',$person)); ?>

<?php
/*   $field is the field you're setting
 *   $value is the "selected" value from the previous form post
 *   $defaults is an object containing defaults in case the form is being used to create a new record. It could be filled with null values, or actual default values if you need that. 
 */
function set_it($field, $value, $defaults = null)
{
    // first, check to see if the form element was POSTed
    if (isset($_POST[$field]))
    {
        // does it match the value we provided?
        if ($_POST[$field] == $value)
        {
            // yes, so set the checkbox
            echo "checked='checked'"; // valid for both checkboxes and radio buttons
        }
    }
    // There was no POST, so check to see if the provided defaults contains our field
    elseif ( ! is_null($defaults) && isset($defaults->$field))
    {
        // does it match the value we provided?
        if ($defaults->$field == $value)
        {
            // yes, so set the checkbox
            echo "checked='checked'"; // valid for both checkboxes and radio buttons
        }
    }
}
?>
于 2013-10-10T20:42:36.990 回答