【问题标题】:form validation error in CodeigniterCodeigniter 中的表单验证错误
【发布时间】:2013-10-19 22:09:01
【问题描述】:

我一直在关注 Envato 在 Tutplus 上的本教程:https://tutsplus.com/course/build-a-cms-in-codeigniter/。我正在验证登录表单的部分。我的问题是我不能在登录系统中使用我的表单验证规则。我的代码如下:

user_m.php

<?php 
  class User_M extends MY_Model {

public $rules = array(  // I can't use this rules in my controller
   'email' => array(  // for email 
    'field' => 'email',
    'label' => 'Email',
    'rule'  => 'trim|required|valid_email|xss_clean'
    ),
    'password' => array(  // for password
    'field' => 'password',
    'label' => 'Password',
    'rule'  => 'trim|required'
     )
);

}

user.php

 <?php 

class User extends Admin_Controller {

public function __construct()
{
    parent::__construct();
}

public function login()
{   
   // Set form
   $rules = $this->user_m->rules; // get the value from user_m model and it works well
       // this is not works. this is my problem
   $this->form_validation->set_rules($rules);  

       // if we use this comment code then it works
   //$this->form_validation->set_rules('email', 'Email', 'rim|required|valid_email|xss_clean'); 
   // $this->form_validation->set_rules('password', 'Password', 'required');

   // Process form
   if ( $this->form_validation->run() == TRUE )  { // show the error msg if form problem occurs 
       // We can login and redirect

    }

}

【问题讨论】:

  • 它非常简单——你在你的模型中定义规则——但是你试图从控制器中调用它。我也做了那个教程,有一段时间我把我的模型称为“something_m”并认为它太酷了。事实上,我写了一篇文章——在写这篇文章时,我发现它实际上是一种糟糕的命名模式。所以我的建议是专门为模型命名,而控制器通常没有任何装饰。
  • 建议把所有的表单验证都放在模型中,然后像这样调用它: if ( $this->user_m->validateUserForm() == False ){ // 再次显示表单 } else { // 转到另一个方法并让魔法发生 }

标签: php codeigniter validation


【解决方案1】:

你可以试试这个(在你调用form_validation-&gt;run()函数之前在你的控制器中设置规则)

public function login()
{
    $this->form_validation->set_rules('email', 'Email',  'trim|required|valid_email|xss_clean');
    $this->form_validation->set_rules('password', 'Password',  'trim|required');
    if ( $this->form_validation->run() )  {
        // validation passed
    }
    else {
        // validation failed
    }
}

【讨论】:

  • 您可能会注意到这段代码运行良好,但我无法弄清楚我的代码有什么问题。谢谢
【解决方案2】:

您确保已在电子邮件和密码文本框下方写入 form_error('email');form_error('password');。 如果发生验证错误,请调用登录视图。

public function login()
{
   $this->form_validation->set_rules('email', 'Email',  'trim|required|valid_email|xss_clean');
$this->form_validation->set_rules('password', 'Password',  'trim|required');
   if ($this->form_validation->run() == FALSE)
        {
           **$this->load->view('login view path');**
        }else{write other code of redirect or any.....} 
}

【讨论】:

    猜你喜欢
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-17
    • 2013-03-24
    • 2014-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多