У меня возникла проблема с проверкой формы, которую я использую для создания пользователей из веб-приложения, которое я создаю с помощью CodeIgniter.
Все, что я делаю, когда я отправляю форму, просто обновляет страницу (даже если все введенные данные верны), но без каких-либо сообщений об ошибках. Ввод правил проверки в контроллер вместо файла конфигурации привел меня к тому моменту, когда он позволил мне отправить форму и процедуру, но без какой-либо проверки, позволяющей мне даже отправить пустую форму (по праву вызывая ошибку БД).
Мой код выглядит следующим образом:CodeIgniter Form_validation не работает
контроллер:
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();
}
}
}
правил Форма Validation в папке конфигурации:
<?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'
)
),
);
Посмотреть:
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>
Прошу прощения за формат кода, поскольку он может показаться немного противоречивым.
У меня действительно не хватало идей о том, что пытаться исправить эту ошибку, даже если я уверен, что это какая-то небольшая ошибка.
Спасибо всем заранее.
Хорошо, я проделал свой путь вокруг вашего решения и получил его на работу! Большое спасибо: D – MarKxEasy
Нет проблем! Как вы думаете, какая-то часть моего решения может быть улучшена? – jleft
Нет, ваша часть решений была именно тем, что было необходимо. Единственной другой ошибкой было отсутствие правил на моем конце в файле form_validation.php, просто нужно было добавить другое настраиваемое правило. Еще раз большое спасибо за ваше время и готовность помочь! – MarKxEasy