我正在验证codeigniter中的表单。如果用户没有正确填写表单,则页面不应重定向到任何其他页面,而是在每个输入字段上显示错误。这是我的表格代码:
<?php echo $this->session->flashdata('errors');?>
<form action="<?php echo base_url() ?>detail/travel" method="post">
<input type="text" name="departure">
<input type="text" name="destination">
<input type="text" name="name">
<input type="text" name="cell">
</form>
这是我的方法代码:
function search_travel(){
if($_POST){
$config = array(
array(
'field'=>'departure',
'label'=>'departure',
'rules'=>'trim|required|alpha'
),
array(
'field'=>'destination',
'label'=>'destination',
'rules'=>'trim|required|alpha'
),
array(
'field'=>'name',
'label'=>'name',
'rules'=>'trim|required|alpha'
),
array(
'field'=>'cell',
'label'=>'cell no',
'rules'=>'trim|required'
)
);
$this->load->library('form_validation');
$this->load->helper(array('form', 'url'));
$this->form_validation->set_rules($config);
if($this->form_validation->run() == FALSE){
$this->session->set_flashdata('errors', validation_errors());
redirect(base_url());
}
}
}
问题是通过使用set_flashdata我不能使用form_error函数和set_value函数。这个问题还有其他解决办法吗?
答案 0 :(得分:2)
在输入的地方form_error()下,您需要加载表单助手
您可以自动加载库等config / autoload.php
$autoload['helper'] = array('form', 'html', 'url');
表单错误示例
<input type="text" name="departure">
<?php echo form_error('departure', '<div class="error">', '</div>'); ?>
<input type="text" name="destination">
<?php echo form_error('destination', '<div class="error">', '</div>'); ?>
<input type="text" name="name">
<?php echo form_error('name', '<div class="error">', '</div>'); ?>
<input type="text" name="cell">
<?php echo form_error('cell', '<div class="error">', '</div>'); ?>
如图所示https://www.codeigniter.com/userguide3/libraries/form_validation.html#changing-the-error-delimiters
控制器文件名Detail.php 首字母只能是大写类和文件名
<?php
class Detail extends CI_Controller {
// You can autoload helpers and libraries etc if you need to,
public function __construct() {
parent::__construct();
$this->load->helper('form');
$this->load->library('form_validation');
}
public function index() {
$this->load->view('your_form_view');
}
function search_travel() {
$this->form_validation->set_rules('departure', 'departure', 'trim|required');
$this->form_validation->set_rules('destination', 'destination', 'trim|required');
$this->form_validation->set_rules('name', 'name', 'trim|required');
$this->form_validation->set_rules('cell', 'cell', 'trim|required');
if ($this->form_validation->run() == FALSE) {
// Error
$this->load->view('your_form_view');
} else {
// Success
redirect(base_url('another/controller'));
}
}
}
查看
<?php echo form_open('detail/search_travel');?>
<input type="text" name="departure">
<?php echo form_error('departure', '<div class="error">', '</div>'); ?>
<input type="text" name="destination">
<?php echo form_error('destination', '<div class="error">', '</div>'); ?>
<input type="text" name="name">
<?php echo form_error('name', '<div class="error">', '</div>'); ?>
<input type="text" name="cell">
<?php echo form_error('cell', '<div class="error">', '</div>'); ?>
// Submit button
<?php echo form_close();?>
答案 1 :(得分:0)
验证失败后应避免重定向。 您有两种方法可以获取验证错误:
加载页面:
$ this-&gt; load-&gt; view('page name);
您可以加载页面表单特定功能的视图。例如,如果您有索引函数来加载表单,那么您可以这样做。
$这 - &GT;指数();
并单独填充验证错误,您可以这样显示:
<?= form_error('your input field name') ?>
或在表单顶部显示所有错误您可以这样做。
<?php echo validation_errors(); ?>
希望这会有所帮助。