1

在过去的几天里,我的挫败感上升到了新的高度。我试图在 codeigniter 中做一个简单的登录系统,但我无法让它正常工作。

提交登录表单时出现以下错误:

在此服务器上找不到请求的 URL /wishlist/login_controller/login。

这是表格:

<form method="post" action="<?php echo base_url()?>login_controller/login">
<input type="text"placeholder="E-mail" id="email" name="email">
<input type="password" placeholder="Password" id="password" name="password">
<input class="btn btn-primary span2" type="submit" id="sign-in" value="Sign In">
</form>

这是我在 login_controller 中的登录功能:

class Login extends CI_Controller {


function login() {

    $data['error'] = 0;

    if ($_POST) {

        $this->load->model('user_model');
        $email = $this->input->post('email', true);
        $password = $this->input->post('password', true);
        $user = $this->user_model->login($email, $password);

        if (!$user) {
            $data['error'] = 1;
        } else {
            $this->session->set_userdata('userID', $user['userID']);
            $this->session->set_userdata('firstname',    $user['firstname']);

            redirect(base_url().'admin_controller');

        }
    }

    $this->load->view('home_view');
}

我在本地主机上使用 wampserver。这是它尝试访问的 url:localhost/wishlist/login_controller/login

我是否正确假设 base_url() 之后的第一部分是控制器,第二部分是该控制器中的函数?

配置文件夹中的一些设置。

$config['base_url'] = '';
$config['index_page'] = 'index.php';
$route['default_controller'] = "site_controller";
4

4 回答 4

3

请重命名您的控制器

class Login extends CI_Controller {

class Login_Controller extends CI_Controller {

那么你可以做

<form method="post" action="<?php echo site_url('login_controller/login'); ?>">
<input type="text"placeholder="E-mail" id="email" name="email">
<input type="password" placeholder="Password" id="password" name="password">
<input class="btn btn-primary span2" type="submit" id="sign-in" value="Sign In">
</form>

然后使用这个:

$config['base_url'] = 'http://localhost/wishlist/';
$config['index_page'] = '';

和 htacees:

RewriteEngine On
RewriteBase /wishlist
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /wishlist/index.php/$1 [L]

如果还不够,请在以下行切换 config.php 文件:

| URI PROTOCOL
|--------------------------------------------------------------------------
|
| This item determines which server global should be used to retrieve the
| URI string.  The default setting of 'AUTO' works for most servers.
| If your links do not seem to work, try one of the other delicious flavors:
|
| 'AUTO'            Default - auto detects
| 'PATH_INFO'       Uses the PATH_INFO
| 'QUERY_STRING'    Uses the QUERY_STRING
| 'REQUEST_URI'     Uses the REQUEST_URI
| 'ORIG_PATH_INFO'  Uses the ORIG_PATH_INFO
|
*/
$config['uri_protocol'] = 'AUTO';

我使用 AUTO 也许你需要 QUERY_STRING 或 REQUEST_URI 选项

于 2012-11-24T17:44:28.530 回答
1

将您的 login() 方法更改为 user_login 之类的方法,因为如果您不将该方法用作构造函数,则对类和方法使用相同的名称是不正确的。

尝试像这样访问您的网址

http://localhost/wishlist/index.php/login/user_login

由于您没有更改任何 sttting 并且没有添加 htaccess 文件,因此您的代码应该可以正常访问,因此 codeiginter 具有访问 url 之类的模式

http://localhost/folder_name/index.php/controller_name/method_name

并且您的访问 URL 似乎不正确。

于 2012-11-24T18:04:37.910 回答
1

你同时有2个问题:

  1. 您的表单指向“login_controller”,而您的控制器被称为“登录”(这已经得到回答)。

  2. 不能有一个与您的控制器以相同方式命名的方法。

    此类方法(除非您的类在命名空间中,但 CodeIgniter 不是这种情况)作为类构造函数执行。

于 2012-11-24T18:51:41.723 回答
0

action="<?php echo base_url()?>login_controller/login">当控制器的名称为"login"and时,您调用method "login"

您需要致电 base_url('login/login'); 并确定,设置base_urlin config.php,您已设置 index_page 。

也许你没有.htaccess,那么你需要打电话mysite.com/index.php/login/login/

于 2012-11-24T18:07:52.637 回答