如何在codeigniter

时间:2017-01-20 11:32:54

标签: php jquery forms codeigniter codeigniter-3

我正在验证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函数。这个问题还有其他解决办法吗?

2 个答案:

答案 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)

验证失败后应避免重定向。 您有两种方法可以获取验证错误:

  1. 加载页面:

    $ this-&gt; load-&gt; view('page name);

  2. 您可以加载页面表单特定功能的视图。例如,如果您有索引函数来加载表单,那么您可以这样做。

    $这 - &GT;指数();

  3. 并单独填充验证错误,您可以这样显示:

    <?= form_error('your input field name') ?>
    

    或在表单顶部显示所有错误您可以这样做。

    <?php echo validation_errors(); ?>
    

    希望这会有所帮助。