Dev (Back & Front)ARTIGO

CodeIgniter com SQLite + Multi-Select, Radio e Checkboxes

Tenho recebido alguns e-mail de leitores com algumas dúvidas e pedindo para euesclarecer alguns pontos. Vou atendê-los nesse artigo, que abordará a integração entre CodeIgniter e SQLite e como gerenciar caixas de checagem e radio buttons com o CodeIgniter.

CodeIgniter com SQLite + Multi-Select, Radio e Checkboxes
Imagem: Ademir Cristiano Gabardo

Tenho recebido alguns e-mail de leitores com algumas dúvidas e pedindo para  euesclarecer alguns pontos. Vou atendê-los nesse artigo, que abordará a integração entre CodeIgniter e SQLite e como gerenciar caixas de checagem e radio buttons com o CodeIgniter.

A primeira parte trata da conexão com um banco de dados SQLite. Existem bugs conhecidos para as versões anteriores a 2.1.1. Como estamos trabalhando com a versão 2.1.3, não deve acontecer erros.  Para este exemplo, vamos manter o banco em uma pasta chamada “banco-de-dados” na pasta application. O nome do banco de dados utilizado é radios.sqlite.

Para gerenciar as tabelas, você vai precisar de um editor semelhante ao phpLiteAdmin, que pode ser baixado aqui. Baixe o script phpliteadmin.php para a pasta raíz da aplicação. Você deve editar os seguintes parâmetros do arquivo phpliteadmin.php.

$directory = false;

Este parâmetro define que será usada a array $databases como configuração do(s) banco(s) de dados utilizados. Então, na array $databases utilize da seguinte maneira:

$databases = array(
array(
“path”=> “application/banco-de-dados/radios.sqlite”,
“name”=> “Radios”
)
);

Agora, ao acessar o endereço do site /phpliteadmin.php você verá a tela de login. A senha padrão é admin e também pode ser alterada no arquivo phpliteadmin.php. Depois de fazer o login, você deverá ver um tela conforme a seguir:

Então, basta adicionar os dados para a tabela conforme mostrado a na figura 2. Estou utilizando apenas dois campos, cor e checado.

Feito isto, vamos às configurações do CodeIgniter. Apesar do framework dispor de um drive SQLite, utilizaremos em nosso exemplo a biblioteca PDO.

O arquivo de configuração de conexão com bancos de dados deve ficar do seguinte modo:

$db['default']['hostname'] = ‘sqlite:’.APPPATH.’banco-de-dados/radios.sqlite’;
$db['default']['username'] = ”;
$db['default']['password'] = ”;
$db['default']['database'] = ”;
$db['default']['dbdriver'] = ‘pdo’;
$db['default']['dbprefix'] = ”;
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = ”;
$db['default']['char_set'] = ‘utf8′;
$db['default']['dbcollat'] = ‘utf8_general_ci’;
$db['default']['swap_pre'] = ”;
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

No arquivo de configuração autoload.php, na seção libraryes, adicione a biblioteca database e na lista de helpers adicione url, html, form.

Como não foi alterado o arquivo routes.php, estamos utilizando o default_controller padrão do CodeIgniter que é o Welcome. Altere o arquivo application/controllers/welcome.php conforme o seguinte código-fonte.

db->get(‘cores’)->result();
$this->load->view(‘welcome_message’,$data);
}
}

Note que não há nada de diferente em relação aos outros bancos de dados, como o MySQL por exemplo, os procedimentos com o Active Record são os mesmos.

O próximo passo é modificar a view welcome em application/views/welcome_message.php, alterando o conteúdo da div body conforme o seguinte código-fonte.

cor] = $cor->cor;
}

$selecionadas = array();
foreach($cores as $cor){
if($cor->checado==1){
$selecionadas[$cor->cor] = $cor->cor;
}
}
echo form_multiselect(‘cores[]‘,$local_cores,$selecionadas);
echo form_fieldset_close();

