【问题标题】:how to repopulating a dropdown in codeigniter after form validation fails?表单验证失败后如何在codeigniter中重新填充下拉列表?
【发布时间】:2013-02-28 09:34:29
【问题描述】:
<select style="width:25%;" name='state' <?php if(form_error('state') != '') {  echo 'id=error'; } ?>>
<option value=''>State</option>
 <?php  foreach($states->result() as $row)
 {
 echo "<option value='$row->state_name'>". $row->state_name."</option>";
 }  ?>
</select>

嗨,我在上面的代码中遇到了问题,请帮助我, set_value 对我不起作用,表单验证失败后下拉菜单未填充,提前致谢 或

做这样的事情,这里的目标是隐藏的价值。现在如何将目标值设置为下拉值(选项值)

  <script>
    window.onload = function (){
    target=document.getElementById('target').value;
        if(target.length!=''){
   // document.getElementByName('state').value=target;
        }
    }
    </script>

【问题讨论】:

  • 您可能需要重新执行表单验证失败的查询。

标签: php codeigniter


【解决方案1】:
 <option value="<?= $row->state_name ?>" ><?= $row->state_name ?></option>

【讨论】:

    【解决方案2】:

    您应该使用set_select(),而不是set_value()。除非您的表单验证根本没有触发..

    <select style="width:25%;" name='state' <?php if(form_error('state') != '') {  echo 'id=error'; } ?>>
    <option value=''>State</option>
     <?php  foreach($states->result() as $row)
     {
     echo '<option value="$row->state_name" ' . set_select('state', $row->state_name) . '>'. $row->state_name."</option>";
     }  ?>
    </select>
    

    如果这仍然不起作用,请告诉我,这可能与表单验证未触发有关(除非 id="error" 正在显示)。

    【讨论】:

    • 我们可以使用javascript,通过隐藏输入类型并将隐藏值设置为选定值
    【解决方案3】:

    根据手册:

    <select name="myselect">
            <option value="one" <?php echo  set_select('myselect', 'one', TRUE); ?> >One</option>
            <option value="two" <?php echo  set_select('myselect', 'two'); ?> >Two</option>
            <option value="three" <?php echo  set_select('myselect', 'three'); ?> >Three</option>
    </select>
    

    你的情况

    <select style="width:25%;" name='state' <?php if(form_error('state') != '') {  echo 'id=error'; } ?>>
    <option value=''>State</option>
     <?php  foreach($states->result() as $row)
     {
     echo "<option value='$row->state_name' " . set_select('state', $row->state_name) . " >". $row->state_name."</option>";
     }  ?>
    
    </select>
    

    [更新]

    <select style="width:25%;" name='state' <?php if(form_error('state') != '') {  echo 'id=error'; } ?>>
        <option value=''>State</option>
         <?php  
    $defaultvalue = 'Nigeria'; //Please set default value here when nothing is selected before submit - change Nigeria
    foreach($states->result() as $row)
         {
         echo "<option value='$row->state_name' " . set_select('state', $row->state_name, ((!isset(set_select('state', $row->state_name)) &&  ($row->state_name == $defaultvalue) ) ? TRUE : FALSE )) . " >". $row->state_name."</option>";
         }  ?>
    
    
    </select>
    

    如果您不想设置默认值,只需从 set_select 中删除 TRUE

    如果您使用菜单,此功能允许您显示所选的菜单项。第一个参数必须包含选择菜单的名称,第二个参数必须包含每个项目的值,第三个(可选)参数允许您将项目设置为默认值(使用布尔值 TRUE/FALSE)。

    【讨论】:

    • 你不能在循环中添加TRUE标志,否则它会尝试将每个选项都指定为默认值。
    • 剂量工作老兄。下拉列表中的最后一个值总是被选中。@jornsen
    • 我知道为什么了。我刚刚更新了我的答案。如果要设置默认值,可以取出 TRUE 标志(第三个参数)或使用第二个示例。抱歉,我无法进行测试,因为我没有足够的信息,但这应该可以解决问题或让您有一个良好的开端。
    【解决方案4】:

    如果您使用表单助手功能,您可以执行以下操作。

    form_dropdown('name', $options, set_value('name', 'default'))

    set_value 如果上次提交了带有“名称”的帖子,将选择选项值。如果没有,它将使用“默认”值设置它。

    【讨论】:

      【解决方案5】:
          <select style="width:25%;" name='state' <?php if(form_error('state') != '') {  echo 'id=error'; } ?>>
          <option value=''>State</option>
           <?php  foreach($states->result() as $row)
           {
           echo "<option value='$row->state_name' " . set_select('state', $row->state_name) . " >". $row->state_name."</option>";
           }  ?>
      
          </select>
      

      这对我有用。感谢@jornsen 的回答。

      【讨论】:

        【解决方案6】:

        为什么不直接使用 post 值?

        echo form_dropdown('name', $options, $this->input->post('name'));
        

        【讨论】:

          【解决方案7】:

          这里我们有一个更好的方法来在 Codeigniter 中运行 FALSE 表单验证后填充选择值。这是代码片段。

          以下是我的控制器。

          function index() {
              $this->load->view('welcome_message');
          }
          
          function form_validation() {
              $this->load->library('form_validation');
              $this->form_validation->set_rules('name', 'Name', 'trim|required');
              $this->form_validation->set_rules('gender', 'Gender', 'trim|callback_check_if_gender_selected');
          
              if ($this->form_validation->run() == FALSE) {
                  $this->index();
              } else {
                  $this->load->view('validation_passed');
              }
          }
          
          function check_if_gender_selected($value) {
              if ($value == "0") {
                  $this->form_validation->set_message('check_if_gender_selected', 'Please Select Gender');
                  return FALSE;
              } else {
                  return TRUE;
              }
          }
          

          我的观点

          1. 表单视图 -(注意:我尝试粘贴我的代码,但粘贴时出现问题,所以我在这里证明我的代码图片。点击图片可以更好地查看代码。)

          验证通过视图

          Welcome Validation Passed.
          
          <?php echo "<br />" . "Name Value = " . set_value('name') . "<br />"; ?>
          <?php echo "Gender Value = " . set_value('gender'); ?>
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-30
            • 1970-01-01
            • 2010-11-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-11
            • 1970-01-01
            相关资源
            最近更新 更多