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