Search field / data filter

0

Hello, I'm developing a data search field. And this one, is working very well until then; but I would like to add some query parameters to this field.

How are you today (search possibilities):
Data inicial Data final Nome.

How do I want to: Data inicial Data final Opção que filtra todos os estoque (abaixo e acima do minimo), outra opção que filtra somente abaixo do estoque minimo e uma ultima opção que filtra somente acima do estoque minimo. Pesquisar pelo id, nome ou descricao (três colunas diferentes) em um só campo.

Note: There are two fields for the inventory-related products table, these being inventory and inventory_min. I want to make a query, using a select, which, depending on the option selected, bring the queries if the inventory is larger, smaller than stock_min or all.

I'm using the GET method to perform this query:
Here is the code for the view:

<form method="get" action="<?= base_url()?>admin/produtos">
    <div class="modal-body">
        <div class="row">                               
            <div class="form-group col-sm-6">
                <label for="dt_inicio">Cadastro inicial</label>
                <div class="input-group">
                    <div class="input-group-addon">
                        <i class="fa fa-calendar"></i>
                    </div>
                    <input type="text" name="de" class="form-control pull-right" id="datepicker" autocomplete="off" value="<?php echo $this->input->get('de'); ?>">
                </div>
            </div>
            <div class="form-group col-sm-6">
                <label for="dt_fim">Cadastro final</label>                                  
                    <div class="input-group">
                        <div class="input-group-addon">
                            <i class="fa fa-calendar"></i>
                        </div>
                    <input type="text" name="ate" class="form-control pull-right" id="datepicker2" autocomplete="off" value="<?php echo $this->input->get('ate'); ?>">
                </div>
            </div>                              
        </div>                      
        <div class="form-group">                                
            <label for="estoque" class="control-label">Estoque</label>
                <select name="estoque" class="form-control">
                    <option value="" selected="selected">Todos</option>
                    <option value="1">Acima do estoque mínimo</option>
                    <option value="2">Abaixo do estoque mínimo</option>
                </select>
            </div>                          
            <div class="form-group">
                <label for="produto">Produto</label>
                <input type="text" id="pesquisar_dados" name="pesquisar_dados" class="form-control" autocomplete="off" value="<?php echo $this->input->get('pesquisar_dados'); ?>" placeholder="Pesquise nome do produto" autofocus="autofocus">                                
            </div>                      
        </div>
        <div class="modal-footer clearfix">
            <button type="button" class="btn btn-default btn-flat" data-dismiss="modal"><i class="fa fa-times"></i> Cancelar</button>
            <button type="submit" class="btn btn-primary btn-flat pull-left"><i class="fa fa-search"></i> Pesquisar</button>
        </div>
</form>

Follow model code:

    public function pesquisar($pesquisar, $de, $ate){

    if($pesquisar != null){
        //$this->db->or_like('id' ,$pesquisar);
        $this->db->or_like('nome' ,$pesquisar);
    }

    if($de != null){
        $this->db->where('dt_cadastro >=' ,$de);
        $this->db->where('dt_cadastro <=', $ate);
    }
    $this->db->limit(10);
    return $this->db->get('produtos')->result();
}

Follow Controller:

$de = $this->input->get('de');
$ate = $this->input->get('ate');
$estoque = $this->input->get('estoque');
$pesquisar = $this->input->get('pesquisar_dados');

    if($pesquisar == null && $estoque == null && $de == null && $ate == null)
{ "exibe todos os resultados"}
else
[![inserir a descrição da imagem aqui][1]][1]{
     if($de != null){

            $de = explode('/', $de);
            $de = $de[2].'-'.$de[1].'-'.$de[0];

            if($ate != null){
                $ate = explode('/', $ate);
                $ate = $ate[2].'-'.$ate[1].'-'.$ate[0]; 
            }
            else{
                $ate = $de;
            }
        }
        $this->data['pagination'] = $this->pagination->create_links();
        $this->data['produtos'] = $this->Produtos_model->pesquisar($pesquisar, $de, $ate);
}

Table:
id' INT(11) NOT NULL AUTO_INCREMENT, 'nome' VARCHAR(40) NOT NULL, 'descricao' VARCHAR(80) NOT NULL, 'preco_compra' DECIMAL(10,2) NULL DEFAULT NULL, 'preco_venda' DECIMAL(10,2) NOT NULL, 'estoque' INT(11) NOT NULL, 'estoque_min' INT(11) NULL DEFAULT NULL, 'usuario_cadastro' VARCHAR(40) NOT NULL, 'usuario_alteracao' VARCHAR(40) NOT NULL, 'dt_cadastro' DATETIME NOT NULL, 'dt_alteracao' DATETIME NULL DEFAULT NULL,

    
asked by anonymous 05.01.2017 / 20:39

1 answer

1

As for security, it's good to take into account what the developer says: Escaping Queries . So I recommend you take it here:

$de = $this->db->escape_str($this->input->get('de'));
$ate = $this->db->escape_str($this->input->get('ate'));
$estoque = $this->db->escape_str($this->input->get('estoque'));
$pesquisar = $this->db->escape_str($this->input->get('pesquisar_dados'));

Correct way to use base_url () :

<form method="get" action="<?= base_url('admin/produtos')?>">

As for model , just use the data passed by select , as you already do with the other fields:

public function pesquisar($pesquisar = NULL, $de = NULL, $ate = NULL, $estoque = NULL){
    if($pesquisar != NULL){
        $this->db->or_like('nome' , $pesquisar);
    }
    if($de != NULL){
        $this->db->where('dt_cadastro >=' ,$de);
        $this->db->where('dt_cadastro <=', $ate);
    }
    if($estoque != NULL){
        if($estoque == 1){$where = "estoque > estoque_min";} 
        else {$where = "estoque < estoque_min";}
        $this->db->where($where);
    }
    $this->db->limit(10);
    return $this->db->get('produtos')->result();
}

Call:

$this->data['produtos'] = $this->Produtos_model->pesquisar($pesquisar, $de, $ate, $estoque);

Source:

05.01.2017 / 21:40