0 レビュー
1 回答
php-codeigniterのMVCチェーンを介してデータを適切に送信する
code igniterとMVCに慣れていないので、ゆっくりと、しかし確実に、データベースに保存したデータを介してユーザーにログインするためのログインフォームを取得しています。
現在のバージョンをフォーラムの記事やアドバイスからまとめましたが、データが適切に保存および送信されていないように見える理由について、現時点では少し混乱しています。
パスワードが正しくない場合にフォームを再ロードするようにログインフォームを設定しています(最終的にメッセージが追加されます)
そうは言っても、適切なログイン情報を入力すると、ページがリロードされます。これは、データベースと適切に通信していないか、 $data
変数を使用して情報を適切に送信または保存していないことを示しているだけです。
これが私がコードに関して持っているものです:
モデル:
<?php
クラスUser_modelはCI_Modelを拡張します{
関数__construct()
{{
//モデルコンストラクタを呼び出します
親::__construct();
}
function login($data = array())
{{
//データを検証します
if(!empty($data))はFALSEを返します。
//クエリを取得します
$ query = $ this-> db
-> from('users')
-> where($data)
-> get();
//クエリ行が存在するかどうかを確認します
if($ query-> row())
{{
//クエリ行が存在し、クエリ行を返します
$ query-> row();を返します。
}
そうしないと
{{
//クエリ行が存在しません。FALSEを返します
FALSEを返します。
}
}
}
表示:
title>Login</title>
<!--MAKE SURE SIGNED OUT HEADER IS IMPLEMENTED FOR ALL SIGNED OUT PAGES INCLUDING THIS ONE-->
<div class="structure clearfix">
<h1 class="title_header">
Sign In
</h1>
<div id="signin_form">
<?php
echo validation_errors();
echo form_open('auth/validate_credentials');
echo "<div class='form_text_signin'>";
echo "Email";
echo "</div>";
echo form_input('email');
echo "<div class='form_text_signin'>";
echo "Password";
echo "</div>";
echo form_input('password');
echo form_submit('submit', 'Submit');
echo form_close();
?>
</div>
</div>
コントローラー:
<?php
クラスAuthはCI_Controllerを拡張します{
関数__construct()
{{
//モデルコンストラクタを呼び出します
親::__construct();
}
//他の関数が呼び出されない場合、これは自動的に呼び出されます
//単に向きを変え、login()関数を呼び出してログインページを表示します
パブリック関数index(){
$ this-> login();
}
public function login(){
$data ['main_content'] ='auth / login';
$ this-> load-> view('includes / templates / main_page_template'、$data);
}
関数validate_credentials(){
$ query = $ this-> load-> model('user_model');
if($ query)
{{
{-コード-1}=array(
'email' => $ this-> input-> post('email')、
'password' => $ this-> input-> post('password')、
'is_logged_in' => true
);
$ this-> session-> set_userdata($data);
redirect('アカウント/ダッシュボード');
}
そうしないと
{{
$ this-> index();
}
}
}
よろしくお願いします。
わからない
0
レビュー
答え :
解決策:
どの時点でもuser_modelクラスからloginメソッドを呼び出しているようには見えません。クラスをインスタンス化しているだけです。コントローラからモデルメソッドを呼び出す必要があります-私はこのコードをテストしていませんが、うまくいけば正しい軌道に乗ることができます:
function validate_credentials () {
$this->load->model('User_model');
$data = array(
'email' => $this->input->post('email'),
'password' => $this->input->post('password')
);
$query = $this->User_model->login($data);
if($query)
{
$data['is_logged_in'] = true;
$this->session->set_userdata($data);
redirect('account/dashboard');
}
else
{
$this->index();
}
}
わからない
同様の質問
私たちのウェブサイトで同様の質問で答えを見つけてください。