У меня возникают трудности с отображением данных из db в раскрывающийся список.
Вот что я пробовал:
Model.php
public function __construct() { parent::__construct(); } function getAllGroups() { /* $query = $this->db->get('location'); foreach ($query->result() as $row) { echo $row->description; }*/ $query = $this->db->query('SELECT description FROM location'); foreach ($query->result() as $row) { echo $row->description; } //echo 'Total Results: ' . $query->num_rows(); }
controller.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Delivery_controller extends CI_Controller{ public function __construct() { parent::__construct(); $this->load->model('delivery_model'); } public function index() { $data['title']= 'Warehouse - Delivery'; $this->load->view('include/header',$data); $this->load->view('include/navbar',$data); $this->load->view('delivery_view', $data); $this->load->view('include/sidebar',$data); $this->load->view('include/footer',$data); $data['groups'] = $this->delivery_model->getAllGroups(); } }
view.php
<select class="form-control"> <?php $data = $this->delivery_model->getAllGroups(); foreach($description as $each) { ?><option value="<?php echo $each['description']; ?>"><?php echo $each['description']; ?></option>'; <?php } ?> </select>
Но результаты появляются поверх моей страницы. Он не отображается в выпадающем списке. Что я здесь делаю неправильно? Помощь очень ценится. Благодарю.
Вы не должны называть свою модель своей точкой зрения. Вместо этого попробуйте вызвать модель и установить $data['groups']
перед загрузкой ваших просмотров.
Также не повторяйте результаты строки в вашей модели, если вы не хотите, чтобы она отображалась на вашей странице.
контроллер:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Delivery_controller extends CI_Controller{ public function __construct() { parent::__construct(); $this->load->model('delivery_model'); } public function index() { $data['title']= 'Warehouse - Delivery'; $data['groups'] = $this->delivery_model->getAllGroups(); $this->load->view('include/header',$data); $this->load->view('include/navbar',$data); $this->load->view('delivery_view', $data); $this->load->view('include/sidebar',$data); $this->load->view('include/footer',$data); } }
Модель:
public function __construct() { parent::__construct(); } function getAllGroups() { /* $query = $this->db->get('location'); foreach ($query->result() as $row) { echo $row->description; }*/ $query = $this->db->query('SELECT description FROM location'); return $query->result(); //echo 'Total Results: ' . $query->num_rows(); }
Посмотреть:
<select class="form-control"> <?php foreach($groups as $row) { echo '<option value="'.$row->description.'">'.$row->description.'</option>'; } ?> </select>
Это то, что вы должны делать:
Модель :
public function __construct() { parent::__construct(); } function getAllGroups() { $query = $this->db->query('SELECT description FROM location'); return $this->db->query($query)->result(); }
Контроллер :
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Delivery_controller extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('delivery_model'); } public function index() { $data['title']= 'Warehouse - Delivery'; $data['groups'] = $this->delivery_model->getAllGroups(); //I take here a sample view, you can put more view pages here $this->load->view('include/header',$data); } }
Вид :
<select class="form-control"> <?php foreach($groups as $each){ ?> <option value="<?php echo $each->description; ?>"><?php echo $each->description; ?></option>'; <?php } ?> </select>
Никогда не вызывать модель из представления. Это выполнимо, но вы снова теряете смысл использования MVC. Вызовите модель из своего контроллера. Получите данные и передайте данные в свое представление.
Используйте, как показано ниже.
public function index(){ $data['title']= 'Warehouse - Delivery'; $data['groups'] = $this->delivery_model->getAllGroups(); $this->load->view('include/header',$data); $this->load->view('include/navbar',$data); $this->load->view('delivery_view', $data); $this->load->view('include/sidebar',$data); $this->load->view('include/footer',$data); }
На ваш взгляд, просто обведите вокруг переменной $groups
и echo
в раскрывающемся списке.
<select class="form-control"> <?php $i = 0; while($i < count($groups)){ $val= $groups[$i]['value']; $des = $groups[$i]['description']; echo "<option value='$i'>$des</option>"; } </select>
И функция вашей модели должна быть,
function getAllGroups(){ $query = $this->db->get('location'); return $query->result_array(); }
Codeigniter уже имеет специализированные функции, которые минимизируют количество html, которое вы должны сбросить в своем коде:
Модель
public function description_pulldown(){ $this->db->from('location'); $query = $this->db->get(); foreach($query->result() as $row ){ //this sets the key to equal the value so that //the pulldown array lists the same for each $array[$row->description] = $row->description; } return $array; }
контроллер
public function index(){ $data['description_list'] = $this->delivery_model->description_pulldown(); //load all of your view data $this->load->view('delivery_view', $data); }
Посмотреть
echo form_label("Description"); echo form_dropdown('description', $description_list, set_value('description'), $description_list);
Если вам нужно, чтобы представление вытягивало предыдущие данные в раскрывающемся списке, вы можете сделать цикл foreach, чтобы получить предыдущее значение выпадающего списка из базы данных, то есть … $ description = $ item-> description; и в представлении измените «set_value (« описание ») на просто« описание ».
Лучше, на мой взгляд, лучше использовать:
На вашей модели получите все свои данные в массиве с:
public function get_all_description() { $query = $this->db->get('description'); return $query->result_array(); }
В контроллере:
$data['description']=$this->model->get_all_description();
Ввиду:
for($i=0;$i<sizeof($description);$i++) { $description2[$description[$i]['description']]=$marque[$i]['description']; } echo form_dropdown('description', $description22, set_value('description'));