-1

CodeIgniter を使用するのはこれが初めてで、ログイン フォームを作成しようとしています。作成した送信ボタンをクリックすると、404 ページが見つかりませんというエラーが表示されます。

次のコードを使用して、view フォルダーに view_login.php を作成しました。

<?php echo form_open('user/login') ?>
<ul>
<li>
<label> username </label>
<div>
<?php echo form_input(array('id' => 'username', 'name' => 'username')); ?>
</div>
</li>
<li>
<label> password </label>
<div>
<?php echo form_password(array('id' => 'password', 'name' => 'password')); ?>
</div>
</li>
<li><?php echo validation_errors(); ?></li>
<li>
<?php echo form_submit(array('name' => 'submit'), 'login'); ?>
</li>

これは私の user.php コントローラーです:

<?php
class User extends CI_controller
{

public function __construct()
{
    parent::__construct();
    $this->load->model('user_model');
}


public function register()
{
$this->load->library('form_validation');


if($this->form_validation->run() == FALSE)
{
    $this->load->view('templates/header', $data);   
    $this->load->view('user/view_register');
    $this->load->view('templates/footer');
}

else
{
echo 'this is being processed. thank you'; 
}   

    $this->load->view('user/view_register');
}   

public function login()
{
$this->load->library('form_validation');

$data['title'] = 'Log In';

 $this->load->view('user/view_login'); 

 if ($this->form_validation->run() == FALSE)
 { 
    $this->load->view('templates/header', $data);   
    $this->load->view('user/view_login');
    $this->load->view('templates/footer');
 {
 else
 {
     $user_id = $this->User_model->check_login($this->input->post('username',
                $this->input->post('password');

これが私のUser_modelです:

class User_model extends Model {

function User_model()
{
    parent::Model();
}

function check_login($username, $password)
{

$sha1_password = sha1($password);

$query_str = "SELECT user_id FROM users WHERE username = ? and password = ?";

$result = $this->db->query($query_str, array($username, $sha1_password));

if ($result->num_rows() ==1)
{
    return $result->row(0)->user_id;
}
else
{
    return false;
}

どんな助けでも大歓迎です:)

4

3 に答える 3

1

以前の 3 つ (私が知っている) で行ったように、最終的には質問を削除することになると思いますが、ねえ。

あなたは多くのことを間違っています。いくつかのクリーンアップをしましょう:

<?php  
class User extends CI_controller
{

// constructor is useless here, let's remove it.   

function index()
{
    redirect('login','refresh');
    // this is useless too, but just in case someone navigates to the url 'user'
}

function login()
{
    // you are calling form_validation methods, and loading the library _after_. 
    // It's the other way around.
    // Also, no need to load the form helper, it's already loaded
    // by the form_validation library

    $this->load->library('form_validation');
    $this->form_validation->set_rules('username', 'Username', 'required|trim|max_length[50]|xss_clean');
    $this->form_validation->set_rules('password', 'Password', 'required|trim|max_length[200]|xss_clean');

     $this->load->view('pages/view_login');

     if ($this->form_validation->run() == FALSE) {
         $this->load->view('view_login');
     {
     else {
        //extract($_POST);
        // this is quite bad practice imho (it's like goring back to register_globals).
        // You should fetch the post content directly:
         $user_id = $this->user_model->check_login($this->input->post('username',
                    $this->input->post('password');
      }    
  }
?>

さて、あなたの以前の質問で言ったように、すべて同じ正確な 404 エラーを扱っていましたが、もう一度言います: マニュアルに従ってください。組み込みのフレームワーク関数を使用する新しい方法を発明しないでください。彼らは目的のためにそこにいます。

次のようにフォームを開く必要があります。

<?php echo form_open('user/login'); ?>

それ自体で正しい URL を構築します。そして、「私はすでにそれをやった」と再び言わないでください。実際、あなたのすべての質問は、URL構築で同じ間違いを繰り返しています。

辛口で申し訳ありませんが、最終的に何かが理解されることを願っています。

于 2013-03-12T20:41:08.630 に答える
0

これが問題の可能性がある場所です。ビュー内のサブディレクトリとコントローラー名を混同していると思われます。

$this->load->view('user/view_login'); 

現在、ユーザーとして知られているフォルダー/ディレクトリから view_login.php をロードしています。ページが参照されたディレクトリにない場合、404 ページが見つかりませんというエラーが発生します。それは存在しない。

user は実際にはあなたのコントローラーであり、次のようにフォームからのみ使用する必要があるため、これはエラーだと思います。

<?php echo form_open('user/login'); ?>

ユーザーとして知られているサブディレクトリにview_login.phpが存在することを除いて。

view/
    user/
        view_login.php

view_login.php をビュー フォルダーに直接配置し、これを使用して呼び出します。

view/
    view_login.php

$this->load->view('view_login');

同じように、

$this->load->view('templates/header', $data);   
$this->load->view('user/view_login');
$this->load->view('templates/footer');

また、header.php と footer.php がサブディレクトリ「templates」にあることも意味します。これらのいずれかでエラーが発生すると、404 エラーが発生します。負荷ビューをコメントアウトして、文字列をエコーアウトしてテストすることをお勧めします。これは、コードがすべて正常であることを証明するためだけです。

他のすべての URL が正常に機能するかどうかをテストして、htaccess ファイルからの干渉を受けている可能性があるかどうかを確認します。

[アップデート]

フォーム アクションが正しいかどうか疑問がある場合はbase_url()、それが正しく構成されている場合に使用してみてください。

<?php echo form_open(base_url().'user/login') ?>

サイト/コントローラー/メソッド(関数)を正確に指す必要があります

コメントで述べたように、コードのどこにも form_validation->rule() を使用していません。それが偽かどうかを確認することができます。

ログイン関数を以下のものに置き換えてテストします。

        public function login() {
        $this->load->library('form_validation');

        $data['title'] = 'Log In';
        if ($this->input->post()) {
            print_r(); //test if you have values

            $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');
            $this->form_validation->set_rules('password', 'Password', 'trim|required|xss_clean');

            //You could set delimiter

            if ($this->form_validation->run() == FALSE) {
                //What so ever you which to do if validation fails. { else {
                        $username = $this->input->post('username'); //Make your code a bit readable
                        $password = $this->input->post('password'); //Make your code a bit readable

                        $user_id = $this->User_model->check_login($username, $password);
                        $data["user_id"] = $user_id; //you can access $user_id from your view
                    }
                }
                //Pass $data to views, you might need it in more than one view. Also change directory from user to pages to match what you stated in comment below. And please make sure these views are in the directories specified below...

                $this->load->view('templates/header', $data);
                $this->load->view('pages/view_login', $data);
                $this->load->view('templates/footer', $data);
            }
于 2013-03-13T01:25:20.460 に答える
0
function user()
{
    parent::Controller();
}

する必要があります

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

あなたも読み込んでいます

$this->load->view('pages/view_login'); 
and
$this->load->view('view_login');

コードを確認してください。これらのビューが両方とも存在することを確認してください。また、この部分をすべて削除できると本当に思います:

function index()
{
    $this->login();
}

また、フォーム オープンで index.php を使用していますが、htacces を使用して URL から削除していますか? 404はページが見つかりません

于 2013-03-12T20:14:42.990 に答える