codeigniter set_select无法从会话中获取数据

时间:2014-08-13 04:48:44

标签: php codeigniter

我试图从我的会话中发布的标题数据中发布一个值。其他输入字段正在工作,除了select,单选按钮,复选框功能没有显示值。

控制器

function index(){

    $data = $this->get_data_from_session();
    $this->load->view('edit_profile', $data);
}

function get_data_from_post(){
    $data['title']          = $this->input->post('title', TRUE);
    $data['firstname']      = ucwords(strtolower($this->input->post('firstname', TRUE)));
    return $data;
}

function get_data_from_session(){
    $data['title'] = $this->session->userdata('title');
    $data['firstname'] = $this->session->userdata('firstname');
    return $data;
}

function update(){
    $this->form_validation->set_rules('title', 'Title', 'required');
    $this->form_validation->set_rules('firstname', 'First Name', 'trim|required|min_length[2]|xss_clean');
    if ($this->form_validation->run($this) == FALSE){
        $data = $this->get_data_from_post();
        $this->load->view('edit_profile',$data);
    }else{
        //update db         
    }
}

查看文件(edit_profile.php)

<?php echo form_open('update'); ?>
<select name="title" class="form-control">
   <option value="" <?php echo set_select('title', ''); ?> >Title</option>
   <option value="Dr" <?php echo set_select('title', 'Dr'); ?> >Dr</option>
   <option value="Mr" <?php echo set_select('title', 'Mr'); ?> >Mr</option>
   <option value="Mrs" <?php echo set_select('title', 'Mrs'); ?> >Mrs</option>
   <option value="Ms" <?php echo set_select('title', 'Ms'); ?> >Ms</option>
</select>

<input type="text" class="form-control" id="fname" placeholder="* First Name" name="firstname" value="<?php echo $firstname; ?>" autofocus autocomplete="off">
<button type="submit" class="btn btn-primary">UPDATE INFORMATION</button>
<?php echo form_close(); ?>

firstname显示值,但标题不显示。 任何人都可以帮我解决这个问题吗?提前谢谢。

4 个答案:

答案 0 :(得分:0)

if ( ! function_exists('set_select'))
{
function set_select($field = '', $value = '', $default = FALSE)
{
    $OBJ =& _get_validation_object();

    if ($OBJ === FALSE)
    {
        if ( ! isset($_POST[$field]))
        {
            if (count($_POST) === 0 AND $default == TRUE)
            {
                return ' selected="selected"';
            }
            return '';
        }

        $field = $_POST[$field];

        if (is_array($field))
        {
            if ( ! in_array($value, $field))
            {
                return '';
            }
        }
        else
        {
            if (($field == '' OR $value == '') OR ($field != $value))
            {
                return '';
            }
        }

        return ' selected="selected"';
    }

    return $OBJ->set_select($field, $value, $default);
}
}

这是CI set_select函数,它希望$ field提供post方法。在这里你不是,你是通过会议提供的。

答案 1 :(得分:0)

第一个名称显示您正在使用value="<?php echo $firstname; ?>"而不是value="<?php echo set_value('firstname'); ?>"。输入字段的.Set_value直接来自post,相当于set_select(select字段)。现在检查firstname是否使用set_value()。

答案 2 :(得分:0)

问题解决了:) 我只是包含一些代码

<option value="Mr" <?php echo set_select('title', 'Mr', ($title == 'Mr')); ?> >Mr</option>
<option value="Mrs" <?php echo set_select('title', 'Mrs', ($title == 'Mrs')); ?> >Mrs</option>

这是我在set_select中包含的内容,它也适用于单选按钮。

, ($title == 'Mr')

答案 3 :(得分:0)

或者你也可以这样做。(因为你正在回应上面第一个名字的变量)

<?php echo form_open('update'); ?>
<select name="title" class="form-control">
   <option value="" <?php echo  $title=='' ? 'selected="selected"' : '';?> >Title</option>
   <option value="Dr" <?php echo $title=='Dr' ? 'selected="selected"' : '';?> >Dr</option>
   <option value="Mr" <?php echo $title=='Mr' ? 'selected="selected"' : '';?> >Mr</option>
   <option value="Mrs" <?php echo $title=='Mrs' ? 'selected="selected"' : '';?> >Mrs</option>
   <option value="Ms" <?php echo $title=='Ms' ? 'selected="selected"' : '';?> >Ms</option>
</select>

<input type="text" class="form-control" id="fname" placeholder="* First Name" name="firstname" value="<?php echo $firstname; ?>" autofocus autocomplete="off">
<button type="submit" class="btn btn-primary">UPDATE INFORMATION</button>
<?php echo form_close(); ?>