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!