【问题标题】:CodeIgniter select_value in form_dropdownform_dropdown 中的 CodeIgniter 选择值
【发布时间】:2013-01-21 19:40:13
【问题描述】:

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

这是我的代码

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

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

【问题讨论】:

    标签: php codeigniter drop-down-menu


    【解决方案1】:

    这样做效果很好:

    <?php
    $selected = ($this->input->post('gender')) ? $this->input->post('gender') : 'M';  
    $gender = array("M" => "Male", "F" => "Female");
    echo form_dropdown('gender', $gender, $selected);
    ?>
    

    【讨论】:

      【解决方案2】:

      删除set_value('gender')

      如:

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

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

      【讨论】:

        【解决方案3】:

        如果您想对特定字段使用 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)); ?>
        

        还要注意,set value 返回选项数组的索引('M' 或 'F'),而不是显示的值('Male' 或 'Female')。对于包含两个性别的更多选项的列表,我使用包含选项的数据库表的主键,以确保唯一性。

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

        【讨论】:

          【解决方案4】:

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

          CodeIgniter documentation

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

          【讨论】:

          • 我试过这个&lt;?php echo form_dropdown('gender', $gender, set_select('gender')); ?&gt; 还是不行
          • 对不起,set_select函数适用于in-HTML代码,如果你想通过form_dropdown函数设置默认值,请使用第三个参数。
          • 您可以阅读上述文档的form_dropdown 部分。他们使用$shirts_on_sale 数组或'large' 值来设置form_dropdown 的默认值
          【解决方案5】:

          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
                  }
              }
          }
          ?>
          

          【讨论】:

            【解决方案6】:

            您可能没有验证表单。

            使用这个:

            $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'));?>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-11-27
              • 2011-10-11
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多