質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

Q&A

解決済

1回答

2931閲覧

ログイン画面にDBに登録されている名前を表示させたい

SayakaxxSakura

総合スコア19

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CodeIgniter

CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

0グッド

0クリップ

投稿2018/06/29 04:29

PHPバージョン 7.2.3
mysql バージョン 5.0.12
codeigniter3系
開発環境 xamppローカルホスト

Codeigniter3を用いて、会員登録ログイン機能を実装中です。
基本的な流れの

【新規会員登録】→ 【メール送信】→ 【仮登録】 → 【本会員登録】 → 【ログイン】 → 【会員ページ】
までは実装が完了しました。

ログイン後に、DBに登録されている名前を表示させて
ようこそ!〇〇さんと表示させたいのですが、なかなかうまくいきません。

処理の流れとして、ログインテンプレートから入力された値がlogin_validation()
を通り、入力された値が正しければセッションに値を格納して、メンバーズページにリダイレクト
するというシンプルなものです。

イメージとして、入力されたメールアドレスとDBに登録されているメールアドレス
を比較し正しければ、比較したメールアドレスが登録されているDBのフィールドの名前を取得し
それを表示させる事で実装できるかと思い、$this->db->where()を用いて
実装しようとしたり、in_array()で実装させたりしようとはしましたが
うまくいきませんでした。

DBのテーブル内の全件取得は出来ております。

何卒よろしくお願い致します。

PHP

1//モデル 2 3public function get_users_data($email = NULL) 4 { 5 $query = $this->db->get("users"); 6 //usersテーブルからすべての値を取得 7 return $query -> result(); 8 9 $query = $this->db->get_where('users', array('email' => $email)); 10 return $query->row_array(); 11 12 } 13

PHP

1//コントローラー 2 3 /*-------------------------------------------------- 4 | ログインバリデーション 5 ----------------------------------------------------*/ 6 public function login_validation() 7 { 8 $this->load->library("form_validation"); 9 10 $this->form_validation->set_rules("email","メール","required|trim|callback_validate_credentials"); 11 $this->form_validation->set_rules("password","パスワード","required|md5|trim"); 12 if($this->form_validation->run()) 13 { //バリデーションエラーがなければ 14 $data = array( 15 "email" => $this->input->post("email"), 16 "is_logged_in" => 1 17 ); 18 $this->session->set_userdata($data); 19 redirect("main/members"); 20 } else { 21 echo "ログインに失敗しました。"; 22 echo validation_errors(); 23 redirect("main/login.tpl"); 24 } 25 $session = $this->session->all_userdata(); 26 $this->smarty->assign('session',$session); 27 } 28 29 /*-------------------------------------------------- 30 | 会員ページ 31 ----------------------------------------------------*/ 32 33 public function members() 34 { 35 $this->load->model('Users_model'); 36 if($this->session->userdata("is_logged_in")) { 37 $this->get_users(); 38 $this->smarty->view("main/members.tpl"); 39 } else { 40 $this->smarty->view("main/restricted.tpl"); 41 } 42 } 43 44 /*-------------------------------------------------- 45 | 会員情報の呼び出し 46 ----------------------------------------------------*/ 47 48 public function get_users() 49 { //モデルの読み込み 50 $this->load->model('Users_model'); 51 52 //usersDBのデータを全件取得 53 $data['results'] = $this->Users_model->get_users_data(); 54 var_dump($data); 55 56 //入力フォームで受け取ったメールアドレスを取得 57 $getMail = $_SESSION['email']; 58 59 //DB内に保存されているusersテーブルから入力されたメールアドレスと一致するフィールドを検索 60 61 //一致するカラムの中の$nick_nameを取得し変数に格納 62 63 //$nick_nameを表示用にSmartyにアサイン 64 65 //$this->smarty->assign('nick_name',$nick_name); 66 $this->smarty->assign('user_data',$data); 67 } 68

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

php

1 //usersDBのデータを全件取得 2 $data['results'] = $this->Users_model->get_users_data();

で、get_users_dataメソッドの引数が指定されていない=null扱いになっているので、get_whereで「メールアドレスがnullの人」を探す⇒存在しないので取得できない、ということではないかと思われます。

ログインユーザーの情報を取得したいのであれば、この次の行で記載されている「入力フォームで受け取ったメールアドレスを取得」をこの処理の前に移動し、取得したメールアドレスをを引数として設定してください。

php

1 $getMail = $_SESSION['email']; 2 $data['results'] = $this->Users_model->get_users_data($getMail); 3 var_dump($data);

投稿2018/06/29 05:09

nak

総合スコア696

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SayakaxxSakura

2018/06/29 06:18

nak様 ありがとうございます、早速試したてみたのですが、 結果出力に変化は見られませんでした。 現状var_dump()でとれている値は、usersテーブルに登録されている全ての値が表示されています。
nak

2018/06/29 09:46 編集

いま、おそらく「全件なら取得できることを確認するテスト」のために、モデルクラスに --- $query = $this->db->get("users"); //usersテーブルからすべての値を取得 return $query -> result(); $query = $this->db->get_where('users', array('email' => $email)); return $query->row_array(); --- と書かれているかと思います。 このモデルの --- $query = $this->db->get("users"); //usersテーブルからすべての値を取得 return $query -> result(); --- の部分は「全件取得してreturnする」処理ですので、この3行を削除してください。 残った --- $query = $this->db->get_where('users', array('email' => $email)); return $query->row_array(); --- が「emailを指定してusersテーブルからデータを取得し、1件目の結果を配列で返す」処理です。
SayakaxxSakura

2018/07/02 04:42

ありがとうございます!参考に致します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問