找不到404页面CodeIgniter登录

时间:2013-03-12 20:11:27

标签: php forms codeigniter login http-status-code-404

这是我第一次使用CodeIgniter,我正在尝试创建一个登录表单。每当我点击我创建的提交按钮时,就会发现404 Page Not Not Found错误。

我使用以下代码在view文件夹中创建了一个view_login.php:

<?php echo form_open('user/login') ?>
<ul>
<li>
<label> username </label>
<div>
<?php echo form_input(array('id' => 'username', 'name' => 'username')); ?>
</div>
</li>
<li>
<label> password </label>
<div>
<?php echo form_password(array('id' => 'password', 'name' => 'password')); ?>
</div>
</li>
<li><?php echo validation_errors(); ?></li>
<li>
<?php echo form_submit(array('name' => 'submit'), 'login'); ?>
</li>

这是我的user.php控制器:

<?php
class User extends CI_controller
{

public function __construct()
{
    parent::__construct();
    $this->load->model('user_model');
}


public function register()
{
$this->load->library('form_validation');


if($this->form_validation->run() == FALSE)
{
    $this->load->view('templates/header', $data);   
    $this->load->view('user/view_register');
    $this->load->view('templates/footer');
}

else
{
echo 'this is being processed. thank you'; 
}   

    $this->load->view('user/view_register');
}   

public function login()
{
$this->load->library('form_validation');

$data['title'] = 'Log In';

 $this->load->view('user/view_login'); 

 if ($this->form_validation->run() == FALSE)
 { 
    $this->load->view('templates/header', $data);   
    $this->load->view('user/view_login');
    $this->load->view('templates/footer');
 {
 else
 {
     $user_id = $this->User_model->check_login($this->input->post('username',
                $this->input->post('password');

这是我的User_model:

class User_model extends Model {

function User_model()
{
    parent::Model();
}

function check_login($username, $password)
{

$sha1_password = sha1($password);

$query_str = "SELECT user_id FROM users WHERE username = ? and password = ?";

$result = $this->db->query($query_str, array($username, $sha1_password));

if ($result->num_rows() ==1)
{
    return $result->row(0)->user_id;
}
else
{
    return false;
}

非常感谢任何帮助:)

3 个答案:

答案 0 :(得分:1)

我知道你最终会删除你的问题,就像你之前的三个(我知道的)一样,但是嘿。

你做了很多错事。我们做一些清理工作:

<?php  
class User extends CI_controller
{

// constructor is useless here, let's remove it.   

function index()
{
    redirect('login','refresh');
    // this is useless too, but just in case someone navigates to the url 'user'
}

function login()
{
    // you are calling form_validation methods, and loading the library _after_. 
    // It's the other way around.
    // Also, no need to load the form helper, it's already loaded
    // by the form_validation library

    $this->load->library('form_validation');
    $this->form_validation->set_rules('username', 'Username', 'required|trim|max_length[50]|xss_clean');
    $this->form_validation->set_rules('password', 'Password', 'required|trim|max_length[200]|xss_clean');

     $this->load->view('pages/view_login');

     if ($this->form_validation->run() == FALSE) {
         $this->load->view('view_login');
     {
     else {
        //extract($_POST);
        // this is quite bad practice imho (it's like goring back to register_globals).
        // You should fetch the post content directly:
         $user_id = $this->user_model->check_login($this->input->post('username',
                    $this->input->post('password');
      }    
  }
?>

现在,正如我在你之前提出的问题中所说的那样,这些问题都涉及到相同的404错误,我将再次告诉你:遵循手册。不要发明使用内置框架函数的新方法。他们是出于某种目的。

你应该打开这样的表格:

<?php echo form_open('user/login'); ?>

它将自己构建正确的URL。并且不要再说“我已经那样做了”,因为你没有,事实上你的每一个问题仍然在网址中再次出现同样的错误。

我很抱歉要苛刻,我希望最终会抓住一些东西。

答案 1 :(得分:0)

function user()
{
    parent::Controller();
}

应该是

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

你正在加载

$this->load->view('pages/view_login'); 
and
$this->load->view('view_login');

检查您的代码,确定这些视图同时存在? 我真的认为你可以删除所有这一部分:

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

另外,你在开放的表单中使用index.php,你是否正在使用htacces从url中删除它? 404未找到页面

答案 2 :(得分:0)

这就是你的问题所在。我怀疑你的控制器名称与视图中的子目录混淆:

$this->load->view('user/view_login'); 

目前,您正在从名为user的文件夹/目录加载view_login.php。如果页面不在引用的目录中,则会收到404 Page Not Found Error。它不存在。

我认为这是一个错误,因为用户实际上是您的控制器,只能从表单中使用:

<?php echo form_open('user/login'); ?>

除了你的view_login.php存在于一个名为user的子目录中。

view/
    user/
        view_login.php

尝试将view_login.php直接放入view文件夹并使用它来调用它:

view/
    view_login.php

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

同样,

$this->load->view('templates/header', $data);   
$this->load->view('user/view_login');
$this->load->view('templates/footer');

也表示header.php和footer.php在子目录“templates”中。任何这些错误都会给你404错误。你可能想尝试通过回显一些字符串来评论你的加载视图和测试 - 只是为了证明你的代码都很好。

通过测试每个其他网址是否正常运行,验证您是否可能受到htaccess文件的干扰。

[UPDATE]

如果您对表单操作是否正确有疑问,请尝试使用base_url(),如果配置正确的话。

<?php echo form_open(base_url().'user/login') ?>

那应该准确地指向站点/控制器/方法(功能)

就像我在评论中提到的那样,我没有看到你在代码中的任何地方使用form_validation-&gt; rule()。你可以检查它是否是假的。

将您的登录功能替换为以下功能并测试:

        public function login() {
        $this->load->library('form_validation');

        $data['title'] = 'Log In';
        if ($this->input->post()) {
            print_r(); //test if you have values

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

            //You could set delimiter

            if ($this->form_validation->run() == FALSE) {
                //What so ever you which to do if validation fails. { else {
                        $username = $this->input->post('username'); //Make your code a bit readable
                        $password = $this->input->post('password'); //Make your code a bit readable

                        $user_id = $this->User_model->check_login($username, $password);
                        $data["user_id"] = $user_id; //you can access $user_id from your view
                    }
                }
                //Pass $data to views, you might need it in more than one view. Also change directory from user to pages to match what you stated in comment below. And please make sure these views are in the directories specified below...

                $this->load->view('templates/header', $data);
                $this->load->view('pages/view_login', $data);
                $this->load->view('templates/footer', $data);
            }