在 codeigniter 上找不到对象

Posted

技术标签:

【中文标题】在 codeigniter 上找不到对象【英文标题】:Object not found on codeigniter 【发布时间】:2014-02-26 10:09:35 【问题描述】:

我的本​​地主机上安装了 codeigniter

main.php 控制器是

class Main extends CI_Controller 

    public function index()
    
        $this -> login();
    

    public function login()
    
        $this->load->view('login');
    

    public function login_validation() 
        $this->load->library('form_validation');
        $this->form_validation->set_rules('email','Email','required');
        $this->form_validation->set_rules('password','Password','required|md5');

        if($this->form_validation->run())
        
            redirect('main/members');
        
        else
        
            $this->load->view('login');
        

    


登录正在工作页面即将到来,但在我填写用户名和密码后,应该带我到 login/main/login_validation 并从那里函数 login_validation() 应该重定向到 main/members 或显示登录页面.但是当我提交表单时,会发生找不到对象的错误。有人可以帮我吗?

形式是

form_open('main/login_validation');

【问题讨论】:

确切的错误是什么? 主/成员是否应该是密码保护区域?如果是这样,我看不出您如何使用您提供的代码检查任何内容。 您还应该从视图中发布整个表单代码,以便我们可以准确地看到您要使用的内容。 members() 函数是否存在于main 控制器中?看起来您应该通过验证并被重定向 一些旁注。我看到您正在使用 MD5 来准备密码。 MD5 已过时,如果安全性对您很重要,则不应再使用。如果您使用的是 PHP 5.5,请查看 password_hash,或者如果使用 5.3 - 5.4,请查看 compatibility library。非常好,而且非常容易使用。其次,查看加载“登录”视图的代码重复。 redirect() 改为返回main/login。这也将阻止“您要再次提交吗?”错误。 【参考方案1】:

要回答我认为您的问题所在,您使用的 form_validation 类是错误的。您应该测试 form_validation->run() 是 TRUE(所有字段都通过了验证)还是 FALSE(一个或多个输入中有错误)。您编码的结构如下:

public function login_validation() 

    $this->load->library('form_validation');
    $this->form_validation->set_rules('email','Email','required');
    $this->form_validation->set_rules('password','Password','required|md5');
    if ($this->form_validation->run() === FALSE)
    
        $this->load->view('login');
    
    else
    
        redirect('main/members');
    

这在 CodeIgniter 文档here 中有介绍。

【讨论】:

他的第一个IF 正在检查TRUEif($this->form_validation->run()) 是检查布尔值的完全合法的方法。如果你要拼出TRUEFALSE,你也应该使用=== 很公平,我只是更喜欢按照文档所述的方式进行。感谢您对比较运算符的评论,我也将其更改为检查类型。【参考方案2】:

在你的控制器中..你可以试试这个..

function index()

 //This method will have the credentials validation
 $this->load->library('form_validation');

 $this->form_validation->set_rules('username', 'Username', 'required');
 $this->form_validation->set_rules('password', 'Password', 'required');

 if($this->form_validation->run() == FALSE)
 
 //Field validation failed.  User redirected to login page

 $this->load->view('login');

 
else


 $this->check_database();
     //redirect('home');
 


 function check_database()

//Field validation succeeded.  Validate against database
$username = $this->input->post('username');
$password = $this->input->post('password');

//query the database
$query_result = $this->model_login->login($username, $password);

if($query_result)



    $this->load->view('main/members');


else



    redirect('login');



在模型中

 function login($username,$password)

 $query = $this->db->query("SELECT * FROM `login` WHERE `username`= '".$username."' AND
          password='".$password."' LIMIT 1");


     if ($query->num_rows() > 0)
        return TRUE;
    else
        return FALSE;



 

【讨论】:

以上是关于在 codeigniter 上找不到对象的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter on xampp 错误:在此服务器上找不到请求的 URL

我该如何解决这个“找不到对象!” CodeIgniter-4 中的错误?

Codeigniter:调用控制器时出现 404

在“RKObjectManager”类型的对象上找不到属性“managedObjectStore”

在“CBPeripheral *”类型的对象上找不到属性“uuid”

在 GLKView 类型的对象上找不到属性“层”