Получение соответствующих данных из базы данных при изменении опции выбора - PullRequest
0 голосов
/ 10 мая 2018

Я разрабатываю систему со структурой codeigniter, но я попал в ловушку. Я провел два дня, пытаясь показать соответствующие данные выбранного элемента, заполненного из базы данных, в текстовом поле.

Код из вида

<td>
 <select class="form-control" id="items_goods" name="items_goods" style=" width:150px;">
  <option value="none" selected="" disabled="">Select Item</option>
  <?php foreach ($items as $item):?>
  <option value="<?php echo $item['id'];?>"><?php echo $item['item_name']; ?> </option>
   <?php endforeach;?>
    </sel<ect>
    </td><td><input type="text" name="price" id="price" value="<?=echo $item_goods" ></td>

Код от контроллера

public function new_sale(){
$data['title']='Add sale';
$data['id']=$this->input->post('item_goods');
$data['items']=$this->interface_model->get_item_data();
$data['item_id']=$this->input->post('items_goods');
$this->session->set_flashdata('posted_id',$data['id']);
$this->interface_model->get_item_data_by_id($data['item_id']);
        $this->load->view('templates/header_interfaces');
        $this->load->view('interfaces/new_sale', $data);
        $this->load->view('templates/footer_interfaces');}

Код от модели

public function get_item_data_by_id($item_id){

 $this->db->select('*');
 $this->db->from('stock');

 $this ->db->where('id',$item_id);
 $query = $this->db->get(); 
 return $query;}

Сценарий

$('#items_goods').change(function(){
var items_goods= $('#items_goods').val();
    alert('here'+' '+items_goods);
    var url = "new_sale";
    $.ajax({
        url: url,
        data: {items_goods:items_goods },
        type: 'post',
        cache: "false",
      });});

enter image description here

Моя проблема здесь onChange опции выбора. Данные передаются в контроллер, однако любая переменная, которую я установил для переменной post, возвращает ноль. Я даже попытался установить его в переменную flashdata, и он также возвратил ноль. Я просто не знаю, что я делаю здесь не так. Я также открыт для любых других альтернатив, чтобы получить соответствующие данные выбранной опции в текстовое поле. Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

Вы должны установить возвращаемое значение - $ this-> interface_model-> get_item_data_by_id (..) - для элемента $ data.

Изменение:

$this->interface_model->get_item_data_by_id($data['item_id']);

Кому:

$data['item_data'] = $this->interface_model->get_item_data_by_id($data['item_id']);

Обновлена ​​функция контроллера:

public function new_sale(){
    $data['title']='Add sale';
    $data['id']=$this->input->post('item_goods');
    $data['items']=$this->interface_model->get_item_data();
    $data['item_id']=$this->input->post('items_goods');
    $this->session->set_flashdata('posted_id',$data['id']);
    $data['item_data'] = $this->interface_model->get_item_data_by_id($data['item_id']);
    $this->load->view('templates/header_interfaces');
    $this->load->view('interfaces/new_sale', $data);
    $this->load->view('templates/footer_interfaces');
}

Вы также должны вернуть запись результата из вашей модели .

Звонок внизу:

$row = $query->row_array();
return isset($row['id'])?$row:NULL;

Обновлена ​​функция модели:

public function get_item_data_by_id($item_id){
    $this->db->select('*');
    $this->db->from('stock');
    $this ->db->where('id',$item_id);
    $query = $this->db->get(); 
    $row = $query->row_array();
    return isset($row['id'])?$row:NULL;
}

В вашем файле просмотра вы можете получить доступ к данным нового элемента через переменную - $ item_data.

0 голосов
/ 12 мая 2018

После некоторого прочтения потоков и документации я смог получить соответствующие данные для выбранной опции и отобразить их в текстовом поле, изменив сценарий, создав новую функцию в контроллере, чтобы получать сообщение для передачи ему модели-где я также внес несколько корректировок.


Следующие коды ниже являются изменениями и настройками кодов, которые я выложил ранее.


Коды контроллера

public function new_sale(){
$data['title']='Add sale';
$data['id']=$this->input->post('items_goods');
$data['items']=$this->interface_model->get_item_data();
$this->load->view('templates/header_interfaces');
$this->load->view('interfaces/new_sale', $data);
$this->load->view('templates/footer_interfaces');}

....................................................................................................................................................

public function get_item_details(){

    $item_id=$this->input->post();
    $this->load->model('interface_model');
    $item_data=$this->interface_model->get_item_data_by_id($item_id);
    echo json_encode($item_data);

 }

Коды моделей

public function get_item_data_by_id($item_id){
$response=array();
if($item_id['items_goods']){
$this->db->select('*');
$this ->db->where('id',$item_id['items_goods']);
$query = $this->db->get('stock'); 
$response = $query->result_array();
}
return $response;}

Коды сценариев

$('#items_goods').change(function(){
var item_name= $('#items_goods').val();
    alert('here'+' '+items_goods);
    var url = baseURL+'interfaces/get_item_details';
    $.ajax({
        url: url,
        data: {'items_goods':items_goods},
        type: 'POST',
        cache: 'false',
        dataType: 'json',
    success: function(response){
    var len = response.length;
     if(len > 0){
    var qty_unit= response[0].qty_unit;
    var price_p_u= response[0].price_p_u;
     $('#qty_unit').val(qty_unit);
    $('#price_p_u').val(price_p_u);

     }else{
     $('#qty_unit').val('N/A');
    $('#price_p_u').val('N/A');
     }
    }
      });});  

NB: я установил переменную var baseURL= "<?php echo base_url();?>" в моем нижнем колонтитуле, которая включена во все мои страницы.

Спасибо @Karlo Kokkak и @Rejoanul Alam за попытку помочь мне решить мою проблему

0 голосов
/ 10 мая 2018

Ваши данные неверны. Следующее неверно

$data['id'] = $this->input->post('item_goods');

Это будет выглядеть следующим образом

$data['id'] = $this->input->post('id');

Поскольку вы отправляете данные по id из ajax, а не как items_goods

Однако ваш url в ajax также может быть улучшен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...