I'm having a problem with the form validation I use to create users from a web application I'm making with CodeIgniter.
All it does when I submit the form is simply refresh the page (even if all the input is correct), but without showing any error messages. Putting the validation rules in the controller instead of the config file brought me to the point where it let me submit the form and proced but without doing any validation letting me even submit an empty form (rightly causing a DB error).
My code is the following:
Controller:
class Gen_client extends CI_Controller {
public function __construct()
{
parent::__construct();
//--------------------------------------------------------------------------------------------------------
//Carico le funzione del DB necessarie
$this->load->model('gen_client_model');
//--------------------------------------------------------------------------------------------------------
//Carico le librerie necessarie
$this->load->library('form/generazione_credenziali');
$this->load->library('form_validation'); //le regole ora sono fissate sotto config/form_validation.php
}
function index()
{
//--------------------------------------------------------------------------------------------------------
//Imposto tutte le regole per la validazione del form
$this->form_validation->set_message('alpha', 'Il campo "%s" dev\'essere composto da sole lettere.');
$this->form_validation->set_message('_check_numeric', 'Il campo "%s" dev\'essere composto da soli numeri.');
$this->form_validation->set_message('min_length', '"%s" dev\'essere di almeno %s caratteri.');
$this->form_validation->set_message('_valid_prefix', 'Il prefisso inserito non è valido! Per favore inserire il prefisso internazionale nel formato seguente: 00XXX. Es: 0041');
//-----------------------------------------------------------------------------------
//Parte di controllo e generazione della parte view
$fv = $this->form_validation->run('gen_client');
if($this->form_validation->run('gen_client') == false)
{
$this->load->view('templates/header', $data);
$this->load->view('gen_client/gen_client', $data);
$this->load->view('templates/footer');
$msg = validation_errors();
var_dump($msg);
var_dump($fv);
}
else //se il sistema sta validando il form ritornerà poi una pagina di esportazione se la validazione va a buon fine
{
$num = intval($this->input->post('num_utenti'));
if($num !==null && $num !==0) //controllo se si sta cercando di generare più credenziali
{
$ids = $this->gen_client_model->addUsers($num, $this->session->userdata('id_dipendente'));
$this->session->set_userdata('ids', $ids);
$this->session->set_userdata('tipocli', $this->input->post('identificativo'));
$this->success();
}
else
{
$ids = $this->gen_client_model->addUsers(1, $this->session->userdata('id_dipendente')); //inserisco solamente un utente
$this->session->set_userdata('ids', $ids);
$this->session->set_userdata('tipocli', $this->input->post('identificativo'));
$this->success();
}
}
}
Form Validation rules in the config folder :
<?php
$config = array(
'gen_client'=>array(
array(
'field' => 'sigla',
'label' => 'Sigla',
'id' => 'sigla',
'rules' => 'min_length[3]|xss_clean|alpha'
),
array(
'field' => 'n_tel',
'label' => 'Numero di telefono',
'rules' => 'min_length[12]|callback__check_numeric|callback__valid_prefix'
)
),
);
View :
echo form_open('', 'id="form_generazione" class="form-horizontal"'); ?>
<div id="form" class="col-md-4 col-md-offset-4">
<label>Tipo utente</label>
<br />
<?php
echo form_radio('identificativo', '1', '', 'onclick="radioChange(this)"');
echo form_label('Numero di telefono','identificativo');
echo "\t";
echo form_radio('identificativo', '2', '' , 'onclick="radioChange(this)"');
echo form_label('Sigla d\'accesso','identificativo');
?>
<br />
<div class="u_ev">
<label>Evento</label>
<?php
echo '<div class="input-group input-group-sm">';
echo '<span class="input-group-addon"><span class="glyphicon glyphicon-calendar"></span></span>';
echo form_dropdown('evento', $evento, 1, 'id="event" class="input-sm" onchange="changeEvent()"'); //vengono mostrati solamente se il valore della durata è -1 (che equivale a "Illimitato")
echo '</div>';
?>
</div>
<div class="u_gen">
<label>Durata oraria</label>
<?php
echo form_error('durata', '<div class="alert alert-danger"><span class="glyphicon glyphicon-warning-sign"></span> ', '</div>');
echo '<div class="input-group input-group-sm">';
echo '<span class="input-group-addon"><span class="glyphicon glyphicon-time"></span></span>';
echo form_dropdown('durata', $durata,1, 'id="durata" class="input-sm"'); //ogni volta che viene cambiato il valore di durata verifica se è "Illimitato" per decidere se mostrare gli eventi o meno
echo '</div>';
?>
</div>
<div class="u_log">
<label>Numero utenti</label>
<?php
echo form_error('num_utenti', '<div class="alert alert-danger"><span class="glyphicon glyphicon-warning-sign"></span> '
, '</div>');
echo '<div class="input-group input-group-sm">';
echo '<span class="input-group-addon"><strong>#</strong></span>';
echo form_input('num_utenti', set_value('num_utenti'), 'id="num_utenti" class="form-control" placeholder="Numero utenti.."');
echo '</div>';
?>
<br />
<label>Sigla</label>
<?php
echo form_error('sigla', '<div class="alert alert-danger"><span class="glyphicon glyphicon-warning-sign"></span> ', '</div>');
echo '<div class="input-group input-group-sm">';
echo '<span class="input-group-addon"><span class="glyphicon glyphicon-user"></span></span>';
echo form_input('sigla', set_value('sigla'), 'id="sigla" onkeyup="previewUser(this)" class="form-control" placeholder="Sigla.."'); //ad ogni pressione di un testo faccio aggiornare dinamicamente la preview
echo '</div>';
?>
<br />
<label>Preview sigla utente</label>
<?php
$prossimo = $this->generazione_credenziali->generateUname("",01);
echo '<div class="input-group input-group-sm">';
echo '<span class="input-group-addon"><span class="glyphicon glyphicon-arrow-right"></span></span>';
echo form_input('prossimo_utente','', 'disabled id="prossimo_utente" class="form-control"'); //preview della sigla del prossimo utente che non è modificabile e non viene mandato in post
echo '</div>';
?>
</div>
<div class="u_tel">
<label>Numero di telefono</label>
<?php
echo form_error('n_tel', '<div class="alert alert-danger"><span class="glyphicon glyphicon-warning-sign"></span> ', '</div>');
echo '<div class="input-group input-group-sm col-md-12">';
echo '<span class="input-group-addon"><span class="glyphicon glyphicon-earphone"></span></span>';
echo form_input('n_tel', '', 'id="n_tel" class="col-md-8 form-control" placeholder="00XXAABBBCCDD"');
echo '</div>';
echo '<small>Inserire il numero di telefono preceduto dal prefisso internazionale. Es: 0041 12 345 67 89</small>'
?>
</div>
<br />
<?php
echo form_submit('submit', 'Conferma', 'class="btn btn-default submit"');
?>
<br />
<?php
echo form_close();
?>
</div>
I'm sorry for the format of the code as it may seem a bit confusional.
I really ran out of ideas on what to try to correct this error, even if I'm quite sure it's some little error somewhere.
Thanks everybody in advance.