-1

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

我使用以下代码在视图文件夹中创建了 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');

这是我的用户模型:

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;
}

任何帮助将不胜感激:)

4

3 回答 3

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。并且不要再告诉“我已经这样做了”,因为你没有,事实上你的每个问题仍然在 url 构建中再次显示相同的错误。

对不起,我很严厉,我希望最终能抓住一些东西。

于 2013-03-12T20:41:08.630 回答
0

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

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

目前,您正在从称为用户的文件夹/目录中加载 view_login.php。如果页面不在引用的目录中,您将收到 404 Page Not Found 错误。它不存在。

我认为这是一些错误,因为用户实际上是您的控制器,并且只能从以下形式使用:

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

除了您的 view_login.php 存在于称为用户的子目录中。

view/
    user/
        view_login.php

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

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 在子目录“模板”中。其中任何一个错误都会给您 404 错误。您可能想尝试通过回显一些字符串来注释掉您的负载视图和测试——只是为了证明您的代码都很好。

通过测试每个其他 url 是否正常工作来验证您是否可能受到 htaccess 文件的干扰。

[更新]

如果您怀疑您的表单操作是否正确,请尝试base_url()在配置正确的情况下使用。

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

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

就像我在评论中提到的那样,我没有看到您在代码中的任何地方使用 form_validation->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);
            }
于 2013-03-13T01:25:20.460 回答
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 是页面未找到

于 2013-03-12T20:14:42.990 回答