3

私はCodeIgniterが初めてで、 CodeIgniter_2.1.3を使用しています。私はNETTUTS CodeIgniterチュートリアルに従っています。md5()関数 [暗号化されたパスワードなし] なしでうまく動作する codeIgniter を使用したログイン システムを開発したいと考えています。次に、 md5()関数を使用して、暗号化されたパスワードで新しいテーブルを作成します。その後、ログインコードは機能しません。私のコードは::

ビュー/login_form.php

<?php   
      // form design       

     echo form_open("login/validate") . "<br/>";    
     echo form_input("username", "Username") . "<br/> <br/>";
     echo form_password("password", "password") . "<br/> <br/>";
     echo form_submit("submit", "Login") . "<Br/> <Br/>";

     echo anchor("login/sign_up", "Create Account"); 

 ?>

コントローラー/login.php

 <?php
     class Login extends CI_Controller {

        function index() {   // function of loading login page
           $data['main_content'] = "login_form";   // name of login page

           $this->load->view("includes/templet", $data);  
        }

    function validate() {   // form validation          
        $this->load->model("membership_model");    // load "membership_model" 
        $query = $this->membership_model->validate_user();   // check validation

        if( $query )  {     // if data found
            $data = array(  // value which is to be inserted into session
                "username" => $this->input->post("username"),
                "is_logged_in" => true
            );

            $this->session->set_userdata($data);  // insert value into session
            redirect("site/members_area");   // go to predefined page
        }
        else {
            // if data not found then go to login_form page
            $this->index();
        }  
    }

    // create account  
    function sign_up() {
        $data['main_content'] = "sign_up";

        $this->load->view("includes/templet", $data);
    }

    // insert data into database
    function create_member()  {

        $this->load->library("form_validation");  // load form_validation library

        $this->form_validation->set_rules("username", "Username", "trim|required");
        $this->form_validation->set_rules("password", "Enter Password", "trim|required|min_length[4]|max_length[32]");
        $this->form_validation->set_rules("re_password", "Confirm password", "trim|required|matches[password]");

        $this->form_validation->set_rules("email", "Email Address", "trim|required|valid_email");

        if(  $this->form_validation->run() == FALSE )  {
            $this->load->view("sign_up");
        }
        else {
            $this->load->model("membership_model");

            if( $query =  $this->membership_model->create_member() )  {
               // redirect("site/members_area");
                $data['main_content'] = "signup_success";

                $this->load->view("includes/templet", $data);
            }
            else {
                $this->load->view("sign_up");
            }
        }
      }
    }

 ?>

モデル/メンバーシップ_モデル

 <?php   

     class Membership_model extends CI_Model {
        function validate_user() {
           $this->db->where('username', $this->input->post('username'));
           $this->db->where('password', md5($this->input->post('password')));

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

           if( $query->num_rows == 1 )  {
              return true;
           }
       }

       function create_member()  {
          $new_member_insert_data = array(                 
              'username' => $this->input->post("username"),
              'password' => md5($this->input->post("password")),
              'email'    => $this->input->post("email")                 
          );

          $insert = $this->db->insert("user", $new_member_insert_data);

          return true;
      }
   }     

 ?>
4

3 に答える 3

3

md5 パスワードについて は、データベース フィールドを確認してください。md5 は 32 文字を生成するためです。テーブル フィールドを varchar(32) に変更します。

$data=array( 
            'password' => md5($this->input->post('password')),
          );
于 2015-05-08T04:52:57.633 に答える
0

このステートメントを次のように変更するだけです

if( $query->num_rows == 1 )

if( $query->num_rows() == 1 )

それrow()はあなたの

モデル/membership_model.php

できます

于 2018-02-28T10:04:45.213 に答える