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

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

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

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

CodeIgniter

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

受付中

CodeIgniter(PHP)において$this->session->set_userdataでセッションが利用できない件に関して

xsaxs
xsaxs

総合スコア2

PHP

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

CodeIgniter

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

1回答

0リアクション

0クリップ

457閲覧

投稿2022/08/27 09:00

編集2022/08/28 09:55

質問

MacbookでCodeIgniter3.06を使用してsessionを使用して簡単なアプリを作ろうとしております。その際に下記の部分でsessionがうまく表示されず詰まっております。よろしくお願いいたします。

写真

イメージ説明

目標

写真の yourname is 〇〇
の部分にセッションで保存した名前を表示すること

コード

Controler/Main.php

コード <?php defined('BASEPATH') or exit('No direct script access allowed'); class Main extends CI_Controller { public function login_validation(){ $this->load->library("form_validation"); $this->form_validation->set_rules("username", "Username", "required|trim|callback_validate_credentials"); $this->form_validation->set_rules("password", "Password", "required|trim|md5"); if($this->form_validation->run()){ //このページでセッションを確認する redirect("main/registration"); }else{ $this->load->view('body_login'); } } public function validate_credentials(){ $this->load->model("news_model"); if ($this->news_model->can_log_in()){ return true; }else{ //ログインが失敗した際のこちらのフラッシュデータは問題なく表示されます。 $this->session->set_flashdata("message", "incorrect username or password"); return false; } } }

Model / News_model.php

コード <?php class News_model extends CI_Model { public function can_log_in(){ $this->db->where('username', $this->input->post('username')); $this->db->where('password', md5($this->input->post('password'))); $query = $this->db->get("accounts"); if ($query->num_rows() == 1) { $row = $query->row(); $data = array( "username" => $row->username ); //var_dump($data);の結果は下記に記載 $this->session->set_userdata($data); return true; }else{ return false; } } }

View( redirect("main/registration")で表示されるページのコード)

コード <!DOCTYPE html> <html lang="en"> <head> <link rel="stylesheet" href="<?php echo base_url(); ?>assets/bootstrap-3.4.1-dist/css/bootstrap.min.css"> </head> <body> <h1><?= "yourname is" . $this->session->username ?></h1> <!-- 開発用 --> <h1><?= $this->session->username; ?></h1> <h1><?php echo print_r($this->session->all_userdata()); ?></h1> <?php echo $this->session->username; ?> <h1><?php echo pr($_SESSION) ?></h1> <h1><a href="<?= base_url(); ?>main/logout">logout</a></h1> //省略 </body> </html>

追記

Model / News_model.php(Medelのコード)において
var_dump($data)を実行したところ、

array( "username" => "パスワード" );

のようにしっかりと表示されていたことから、セッションの保存期間や保存場所に問題があるのかもしれないとも考えております。
また、パスワードと名前が一致しない場合には
Controler/Main.php

$this->session->set_flashdata("message", "incorrect username or password");

flashdataが表示されることも参考になるかもしれません。ただそれでもいまだに根本的な原因がわからないでいます。

追記1

イメージ説明

イメージ説明

追記2

Controllers/main.php (Controller)

<?php defined('BASEPATH') or exit('No direct script access allowed'); class Main extends CI_Controller { public function index() { $this->load->view('head_login'); $this->load->view('body_login'); $this->load->view('footer'); } public function registration(){ $this->load->view('head'); $this->load->view('body_registration'); $this->load->view('footer'); } public function registration_account(){ $this->load->model("news_model"); $pass = md5($this->input->post('password')); $this->news_model->registration_add($pass); redirect("main/registration"); } public function login_validation(){ $this->load->library("form_validation"); $this->form_validation->set_rules("username", "Username", "required|trim|callback_validate_credentials"); $this->form_validation->set_rules("password", "Password", "required|trim|md5"); if($this->form_validation->run()){ // $this->session->set_flashdata('message', '次ページではこのメッセージは取得できません'); $this->session->set_userdata('username', 'コメント主からのメッセージ'); $this->session->set_flashdata('message', 'コメント主からのメッセージ'); $this->session->set_flashdata('username', 'コメント主からのメッセージ'); redirect("main/registration"); }else{ $this->session->set_flashdata('message', 'ログインに失敗しました'); $this->load->view('body_login'); } } public function validate_credentials(){ $this->load->model("news_model"); if ($this->news_model->can_log_in()){ // $this->session->set_flashdata("message", "OK"); return true; }else{ $this->session->set_flashdata("message", "incorrect username or password"); return false; } } public function logout(){ $this->session->sess_destroy(); redirect("main/index"); } }

追記4

イメージ説明

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

m1y474

2022/08/28 08:28

main/registration に対応するControllerの部分も追記いただくことは可能でしょうか
xsaxs

2022/08/28 08:31

かしこまりました。少々お待ちください
xsaxs

2022/08/28 08:34

追記2 に追加させて頂きました

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

同じタグがついた質問を見る

PHP

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

CodeIgniter

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