0

ログイン システムを作成するために、私はこのチュートリアル (www.codefactorycr.com/login-with-codeigniter-php.html) を使用しています。問題は、データベースのユーザー名とパスワードをフォームに入力してログインをクリックすると、404 エラー ページが表示され、verifylogin.php が見つからないことです。以下にすべてのファイルを含めましたが、これがhome.phpにログインしていない理由をまだ理解できません

Autoload.php

        Prototype:
        $autoload['libraries'] = array('database', 'session', 'xmlrpc');


        $autoload['libraries'] = array();

ルート.php

          $route['login'] = "login";
          $route['news/update/(:num)'] = 'news/update/$1';
          $route['news/create'] = 'news/create';
          $route['news/(:any)'] = 'news/view/$1';
          $route['news'] = 'news';
          $route['(:any)'] = 'pages/view/$1';
          $route['default_controller'] = 'pages/view';

config.php

          $config['base_url']   = 'http://shaek.co.uk/codeigniter';
          $config['index_page'] = 'index.php';

コントローラー - login.php

               <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

               class Login extends CI_Controller {

                function __construct()
                {
                    parent::__construct();
                }

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

              }

           ?>

コントローラー - verifylogin.php

         <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

      class VerifyLogin extends CI_Controller {

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

          function index()
                   {
         //This method will have the credentials validation
             $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)
              {
       //Field validation failed.  User redirected to login page
          $this->load->view('login_view');
          }
             else
             {
              //Go to private area
             redirect('home_view', 'refresh');
            }

            }

            function check_database($password)
            {
                //Field validation succeeded.  Validate against database
                  $username = $this->input->post('username');

               //query the database
                    $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

            <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
       session_start(); //we need to call PHP's session object to access it through CI
       class Home extends CI_Controller {

              function __construct()
            {
              parent::__construct();
            }

              function index()
            {
              if($this->session->userdata('logged_in'))
            {
            $session_data = $this->session->userdata('logged_in');
            $data['username'] = $session_data['username'];
            $this->load->view('home_view', $data);
           }
               else
              {
                 //If no session, redirect to login page
                   redirect('login', 'refresh');
               }
             }

                 function logout()
             {
                $this->session->unset_userdata('logged_in');
                session_destroy();
                redirect('home', 'refresh');
              }

           }

        ?>

モデル - users.php

              <?php
                 Class User extends CI_Model
              {
                function login($username, $password)
              {
                 $this -> db -> select('id, username, password');
                 $this -> db -> from('users1');
                 $this -> db -> where('username', $username);
                 $this -> db -> where('password', MD5($password));
                 $this -> db -> limit(1);

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

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

ビュー - home_view.php

            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
        <html xmlns="http://www.w3.org/1999/xhtml">
      <head>
      <title>Simple Login with CodeIgniter - Private Area</title>
      </head>
        <body>
          <h1>Home</h1>
               <h2>Welcome <?php echo $username; ?>!</h2>
                <a href="home/logout">Logout</a>
            </body>
             </html>

ビュー - login_view.php

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
   <title>Simple Login with CodeIgniter</title>
   </head>
   <body>
      <h1>Simple Login with CodeIgniter</h1>
     <?php echo validation_errors(); ?>
      <?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>
         </body>
         </html>
4

3 に答える 3

0

" Controller - verifylogin.php"クラス名をVerifyLoginからVerifyloginに変更し、機能するかどうかを確認します。

コントローラ名が見つからないようです。クラス名が原因である可能性があります。

verifylogin.phpusenameの前にある「'」を見逃していることがもう1つあります。から変更する:

 $sess_array = array(
               'id' => $row->id,
                username' => $row->username

);

に:

 $sess_array = array(
               'id' => $row->id,
                'username' => $row->username

);
于 2013-03-13T16:49:31.777 に答える
0

関連して、モデル クラス名を「User」ではなく「Users」に変更する必要もあります。


Jaspalが指摘したように必要ありません:

コントローラー/クラス名に問題があります。

コントローラーに「verifylogin.php」という名前を付ける場合、クラスには最初の文字だけを大文字にして同じ名前を付ける必要があります。クラスに「VerifyLogin」という名前を付けました。「Verifylogin」である必要があります。

于 2013-03-13T15:08:56.927 に答える
0

まず、

$route['(:any)'] = 'pages/view/$1'; 
//((:any) will match a segment containing any character.) 
//and throw it to pages/view/$1

に変更することをお勧めします

$route['pages/view/(:any)'] = 'pages/view/$1'; 

http://shaek.co.uk/codeigniter/index.php/verifylogin自体が404ページを提供しています

また、http://shaek.co.uk/codeigniter/index.php/pages/view/にはアクセスできません。内部ルーティングにより、リクエストがページ コントローラー ビュー アクションに渡されます。

于 2013-03-13T15:06:31.713 に答える