it-roy-ru.com

отображать данные из базы данных в раскрывающийся список CodeIgniter

У меня проблемы с отображением данных из базы данных в выпадающий список. 

Вот что я попробовал:

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>

Но результаты появляются в верхней части моей страницы. Это не появляется в выпадающем списке. Что я здесь не так делаю? Помощь очень ценится. Благодарю.

8
neknek mouh

Вы не должны называть свою модель с вашей точки зрения. Вместо этого попробуйте назвать модель и установить $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>
18
dnapierata

Вот что вы должны сделать: 

Модель :

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>
8
Jamshid Hashimi

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 (' description ')' на просто '$ description.'

3
baldvegan

Никогда не называйте модель из вида. Это выполнимо, но снова вы теряете смысл использования 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();
}
2
Ela Buwa

Лучше я думаю, по вашему мнению, использовать:

В вашей модели соберите все ваши данные в массив с:

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'));
0
laurent Nunenthal