echo form_fieldset(‘Radio’);
$add = 0;
foreach($cores as $radio){
$add++;
$data = array(
‘name’ => ‘radio_cores[]‘,
‘id’ => ‘radio_cores’.$add,
‘value’ => $radio->cor,
‘checked’ => $radio->checado
);
echo form_radio($data);
echo form_label($radio->cor, ‘radio_cores’.$add);
}
echo form_fieldset_close();

echo form_fieldset(‘Checkbox’);
$add = 0;
foreach($cores as $check){
$add++;
$data = array(
‘name’ => ‘check_cores[]‘,
‘id’ => ‘check_cores’.$add,
‘value’ => $check->cor,
‘checked’ => $check->checado
);
echo form_checkbox($data);
echo form_label($check->cor, ‘check_cores’.$add);
}
echo form_fieldset_close();

echo form_submit(“”,”Gravar”);
echo form_close();
?>

O resultado final deverá ser semelhante ao mostrado na figura 3:

Vejamos as principais diferenças entre o multi-select, radio e checkbox. No caso do multi-select precisamos informar ao helper form dois ou três parâmetros, sendo os seguintes: o nome do campo, uma array associativa com os valores que preencherão os options e opcionalmente uma array com quais options devem vir selecionados.

Isto foi feito no seguinte trecho de código:

$local_cores = array();
foreach($cores as $cor){
$local_cores[$cor->cor] = $cor->cor;
}

$selecionadas = array();
foreach($cores as $cor){
if($cor->checado==1){
$selecionadas[$cor->cor] = $cor->cor;
}
}
echo form_multiselect(‘cores[]‘,$local_cores,$selecionadas);

Já para os checkboxes e radiobuttons, a tarefa é mais fácil, pois basta utilizar o valor atribuído ao campo checado para verificar se o checkbox ou o radiobuttom devem estar ou não checados. Isto foi feito da seguinte forma:

$add = 0;
foreach($cores as $check){
$add++;
$data = array(
‘name’ => ‘check_cores[]‘,
‘id’ => ‘check_cores’.$add,
‘value’ => $check->cor,
‘checked’ => $check->checado
);
echo form_checkbox($data);
echo form_label($check->cor, ‘check_cores’.$add);
}

Observações importantes sobre campos radio e checkbox

  • Não é possível ter dois elementos com a mesma ID em um documento HTML, por isso utilizei uma variável auxiliar com um contador para que a ID nunca se repita;
  • O nome do campo deve ser acrescido de [] conforme feito em check_cores[]. Isto indica que o campo irá passar uma array de valores e não somente o último valor selecionado – isto vale para selects, checkboxes e radiobuttons;
  • Campos do tipo radiobuttom só admitem um valor checado, por isso, sempre será o último valor checado recebido do banco de dados. Se houver mais que um valor checado, os primeiros serão ignorados. Este exemplo está errado do ponto de vista semântico, se houver a necessidade de usar mais que um, utilize checkbox.

E então para visualizar os dados recebidos no controller, apenas crie um o método gravar no controller welcome.php conforme mostrado a seguir:

public function gravar(){
echo “

”;
    print_r($_POST);
    echo “

”;
}

Espero que tenha sido útil!

Pesquisador, doutorando na Faculdade de Engenharia Elétrica e Ciência da Computação da Universidade de Newcastle (UON), Austrália. Mestre em Computação Aplicada com ênfase em Engenharia de Sistemas Computacionais pela Universidade Tecnológica Federal do Paraná (UTFPR). Bacharelado em Sistemas de informação pela Universidade do Estado de Santa Catarina (UDESC). Autor dos títulos "Análise de Redes Sociais: uma visão computacional" (2015), "PHP e MVC com CodeIgniter" (2012) e "CodeIgniter Framework PHP" (2010), todos pela editora Novatec. Professor universitário, entusiasta de tecnologia e internet desenvolve pesquisa sobre redes sociais e redes complexas. Siga no Twitter @agabardo

Ver perfil