【问题标题】:Codeigniter Form Validation not Setting RulesCodeigniter 表单验证未设置规则
【发布时间】:2017-04-08 19:05:19
【问题描述】:

我在尝试设置验证规则时被卡住了一段时间,在我的控制器上我有这个:

public function login () {
        $this->load->library('form_validation');
        $this->form_validation->set_rules(array(
            'field'=>'username',
            'label'=>'Username',
            'rules'=>'required'
            ));
        if (!$this->form_validation->run()) {
            $this->json(array(
                'status'=>'error',
                'errors'=>$this->form_validation->error_array(),
                'test'=>$this->form_validation->get_options()
                ));
            return;
        }

        $user = $this->MUser->findByAttributes(array('username'=>$this->input->post('username')));
        if(!$user) {
            $this->json(array(
                'status'=>'error',
                'errors'=>array('username'=>'Username is not yet registered.')
                ));
            return;
        } 

        $encpass = sha1($user->salt.$this->input->post('password'));

        if ($encpass != $user->password) {
            $this->json(array(
                'status'=>'error',
                'errors'=>array('password'=>'Invalid username/password, please try again.')
                ));
            return; 
        }

        $this->json(array(
            'status'=>'success',
            'errors'=>''
            ));
    }

我还有一个扩展的基本控制器类和一个扩展的表单验证类,如下所示:

class AM_Controller extends CI_Controller {
    public function __construct(){
        parent::__construct();
    }

    public function render_template($view, $data = array(), $internal = false) {
        $view_contents = $this->load->view($view, $data, true);

        $header = $internal?$this->load->view('internal/header',$data,true):$this->load->view('external/header',$data,true);
        $footer = $internal?$this->load->view('internal/footer',$data,true):$this->load->view('external/footer',$data,true);

        $this->output->set_status_header(200,'ok');

        $this->load->view('general/template',array_merge(array(
            'header'=>$header,
            'footer'=>$footer,
            'content'=>$view_contents
            ),$data));
    }

    public function json($data) {
        $this->output->set_status_header(200,'ok')
                    ->set_content_type('application/json')
                    ->set_output(json_encode($data));
    }
}

class AM_Form_validation extends CI_Form_validation {
    public function __construct($options = array()) {
        parent::__construct($options);
    }   

    public function correct_captcha ($str) {
        $this->set_message('correct_captcha','Invalid %s answer.');
        return $this->CI->session->userdata('captcha_answer') == $str;
    }

    public function get_options () {
        return $this->_field_data;
    }
}

但问题是每次我尝试测试表单验证时,无论我是否输入了一些值,它总是返回 false。知道是什么导致了这个错误吗?

顺便说一句,我也尝试将 CI_Controller 仅用于我的控制器类,但仍然没有运气

【问题讨论】:

  • AM_Controller 是否与 index() 所在的班级相同?如果不是,index() 是什么,它是怎么称呼的?很难看出你展示的代码是如何组合在一起的。
  • 如果你在 codeigniter 中使用了很多 AJAX,你会对这个AJAX library 感兴趣。与 CI 配合得很好。
  • @DFriend 是的,所有控制器都在使用 AM_Controller
  • login() 正在处理 AJAX 调用?
  • 是的,但我看不出 AJAX 请求的区别

标签: php codeigniter validation


【解决方案1】:

问题解决了,经过数小时的测试,我的 POST 数据似乎没有到达我的服务器。我的 htaccess 的故障保护使它看起来像重写实际上正在工作,但事实并非如此,它是这样的:

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /appmon/

    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ index.php/$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
  ErrorDocument 404 /appmon/index.php
</IfModule>

在没有 htaccess 的情况下尝试了一些东西后,一切正常。谢谢大家

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多