第331行的form_helper中的Codeigniter form_下拉列表错误

第331行的form_helper中的Codeigniter form_下拉列表错误,codeigniter,Codeigniter,我是codeigniter的新手,我想使用form_下拉菜单创建一个表单。我已经尝试了很多其他人的想法,但就是做不好。我想使用codeigniter重新创建我的在线酒店预订项目,因为wamp server 2不再支持mysql扩展,我想了解有关使用框架的PHP的更多信息: 这是我的模型: public function room_options() { $query = $this->db->get('room_type');

我是codeigniter的新手,我想使用form_下拉菜单创建一个表单。我已经尝试了很多其他人的想法,但就是做不好。我想使用codeigniter重新创建我的在线酒店预订项目,因为wamp server 2不再支持mysql扩展,我想了解有关使用框架的PHP的更多信息:

这是我的模型:

public function room_options()
        {
            $query = $this->db->get('room_type');

            if($query->num_rows() > 0)
            {
                foreach($query->result() as $row)
                {
                    $data[$row->room_type_id] = $row->room_type_name;
                }
                return $data;
            }
        }

        public function check_rooms($room_type)
        { 
            $this->db->where('room_type_id', $room_type);
            $this->db->where('`room_id` NOT IN (SELECT `room_id` FROM `reservation`)', NULL, FALSE);
            $query = $this->db->get('room');
            var_dump($this->db->queries);

            if($query->num_rows() > 0)
            {
                foreach($query->result() as $row)
                {
                    $data[$row->room_id] = $row->room_name;
                }
                return $data[0];
            }
        }
这是我的控制器:

public function welcome_page($page = 'welcome_page')
{
    if ($this->session->userdata('is_logged_in'))
    {
    if(! file_exists('application/views/'.$page.'.php'))
    {
        show_404();
    }
            $this->load->model('check_availability_model');
            $data['options'] = $this->check_availability_model->room_options();
            $this->load->view('includes/member_header');
            $this->load->view('includes/member_navigation');
    $this->load->view(''.$page, $data);
            $this->load->view('includes/member_footer');
    }
    else
    {
    redirect('member/restricted');
    }
}

public function restricted()
{
    $this->load->view('restricted');
}

public function register($page = 'register')
{
    if(! file_exists('application/views/'.$page.'.php'))
    {
        show_404();
    }
    $this->load->view('includes/header');
    $this->load->view(''.$page);
    $this->load->view('includes/header');
}

    public function check_reservation()
    {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('room_type', 'Room Type', 'required|trim|xss_clean|callback_reserve_credentials');
        $this->form_validation->set_rules('checkin_date', 'Checkin Date', 'required|trim|xss_clean');
        $this->form_validation->set_rules('checkout_date', 'Checkout Date', 'required|trim|xss_clean');

        if($this->form_validation->run()==FALSE)
        {
            $this->load->model('check_availability_model');
            $data['options'] = $this->check_availability_model->room_options();
            $this->load->view('includes/member_header');
            $this->load->view('includes/member_navigation');
    $this->load->view('welcome_page', $data);
            $this->load->view('includes/member_footer');
        }
        else
        {
            redirect('member/reservation_form');
        }
    }

    public function reserve_credentials()
    {
        $this->load->model('check_availability_model');
        if($this->check_availability_model->check_rooms($this->input->post('room_type')))
        {
            return true;
        }
        else
        {
            $this->form_validation->set_message('reserve_credentials', 'The room is not available at this time. Please choose another.');
            return false;
        }
    }

public function reservation_form($page = 'reservation_form')
{
    if ($this->session->userdata('is_logged_in'))
    {
    if(! file_exists('application/views/'.$page.'.php'))
    {
        show_404();
    }
            $this->load->library('subquery');
            $this->load->model('check_availability_model');
            $data['options'] = $this->check_availability_model->check_rooms($this->input->post('room_type'));
            $this->load->view('includes/member_header');
            $this->load->view('includes/member_navigation');
    $this->load->view(''.$page, $data);
            $this->load->view('includes/member_footer');
    }
    else
    {
    redirect('member/restricted');
    }
}
public function check_reservation()
{
     $this->load->library('form_validation');
     $this->form_validation->set_rules('room_type', 'Room Type', 'required|trim|xss_clean|callback_reserve_credentials');
     $this->form_validation->set_rules('checkin_date', 'Checkin Date', 'required|trim|xss_clean');
     $this->form_validation->set_rules('checkout_date', 'Checkout Date', 'required|trim|xss_clean');

     if($this->form_validation->run()==FALSE)
     {
         $this->load->model('check_availability_model');
         $data['options'] = $this->check_availability_model->room_options();
         $this->load->view('includes/member_header');
         $this->load->view('includes/member_navigation');
         $this->load->view('welcome_page', $data);
         $this->load->view('includes/member_footer');
     }
     else
     {
         //so here is the change
         //redirect('member/reservation_form');
         $room_type = $this->reservation_form($this->input->post('room_type'));
     }
   }

public function reservation_form($room_type)//$this->input->post('room_type') can now be read by passing the parameter $room_type
{
    if ($this->session->userdata('is_logged_in'))
    {
    if(! file_exists('application/views/reservation_form.php'))
    {
        show_404();
    }
            $this->load->library('subquery');
            $this->load->model('check_availability_model');
            $data['options'] = $this->check_availability_model->check_rooms();
            $this->load->view('includes/member_header');
            $this->load->view('includes/member_navigation');
    $this->load->view('reservation_form', $data);
            $this->load->view('includes/member_footer');
    }
    else
    {
    redirect('member/restricted');
    }
}
我的看法是:

    <?php echo form_open('member/check_reservation', array('class' => 'form col-md-12 center-block', 'role' => 'search'));?>
    <?php echo form_dropdown('room_name', $options, set_value('room_name'), 'class="form-control input-lg"');?>
    <p></p>
    <?php echo form_submit('register_submit', 'Register', "class='btn btn-primary btn-lg btn-block'");?>
    <p></p>
    <?php echo validation_errors();?>
    <?php echo form_close();?>

您需要在此处返回一个空数组。

尝试以下几项更改。。。不要在模型内部使用post函数,而是将其作为check_rooms上的参数传递

您现在可以在$db->where中使用它

控制器

还应该从模型返回数据数组的第一个索引

return $data[0];
在浏览器中加载时查看页面源,并检查表单值是否正确


希望这有帮助。

经过两天的调试,终于找到了我帖子的答案。因为$this->input->post'room\u type'不能在预订表单上读取,我需要传递变量:

我在控制器上做了一些更改:

public function welcome_page($page = 'welcome_page')
{
    if ($this->session->userdata('is_logged_in'))
    {
    if(! file_exists('application/views/'.$page.'.php'))
    {
        show_404();
    }
            $this->load->model('check_availability_model');
            $data['options'] = $this->check_availability_model->room_options();
            $this->load->view('includes/member_header');
            $this->load->view('includes/member_navigation');
    $this->load->view(''.$page, $data);
            $this->load->view('includes/member_footer');
    }
    else
    {
    redirect('member/restricted');
    }
}

public function restricted()
{
    $this->load->view('restricted');
}

public function register($page = 'register')
{
    if(! file_exists('application/views/'.$page.'.php'))
    {
        show_404();
    }
    $this->load->view('includes/header');
    $this->load->view(''.$page);
    $this->load->view('includes/header');
}

    public function check_reservation()
    {
        $this->load->library('form_validation');
        $this->form_validation->set_rules('room_type', 'Room Type', 'required|trim|xss_clean|callback_reserve_credentials');
        $this->form_validation->set_rules('checkin_date', 'Checkin Date', 'required|trim|xss_clean');
        $this->form_validation->set_rules('checkout_date', 'Checkout Date', 'required|trim|xss_clean');

        if($this->form_validation->run()==FALSE)
        {
            $this->load->model('check_availability_model');
            $data['options'] = $this->check_availability_model->room_options();
            $this->load->view('includes/member_header');
            $this->load->view('includes/member_navigation');
    $this->load->view('welcome_page', $data);
            $this->load->view('includes/member_footer');
        }
        else
        {
            redirect('member/reservation_form');
        }
    }

    public function reserve_credentials()
    {
        $this->load->model('check_availability_model');
        if($this->check_availability_model->check_rooms($this->input->post('room_type')))
        {
            return true;
        }
        else
        {
            $this->form_validation->set_message('reserve_credentials', 'The room is not available at this time. Please choose another.');
            return false;
        }
    }

public function reservation_form($page = 'reservation_form')
{
    if ($this->session->userdata('is_logged_in'))
    {
    if(! file_exists('application/views/'.$page.'.php'))
    {
        show_404();
    }
            $this->load->library('subquery');
            $this->load->model('check_availability_model');
            $data['options'] = $this->check_availability_model->check_rooms($this->input->post('room_type'));
            $this->load->view('includes/member_header');
            $this->load->view('includes/member_navigation');
    $this->load->view(''.$page, $data);
            $this->load->view('includes/member_footer');
    }
    else
    {
    redirect('member/restricted');
    }
}
public function check_reservation()
{
     $this->load->library('form_validation');
     $this->form_validation->set_rules('room_type', 'Room Type', 'required|trim|xss_clean|callback_reserve_credentials');
     $this->form_validation->set_rules('checkin_date', 'Checkin Date', 'required|trim|xss_clean');
     $this->form_validation->set_rules('checkout_date', 'Checkout Date', 'required|trim|xss_clean');

     if($this->form_validation->run()==FALSE)
     {
         $this->load->model('check_availability_model');
         $data['options'] = $this->check_availability_model->room_options();
         $this->load->view('includes/member_header');
         $this->load->view('includes/member_navigation');
         $this->load->view('welcome_page', $data);
         $this->load->view('includes/member_footer');
     }
     else
     {
         //so here is the change
         //redirect('member/reservation_form');
         $room_type = $this->reservation_form($this->input->post('room_type'));
     }
   }

public function reservation_form($room_type)//$this->input->post('room_type') can now be read by passing the parameter $room_type
{
    if ($this->session->userdata('is_logged_in'))
    {
    if(! file_exists('application/views/reservation_form.php'))
    {
        show_404();
    }
            $this->load->library('subquery');
            $this->load->model('check_availability_model');
            $data['options'] = $this->check_availability_model->check_rooms();
            $this->load->view('includes/member_header');
            $this->load->view('includes/member_navigation');
    $this->load->view('reservation_form', $data);
            $this->load->view('includes/member_footer');
    }
    else
    {
    redirect('member/restricted');
    }
}
我的模型还是一样的:

    public function check_rooms()
    {   
        $this->db->where('room_type_id', $this->input->post('room_type'));
        $this->db->where('`room_id` NOT IN (SELECT `room_id` FROM `reservation`)', NULL, FALSE);
        $query = $this->db->get('room');

        if($query->num_rows() > 0)
        {
            foreach($query->result() as $row)
            {
                $data[$row->room_id] = $row->room_name;
            }
            return $data;
        }
        else
        {
            return false;
        }
    }

如果你有比我更好的答案,请随意添加一些建议。我也一直期待着使我的代码尽可能的快捷。再次感谢您:

您确定从数据库中得到了什么吗?在您的模型中,尝试并var_转储数据库结果。是的,我尝试了var_转储。上面的表单显示:0=>string“SELECT*FROM room,其中room\u type\u id=0,room\u id不在SELECT room\u id FROM reservation”length=107。用户将尝试选择房间的类型。然后,它将重定向到我先前发布的另一个视图。因此,这一次,用户将再次选择所选房间类型的房间名称。谢谢你快速回复,克雷格。感谢您提及var_dump函数。这真的很有帮助,不客气。你解决问题了吗?还没有。我将编辑我的帖子来澄清。嗨,谢谢你的回复。我认为我的疑问是错误的。我试着使用var_dump,它说room_typ_id=0,这不应该是0。我忘了告诉你场景:在上一张表格上。用户将尝试选择房间的类型。然后,它将重定向到我先前发布的另一个视图。因此,这一次,用户将再次选择所选房间类型的房间名称。仍然,else不应返回false,因为这将导致函数form_下拉列表崩溃…我应该将其留空还是对else语句进行注释?我尝试在check_reservation controller中回显$this->input->post'room_type'inside else语句,然后它读取回显,但在reservation_form controller中,它没有读取if语句。如何从预订表单控制器传递$this->input->post'room\u type'。
return $data[0];
public function check_reservation()
{
     $this->load->library('form_validation');
     $this->form_validation->set_rules('room_type', 'Room Type', 'required|trim|xss_clean|callback_reserve_credentials');
     $this->form_validation->set_rules('checkin_date', 'Checkin Date', 'required|trim|xss_clean');
     $this->form_validation->set_rules('checkout_date', 'Checkout Date', 'required|trim|xss_clean');

     if($this->form_validation->run()==FALSE)
     {
         $this->load->model('check_availability_model');
         $data['options'] = $this->check_availability_model->room_options();
         $this->load->view('includes/member_header');
         $this->load->view('includes/member_navigation');
         $this->load->view('welcome_page', $data);
         $this->load->view('includes/member_footer');
     }
     else
     {
         //so here is the change
         //redirect('member/reservation_form');
         $room_type = $this->reservation_form($this->input->post('room_type'));
     }
   }

public function reservation_form($room_type)//$this->input->post('room_type') can now be read by passing the parameter $room_type
{
    if ($this->session->userdata('is_logged_in'))
    {
    if(! file_exists('application/views/reservation_form.php'))
    {
        show_404();
    }
            $this->load->library('subquery');
            $this->load->model('check_availability_model');
            $data['options'] = $this->check_availability_model->check_rooms();
            $this->load->view('includes/member_header');
            $this->load->view('includes/member_navigation');
    $this->load->view('reservation_form', $data);
            $this->load->view('includes/member_footer');
    }
    else
    {
    redirect('member/restricted');
    }
}
    public function check_rooms()
    {   
        $this->db->where('room_type_id', $this->input->post('room_type'));
        $this->db->where('`room_id` NOT IN (SELECT `room_id` FROM `reservation`)', NULL, FALSE);
        $query = $this->db->get('room');

        if($query->num_rows() > 0)
        {
            foreach($query->result() as $row)
            {
                $data[$row->room_id] = $row->room_name;
            }
            return $data;
        }
        else
        {
            return false;
        }
    }