我遇到了表单验证的问题,我用它来创建用户使用CodeIgniter创建的Web应用程序。
提交表单时所做的只是刷新页面(即使所有输入都正确),但没有显示任何错误消息。将验证规则放在控制器而不是配置文件中,这让我能够提交表单和过程,但没有做任何验证让我甚至提交一个空表单(正确导致数据库错误)。
我的代码如下:
控制器:
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();
}
}
}
配置文件夹中的表单验证规则:
<?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>
我很抱歉代码的格式,因为它看起来有点混乱。我真的没有尝试纠正这个错误的想法,即使我很确定它在某个地方有点小错误。
提前谢谢大家。
答案 0 :(得分:1)
在尝试验证之前,您需要确保load the form validation rules config正确,然后set the rules。
// Loads a config file named form_validation_rules.php
// and assigns it to an index named "form_validation_rules"
$this->config->load('form_validation_rules', TRUE);
// Retrieve a config item named "gen_client"
// contained within the form_validation_rules array
$validation_rules = $this->config->item('gen_client', 'form_validation_rules');
// Set the rules
$this->form_validation->set_rules($validation_rules);
// Run the validation
if($this->form_validation->run() == FALSE)
{
// ...