私は頭を悩ま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>
どうもありがとう。