0

したがって、対応するビューを指す「ダッシュボード」コントローラーがあります。このファイルには、 にアクセスするだけでいつでもアクセスできますhttp://domain.com/dashboard。ただし、ユーザーが既にログインしている場合にのみ、この URL にアクセスしたいと考えています。そうでない場合は、ホームページにリダイレクトされます。

だから2つの部分の質問:

  1. ユーザーが最初にログインしていない場合に「ダッシュボード」にアクセスできないようにするにはどうすればよいですか (それ以外の場合はホームページにリダイレクトする必要があります)...編集: この問題は修正され、以下のコードが更新されました

  2. 登録コントローラーで、ユーザーが機能に誘導されるthank()(登録ありがとうページに移動する) 代わりに、ユーザーを自動的にログインさせてダッシュに連れて行くにはどうすればよいですか?

これが私の「ダッシュボード」コントローラーです。編集:正常に動作するようになりました。上記の 2 番目 (2) の問題はまだ残っています。

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

class Dashboard extends CI_Controller{

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

public function index()
public function index()
{
    $session = $this->session->userdata('logged_in');

    if ($session == 1) 
    {
        $data['title'] = 'Dashboard';
        $this -> load -> view('shared/header_view', $data);
        $this -> load -> view('dash', $data);
        $this -> load -> view('shared/footer_view', $data);
    }
    else {
        redirect('register');
    }
}
}

ユーザーをログイン、ログアウト、および登録する登録コントローラーは次のとおりです。

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

class Register extends CI_Controller {

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

public function index() 
{
    if (($this -> session -> userdata('user_name') != "")) {
        $this -> welcome();
    } 
    else
    {
        $data['title'] = 'Home';
        $this -> load -> view('shared/header_view', $data);
        $this -> load -> view("registration_view.php", $data);
        $this -> load -> view('shared/footer_view', $data);
    }
}

public function welcome() 
{
     redirect('/dashboard/', 'refresh');
}

public function login() 
{
    $email = $this -> input -> post('email');
    $password = md5($this -> input -> post('pass'));

    $result = $this -> user_model -> login($email, $password);
    if ($result)
        $this -> welcome();
    else
        $this -> index();
}

public function thank() 
{
    $data['title'] = 'You are now registered!';
    $this -> load -> view('shared/header_view', $data);
    $this -> load -> view('thank_view.php', $data);
    $this -> load -> view('shared/footer_view', $data);
}

public function registration() 
{
    $this -> load -> library('form_validation');
    // field name, error message, validation rules
    $this -> form_validation -> set_rules('user_name', 'User Name', 'trim|required|min_length[4]|xss_clean');
    $this -> form_validation -> set_rules('email_address', 'Your Email', 'trim|required|valid_email');
    $this -> form_validation -> set_rules('password', 'Password', 'trim|required|min_length[4]|max_length[32]');
    $this -> form_validation -> set_rules('con_password', 'Password Confirmation', 'trim|required|matches[password]');

    if ($this -> form_validation -> run() == FALSE) 
    {
        $this -> index();
    } 
    else 
    {
        $this -> user_model -> add_user();
        $this -> thank();
    }
}

public function logout() 
{
    $newdata = array('user_id' => '', 'user_name' => '', 'user_email' => '', 'logged_in' => FALSE, );
    $this -> session -> unset_userdata($newdata);
    $this -> session -> sess_destroy();
    redirect('/', 'refresh');
}

}

編集: 要求どおり、user_model は次のとおりです。

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

class User_model extends CI_Model {

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

function login($email, $password) 
{
    $this -> db -> where("email", $email);
    $this -> db -> where("password", $password);

    $query = $this -> db -> get("user");
    if ($query -> num_rows() > 0) 
    {
        foreach ($query->result() as $rows) 
        {
            //add all data to session
            $newdata = array(
                'user_id' => $rows -> id,
                'user_name' => $rows -> username,
                'user_email' => $rows -> email,
                'logged_in' => TRUE,
            );
        }
        $this -> session -> set_userdata($newdata);
        return true;
    }
    return false;
}

public function add_user() 
{
    $data = array(
        'username' => $this -> input -> post('user_name'),
        'email' => $this -> input -> post('email_address'),
        'password' => md5($this -> input -> post('password')),
    );
    $this -> db -> insert('user', $data);
}

}

コードイグナイター初心者。私は何を間違っていますか?

4

1 に答える 1

1

ダッシュボード コントローラーのこのルールは少し奇妙に見えます。

if ($session == 0)

ユーザー名は本当に0ですか?? または、このセッションでブール値を保存していますか。user_model も投稿して、そこで何をしているかを確認する必要があります。

ユーザーにログインして、次のようにセッションを設定する必要があります。

$qry = $this->db->query("Select * from users where username = '$username' AND password = '$password'");
if( $qry->num_results > 0 )
{
    $this->session->set_userdata(array('logged_in' => true);
    redirect('dashboard');
}

ユーザーがダッシュボードにアクセスしようとすると、次のようなチェックを実行します。

if( !$this->session->userdate('logged_in') )
{
     redirect(base_url());
}

したがって、logged_in セッションがないか、セッションが false の場合 => リダイレクトします。

ユーザー登録時も同様です。ユーザーが正常に登録され、データベースに追加されたら、ログイン機能で行ったようにセッションを作成し、ダッシュボードにリダイレクトします。

于 2012-10-22T13:51:35.117 に答える