Codeigniter - Dynamic form

2

Alright? Well .. I'm a beginner in the world of Web Programming and I'm trying to develop a codeigniter system. could you help me? I'm trying to make a dynamic form in which I have a select that has the months of the year .. and I would like it when I change this select it would make a query in the MySQL database and change an input with the value referring to the sealed month. The problem is that to want to make this happen without submitting to form since the submit already creates a kind of invoice. To be easier to understand. I want to create a form that generates an invoice according to the number of visits that occurred in the month. Month that I choose through select. It takes the month, searches the DB, and changes the value in the input.

Thank you in advance.

    
asked by anonymous 22.05.2016 / 04:17

1 answer

1

When I need to do an ajax in a controller I do this:

<script>
   $(function (){
       $.ajax({
           type: 'GET', // ou post
           url: '<?= site_url('controller/action'); ?>',
           dataType: 'json',
           success: trataRetorno //function que irá tratar o retorno
       });
   });

   function trataRetorno(retorno){
       // código que irá manipular o retorno da query
       // utilize console.log(retorno) para depurar o retorno
   }
</script>

No controller:

public function action () {
    $this->load->model('Modelo_model');
    echo json_encode($this->Modelo_model->executa_query());
}

EDIT:

To pass the value of select to php you can do this:

javascript

// vamos criar um evento para capturar a mudança do valor no select... caso queira outro trigger é só alterar a linha abaixo.
$('select#IdDoSelect').on('change', function (){
    pegaValorDoMes($(this).val()); // se for utilizar um evento atribuido a outro objeto que não seja o seu select você também deve trocar esse $(this) pelo seletor apropriado do seu select
});

function pegaValorDoMes(valor) {
    $.ajax({
           type: 'GET', // ou post
           url: '<?= site_url('controller/action'); ?>',
           dataType: 'json',
           data: valor, // essa é a única novidade no javascript... serve para passar o valor do campo para o controller
           success: trataRetorno //function que irá tratar o retorno
       });
}

function trataRetorno(retorno){
       $('input#IdDoInput').val(retorno.valor);
}

config / routes.php

$routes['controller/action/(:num)'] = 'controller/action/$1'; //essa configuração permite que a sua action receba o valor do get feito pelo ajax

controllers / controller.php

public function action($mes) {
    // caso você opte por usar POST é só tirar as configurações de GET e utilizar o $this->input->post(mes); que irá funcionar normalmente
    $this->load->model('Modelo_model');
    echo json_encode($this->Modelo_model->executa_query($mes)); // essa é a linha que possibilita que o javascript trabalhe com o resultado em forma de objeto
}

models / Model_model.php

public function executa_query($mes){
    // aqui você vai realizar sua query normalmente retornando o array de resultado
    $this->db->select('valor');
    $this->db->where(array('mes' => $mes));
    $this->db->get('tabela')->row_array();
}

Note: Remembering that this is a very rough example, just to give you the idea of what should be done. If you still have any questions, just let me know and I'll try to dig deeper.

    
23.05.2016 / 16:46