2

私は頭を悩まPHPせ、フレームワークを使用しようとしていCodeIgniterます。私は最近、このチュートリアルに従っています:

http://www.codefactorycr.com/login-with-codeigniter-php.html

私は非常に整然とそれを行い、コードを書く際にエラーがないように注意しました. ただし、プロジェクトをブラウザーで実行すると、ログインの詳細を送信しようとすると、このエラーが発生します。

見つかりません 要求された URL /LoginTut/login/VerifyLogin がこのサーバーで見つかりませんでした。

少し前に別のチュートリアルに従っていたときに同様の問題に遭遇し、それを理解できなかったため、プロジェクトを放棄しました。

これがCIの構成方法です

ルート.php

$route['default_controller'] = "login";

config.php

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

これを空白のままにしました。

$config['index_page'] = '';

また、関連するすべてのライブラリとヘルパーをロードしていることも確認しました。

autoload.php

$autoload['libraries'] = array('database', 'session'); $autoload['helper'] = array('url');

以下は私のPHPファイルのすべてです..

user.php

class User extends CI_Model{
function login($username, $password){
    $this -> db -> select('id, username, password');
    $this -> db -> from ('users');
    $this -> db -> where ('username', $username);
    $this -> db -> where ('password', md5($password));
    $this -> db -> limit(1);

    $query = $this  -> db -> get();

    if($query -> num_rows() == 1){
        retrun $query->result();
    }
    else{
        return false;
    }
}

}

login_view.php

   <?php echo form_open('VerifyLogin'); ?>
     <label for="username">Username:</label>
     <input type="text" size="20" id="username" name="username"/>
     <br/>
     <label for="password">Password:</label>
     <input type="password" size="20" id="passowrd" name="password"/>
     <br/>
     <input type="submit" value="Login"/>
   </form>

login.php

class Login extends CI_Controller{
    function _construct(){
        parent::_construct();
    }

    function index(){
        $this->load->helper(array('form'));
        $this->load->view('login_view');
    }
}

verify_login.php

class VerifyLogin extends CI_Controller{

function _construct(){
    parent::_construct();
    $this->load->model('user', '', TRUE);
}

function index(){
    $this->load->library('form_validation');
    $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
    $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean|callback_check_database');

    if($this->form_validation->run() == FALSE){
        //Validation failed, user redirected to login page...
        $this->load->view('login_view');
    }
    else{
        //Login success. Go to members only area
        redirect('home', 'refresh');
    }
}

function check_database($password){
    //Field validation succeeded. Validate against db
    $username = $this->input->post('username');
    //query db
    $result = $this->user->login($username, $password);

    if($result){
        $sess_array = array();
        foreach($result as $row){
            $sess_array = array(
                    'id' => $row->id,
                    'username' => $row->username
                );
            $this->session->set_userdata('logged_in', $sess_array);
        }
        return TRUE;
    }
    else{
        $this->form_validation->set_message('check_database', 'Invalid username or password');
        return false;
    }
}

}

ユーザーは正常にログインして、ファイルhome.phpをロードするコントローラーに到達できる必要がありhome_view.phpます。

これは、ログイン フォームの Post アクションです。

http://localhost/LoginTut/login/VerifyLogin

この問題に関連する助けがあれば本当にありがたいです。私は何日も苦労してきましたが、本当にイライラし始めています。私のコード内で非常に小さな問題が発生していると感じています。それを理解するだけの知識がありません。

注: フォーラムで .htaccess の問題に関係している可能性があると読みましたが、それが何であるかはわかりません!

.htaccess ファイル

<IfModule mod_rewrite.c>
RewriteEngine On
#Removes access to the system folder by users.
#Additionally this will allow you to create a System.php controller,
#previously this would not have been possible.
#'system' can be replaced if you have renamed your system folder.
RewriteCond %{REQUEST_URI} ^system.*
RewriteRule ^(.*)$ index.php?/$1 [L]

#When your application folder isn't in the system folder
#This snippet prevents user access to the application folder
#Submitted by: Fabdrol
#Rename 'application' to your applications folder name.
RewriteCond %{REQUEST_URI} ^LoginTut.*
RewriteRule ^(.*)$ index.php?/$1 [L]

#Checks to see if the user is attempting to access a valid file,
#such as an image or css document, if this isn't true it sends the
#request to index.php
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?$1 [L]
</IfModule>
<IfModule !mod_rewrite.c>
 ErrorDocument 404 index.php
</IfModule>

どうもありがとう。

4

2 に答える 2

2

私はあなたの他の投稿にも答えましたが、繰り返しになります:

コントローラに「verify_login.php」という名前を付けましたが、クラスには「VerifyLogin」という名前を付けています。Codeigniterでは、クラスにファイルと同じ名前を付ける必要がありますが、大文字だけを使用します。そのページが正しく機能するためには、コントローラーファイルの名前を「verifyLogin.php」に変更するか、クラスの名前を「Verify_Login」に変更する必要があります。

于 2013-02-18T17:43:06.077 に答える
1

しばらく書き換えをオフにします。まず、通常の CodeIgniter URL でこれを修正します。

CodeIgniter の URL は次のように機能します。

<base_url>/<index-page>/<controller>/<methodOfController>/<parameters>

loginVerifyLoginの両方がコントローラーであるため、リクエスト.../login/VerifyLoginしても機能しません。CodeIgniter は、コントローラ クラスloginでメソッドVerifyLogin()を呼び出す必要があると「考え」ます。代わりに を呼び出す必要があります。.../VerifyLogin/index

あなたは$config['index_page']空のままにしました。CodeIgniter では、コントローラーのメソッドを直接呼び出すことはできません。CodeIgniter に任せてください。これは、CodeIgniter を最初に実行する必要があり、次に URL を解析して、要求を正しいコントローラーとメソッドに委譲することを意味します。これが構成 *index_page* の目的です - CodeIgniter を開始します。このファイルを介してすべてのリクエストを実行する必要があります。

CodeIgniter にはindex.phpが含まれています (行で終わりますrequire_once BASEPATH.'core/CodeIgniter.php';)。これを index_page として使用します。

これを行うと、完全な URL は次のようになります。

http://localhost/LoginTut/index.php/VerifyLogin/index/<parameters>
于 2013-02-18T17:19:13.457 に答える