php - CodeIgniter `validation_errors()` 不工作

标签 php codeigniter validation codeigniter-2

我使用的是 CodeIgniter 2.1.4 版本。我在显示表单验证错误时遇到问题。表单验证返回 falsevalidation_errors() 未显示任何错误。我尝试在 controllerviewecho 但没有结果。我通过 ajax 发出请求。没有抛出 php 错误。

Controller :

<?php
class Dashboard extends Admin_Controller {

   public function ajax_new_dist_center($id=NULL)
   {
       $this->load->model('dist_centre_m');
       $this->load->helper(array('form', 'url'));
       $this->load->library('Form_validation');

       $validation = $this->dist_centre_m->rules;
       $this->form_validation->set_error_delimiters('<li>', '</li>');
       $this->form_validation->set_rules($validation);
       if ($this->form_validation->run() == TRUE)
       {
            if($this->dist_centre_m->create($id))
                echo 'New centre created';
            else
            {
                $this->output->set_status_header('404');
                echo 'Given center not found';
            }
       }
       else
       {
           $this->output->set_status_header('400');
           echo 'validation Failed';
           $this->load->view('alert_error');
       }
   }
}

查看:

<?php echo validation_errors();?>
<p>Testing Error</p>

型号:

class dist_centre_m extends MY_Model {
    protected $_table_name = 'distribution_centre';
    protected $_primary_key = 'dis_id';
    protected $_order_by = 'dis_id';
    public $rules = array(
        'name' => array( 
            'field'=>'name',
            'label'=>'Center name',
            'rules'=>'trim|required|xss_cleaned|min_length[3]|max_length[45]'
        ),
        'street' => array(
            'field'=>'street',
            'label'=>'Street',
            'rules'=>'trim|required|xss_cleaned|min_length[3]|max_length[45]'
        ),
        'town' => array(
            'field'=>'town',
            'label'=>'Town',
            'rules'=>'trim|required|min_length[3]|max_length[45]|required|xss_cleaned'
        ),
        'postcode' => array(
            'field'=>'postcode',
            'label'=>'Postcode',
            'rules'=>'trim|required|max_length[10]|required|xss_cleaned'
        ),
        'tel' => array(
            'field'=>'tel',
            'label'=>'Telephone number',
            'rules'=>'trim|valid|exact_length[11]|required|xss_cleaned'
        ),
    );

    public function __construct() {
        parent::__construct();
        $this->load->helper('security'); 
    }

    public function create($id=NULL){
        $data = array(
                'name'      =>$this->input->post('name',true),
                'street'    =>$this->input->post('street',true),
                'town'      =>$this->input->post('town',true),
                'postcode'  =>$this->input->post('postcode',true),
                'tel'       =>$this->input->post('tel',true),
        );
        return $this->save($data,$id);
    }  
} 

输出:

validation Failed

Testing Error

相关问题均无效,请不要标记为重复。

更新: 我的 Ajax 请求页面:

 <form id="new-center-form" method="post">
                <div class="row">
                    <div class="col-md-8">
                        <div class="form-group">
                            <label for="name">Name</label>
                            <input type="text" name="name" placeholder="Name"/>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for='street'>Street</label>
                            <input type="text" name="street" placeholder="Street"/>
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for="town">Town</label>
                            <input type="text" name="town" placeholder="Town"/>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for="postcode">Postcode</label>
                            <input type="text" name="postcode" placeholder="Postcode"/>
                        </div>
                    </div>
                    <div class="col-md-6">
                        <div class="form-group">
                            <label for="tel">Phone</label>
                            <input type="text" name="tel" placeholder="Telephone"/>
                        </div>
                    </div>
                </div>
                <div class="row">
                    <div class="col-md-8">
                        <div class="form-group">
                            <button id="centre-submit" class="btn btn-primary pull-left">Save</button>
                        </div>
                    </div>
                </div>
            </form>


<script type="text/javascript">
    $(document).ready(function(){

        var url_new_center = '<?php echo page_url('new-center') ?>';

        $('#centre-submit').click(function(e){
            e.preventDefault();
            $.ajax({
                url:url_new_center,
                type:'post',
                data: $('new-center-form').serialize()
            }).done(function(response){
                $('#infos').html(response);
                $('#infos').slideDown();
                $('.new-centre').slideUp();
            }).fail(function(response){
                $('#errors').html(response);
                $('#errors').slideDown();
            });
        })
    });
</script>

最佳答案

经过长时间的 sleep ,我终于明白了。$this->form_validation->run() 在没有 $_POST 数据时返回 false找到并且它不会设置任何错误来打印。在我的 ajax 请求中,由于某些错误,它无法发送任何数据。感谢 curl 我能够对其进行测试。

更新

 data: $('new-center-form').serialize() // this was the error. 

我这里打错了。这应该是这样的 data: $('#new-center-form').serialize()

关于php - CodeIgniter `validation_errors()` 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22336994/

相关文章:

javascript - 在特定页面上隐藏 div 或 class 元素并在其他页面上显示

php - 用户给定多个参数的mysql搜索查询

php - 数据表显示第二个表但没有反应

Javascript删除codeigniter中的确认框

php - 在授予目录访问权限之前,使用 htaccess 验证 php

php - str_replace 用于短代码目的

database - CodeIgniter手动数据库连接问题-用法

codeigniter - 使用 CodeIgniter 的 Rest Server 扩展设置授权级别

javascript - 输入类型正则表达式中仅允许数字。问题是我能够输入 this(1.) ,想要阻止它

java - 如何在 Spring MVC 中定义和获取基于语言环境的消息?