2014-04-02 47 views
1

我遇到问题加载函数login_validation一旦我点击登录按钮,我得到404错误,说它没有找到。我已经包含了下面两个相关页面的代码。codeigniter - 单击按钮时加载函数

的login.php:

<!DOCTYPE html> 
<html lang="en"> 
<head> 
<meta charset="utf-8"> 
<title>Login Page</title> 
</head> 
<body> 
    <div id="container"> 
    <h1>Login</h1> 
    <?php 
    echo form_open('main/login_validation'); 
    echo validation_errors(); 
    echo "<p>Email: "; 
    echo form_input('email'); 
    echo "</p>"; 
    echo "<p>Password: "; 
    echo form_password('password'); 
    echo "</p>"; 
    echo "<p>"; 
    echo form_submit('login_submit', 'Login'); 
    echo "</p>"; 
    echo form_close(); 
    ?> 
    </div> 
</body> 
</html> 

main.php:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Main extends CI_Controller { 

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

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

    public function members() { 
    $this->load->view('members'); 
    } 

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

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

没有人有任何想法,为什么这个功能不能正常工作?

+0

您是否有导入窗体帮助器? '$ this-> load-> helper('form');'你应该添加控制器的'构造器'。 – lighter

+0

我有$ autoload ['helper'] = array('form','url');在autoload.php文件中 – user3456633

回答

1

你确定你在login_validation()上获得404,而不是因为它找不到$this->load->library('form_validation');中的库吗?

尝试从login_validation()函数删除所有的线条和简单的把“echo inside login_validation();”看看你仍然得到404

也尝试改变echo form_open('main/login_validation');到 - >echo form_open('main/login_validation'/);注上月底

斜杠编辑:看过教程后您(https://www.youtube.com/watch?v=FmKm1gCgUoM)第1至3集。看起来您遇到的问题很可能与打字错误或使用mod重写和.HTACCESS

首先,我建议现在删除HTACCESS文件(或暂时重命名)并测试是否有效。然后返回并再次执行本教程的第一步。他在哪里解释,以取代RewriteBase确保您正确更换。我相信你的情况应该是/ci_intro/。它需要成为代码点火器目录的路径。但不管在此之前,只需删除.HTACCESS并确认其正常工作。

编辑2:看起来HTACCESS是一个教程中的问题,我可以看到几个人抱怨在YouTube的评论。我建议你重新开始并尝试新的教程。

本教程仅为“40分钟长”,看起来更为流行(2013年12月)了解如何使用它。让我知道你上车:)

http://www.revillweb.com/tutorials/codeigniter-tutorial-learn-codeigniter-in-40-minutes/

+0

未在此服务器上找到请求的URL /〜1103884/ci_intro/main/login_validation。 – user3456633

+0

一旦我填写表单并点击登录,我得到那个错误 – user3456633

+0

你用什么来访问'login'屏幕的确切url? – wired00

0

你从URL中移除你的index.php?

我有一台服务器(IIS 6)不能在重写规则,所以你的链接

/~1103884/ci_intro/main/login_validation 

/~1103884/ci_intro/index.php/main/login_validation 

这意味着你的表单链接应该反映的完整路径

* 编辑:放指数。PHP在错误的地方

+0

看起来更好地尝试OP - http://mi-linux.wlv.ac.uk/~1103884/ci_intro/index.php/main/这现在返回一个CI错误页面,而不是标准的404。这看起来像你已经删除了主控制器。如果你把它放回去,它应该再次工作。所以我认为整个问题在于你所遵循的假设使用HTACCESS的路径,但是因为你跳过了这一步,这意味着教程与你不兼容 – wired00

0

你有错误的字符串:

$this->form_validation->set_rules('email', 'Email', 'required|trim|xsss_clean'); 

“xsss_clean” - 可能是笨试图找到unexisting过滤器,这导致一个错误。 尝试解决此问题:

$this->form_validation->set_rules('email', 'Email', 'required|trim|xss_clean');