设置选择codeigniter中下拉菜单的值

时间:2018-03-14 15:21:30

标签: php html codeigniter dropdown selected

我知道如果它是一个输入控件,如何设置插入值。

示例:

<input type="text" name="fullname" value="<?php echo isset($_SESSION['regData']['fullname']) ? set_value('fullname', $_SESSION['regData']['fullname']) : set_value('fullname'); ?>">

此代码仍会在提交按钮后显示您插入的值。但是我应该如何将其应用于dropdown控件?

我试图这样做,但它不起作用:

<select name="gender" class="form-control">
    <?php

    if(!empty($genders)){
        foreach ($genders as $row) {
            echo '<option value="'.$row['id'].'"';

            if($row['id'] == $_SESSION['regData']['gender']){
                echo set_select('gender', $_SESSION['regData']['gender']);
            } else {
                echo set_select('gender', $row['id']);
            }

            echo '>'.$row['gender_title'].'</option>';
        }
    }

    ?>
</select>

应用它的正确方法是什么?谢谢。

2 个答案:

答案 0 :(得分:0)

set_select检查$_POST数组中的输入值。

为了使用会话存储,您可以在application/helpers目录中编写以下帮助程序。

<强> form_extras.php

if ( ! function_exists('set_select_session'))
{
   function set_select_session($field, $sessionKeyPath, $value = '', $default = FALSE)
   {
      $CI =& get_instance();
      $sessionPart = $CI->session->userdata();
      foreach($sessionKeyPath as $key) {
         $sessionPart = $sessionPart[$key];
      }

      if ($sessionPart[$field] == $value) {
        return 'selected';
      }
      return set_select($field, $value, $default);
   }
}

加载

$this->load->helper('form_extras');

然后在您的视图中使用它。

<select name="gender" class="form-control">
    <?php
    if(!empty($genders)){
        foreach ($genders as $row) {
            echo '<option value="'.$row['id'].'"';

            echo set_select_session('gender', ['regData'], $row['id']);

            echo '>'.$row['gender_title'].'</option>';
        }
    }
    ?>
</select>

否则,直接在视图中执行就可以了。

    

if(!empty($genders)){
    foreach ($genders as $row) {
        echo '<option value="'.$row['id'].'"';

        if($row['id'] == $_SESSION['regData']['gender']){
            echo 'selected';
        } else {
            echo set_select('gender', $row['id']);
        }

        echo '>'.$row['gender_title'].'</option>';
    }
}

?>

答案 1 :(得分:0)

我找到了一个诀窍。如果form_validation->run()失败,我从控制器设置了一个变量到性别。

if($this->form_validation->run() == TRUE){
    // Other statement goes here
} else {
    $this->data['gender'] = TRUE;
}

在我看来,我这样做:

<select name="gender" class="form-control">
    <?php
    if(!empty($genders)){
        foreach ($genders as $row) {

            echo '<option value="'.$row['id'].'"';

            if(isset($gender)){
                echo set_select('gender', $row['id']);
            } else {
                if(isset($_SESSION['regData']['gender']) && $_SESSION['regData']['gender'] == $row['id']){
                    echo 'selected';
                }
            }

            echo '>'.$row['gender_title'].'</option>';
        }
    }
    ?>
</select>

因此,当提交表单并抛出错误,而不是读取会话的值时,它将根据用户选择读取值。