Я пытаюсь понять, как использовать PHP
и использовать CodeIgniter
Framework. Я недавно следил за этим уроком:
http://www.codefactorycr.com/login-with-codeigniter–php.html
Я прошел его очень методично и был осторожен, чтобы я не делал ошибок при написании кода. Однако, когда я запускаю свой проект в браузере, я получаю эту ошибку после того, как попытаюсь отправить свои данные для входа.
Не найдено Запрошенный URL / LoginTut / login / VerifyLogin не найден на этом сервере.
Я столкнулся с подобной проблемой, не так давно, когда я следил за другим учебным пособием и не мог понять, что так отказался от проекта.
Вот как я настроил свой CI
routes.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
.
Это действие отправки формы входа
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>
Большое спасибо.
Я также ответил на ваш другой пост, но просто повторю:
Вы назвали ваш контроллер «verify_login.php», но ваш класс называется «VerifyLogin». В Codeigniter ваш класс должен быть назван так же, как ваш файл, просто заглавными буквами. Чтобы эта страница работала правильно, вы должны либо переименовать свой файл контроллера в «verifyLogin.php», либо переименовать свой класс в «Verify_Login».
Отключите перезапись на некоторое время. Сначала исправьте это с помощью обычных URL-адресов CodeIgniter:
URL-адреса CodeIgniter работают следующим образом:
<base_url>/<index-page>/<controller>/<methodOfController>/<parameters>
Когда вы запросили .../login/VerifyLogin
, которые не будут работать, так как логин и VerifyLogin являются контроллерами. CodeIgniter будет «думать», что вы хотите вызвать метод 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>