Codeigniter表单验证未显示错误

时间:2014-01-28 15:49:44

标签: php forms codeigniter validation

我是Codegniter的新手,所以对我很轻松。我正在构建一个简单的登录表单,并且在登录凭据正确时我已成功重定向到页面。但是,如果我提交一个空表单,我不会收到任何错误消息。我也在表单字段中使用set_value,并且codeigniter不会在提交表单后重新填充用户输入的内容。不知何故,数据正在被清除。为了清楚起见,我为此做了一些事情。

  1. 自动加载form_validation库
  2. 自动加载表单助手
  3. 回应validation_errors以上表格

  4. account.php(controller)

    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
      class Account extends CI_Controller {
    
        public function __construct()
        {
          parent::__construct();
          $this->load->model('User_model', 'user');
        }
    
        public function index() {
          $this->load->view('home');
        }
    
        public function validate() {
    
          $this->form_validation->set_rules('username', 'username', 'xss_clean|required');
          $this->form_validation->set_rules('password', 'password', 'xss_clean|required|md5');
    
          $user_data = array(
            'username' => $this->input->post('username'),
            'password' => MD5($this->input->post('password'))
          );
    
          if ($this->form_validation->run() == FALSE)
          {
            $data['title'] = "Login Fool";
            $this->load->view('templates/header', $data);
            $data['contents'] = $this->load->view('login_view', $data, TRUE);
            $this->load->view('page', $data);
            $this->load->view('templates/footer');
          }
          else
          {
            $validated = $this->user->validate($user_data['username'], $user_data['password']);
            if($validated){
              redirect(base_url() . 'account');
            }
            else{
              $this->session->set_flashdata('LoginError', 'Sorry, your credentials are incorrect.');
              redirect(base_url() . 'account/login');
            }
    
           }
    
        }
    
      public function login() {
    
        $data['title'] = "Login Fool";
        $this->load->view('templates/header', $data);
        $data['contents'] = $this->load->view('login_view', NULL, TRUE);
        $this->load->view('page', $data);
        $this->load->view('templates/footer');
    
      }
    
    }
    

    login_view.php(查看)

    <h1>Login Now</h1>
    <?php
      if(validation_errors() != false) {
        echo "<div id='errors'>" . validation_errors() . "</div>" ;
      }
    ?>
    <?= ($this->session->flashdata('LoginError')) ? '<p class="LoginError">' . $this->session->flashdata('LoginError') . '</p>' : NULL ?>
    
    <?php echo form_open('account/validate'); ?>
       <label for="username">Username:</label>
       <input type="text" size="20" id="username" name="username" value="<?php echo set_value('username'); ?>"/>
       <br/>
       <label for="password">Password:</label>
       <input type="password" size="20" id="passowrd" name="password" value="<?php echo set_value('password'); ?>"/>
       <br/>
       <input type="submit" value="Login"/>
     </form>
    

    为什么错误不会显示在表单上方的任何想法?

1 个答案:

答案 0 :(得分:4)

原来我的模型是罪魁祸首。它扩展了CI_Controller而不是CI_Model。感谢所有看过这个的人。这段代码有效。