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

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

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

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

Q&A

解決済

1回答

715閲覧

php ログイン機能 登録データ 照合

kpby2751

総合スコア19

phpMyAdmin

phpMyAdminはオープンソースで、PHPで書かれたウェブベースのMySQL管理ツールのことです。

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

ログイン

ログインは、ユーザーがコンピューターシステムにアクセスするプロセスの事を呼びます。

0グッド

1クリップ

投稿2022/09/20 05:00

前提

現在PHPを使ってログイン機能の実装を試みています。既に新規登録してMyAdminに入力したデータ(ユーザー名、メールアドレス、パスワード(ハッシュ化済み))を送ることはできます。送られたデータはID付きで保管されています。

イメージ説明

ログインするときにはメールアドレスとパスワードを入力してもらい、MyAdminに登録されてあるデータと照合し、一致する場合にはログイン成功となり、その他の場合にはログイン失敗となるようにしています。
しかしログインしたときにどうも登録された内容が確認できないようで、試しにvar_dumpを挟んでみると、どんな登録したデータにも「MyAdminに一致するデータがありません」と言わんばかりに"array(0) { }"と帰ってきます。恐らくメールアドレスとパスワードを照合する部分に何かしらのミスがあるのかなと思います。下のエラーメッセージにはログイン完了.phpファイル26行目にvar_dump($result, $err)としています。

どこにミスがあるのか教えてくださると嬉しいです。

実現したいこと

ここに実現したいことを箇条書きで書いてください。

  • ログイン機能を動作するようにする

発生している問題・エラーメッセージ

bool(false) array(0) { }

該当のソースコード

ログイン完了.php

php

1<?php 2session_start(); 3 4require_once 'UserLogic.php'; 5 $err = []; 6 if(!$email = filter_input(INPUT_POST, 'email')) { 7 $err[] = 'メールアドレスを記入してください'; 8 } 9 if(!$password = filter_input(INPUT_POST, 'password')) { 10 $err[] ='パスワードを入力してください'; 11 } 12 13 if(count($err) > 0) { 14 $_SESSION = $err; 15 header('Location: ログイン.php'); 16 return; 17 } 18 19 $result = UserLogic::login($email, $password); 20 21 // if(!$result) { 22 // header('Location: ログイン.php'); 23 // return; 24 25 // } 26 var_dump($result, $err); 27 return; 28?> 29<!DOCTYPE html> 30<html lang="ja"> 31<head> 32 <meta charset="UTF-8"> 33 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 34 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 35 <title>ログイン完了</title> 36</head> 37<body> 38 <?php if(count($err) > 0) : ?> 39 <?php foreach($err as $e) : ?> 40 <p><?php echo $e ?></p> 41 <?php endforeach ?> 42 <?php else : ?> 43 <p>おかえり!</p> 44 <?php endif ?> 45 <a href="ログイン.php">戻る</a> 46</body> 47</html>

UserLogic.php

php

1<?php 2require_once 'dbconnect.php'; 3class UserLogic { 4 public static function createUser($userData) { 5 $result = false; 6 $sql = 'INSERT INTO users (username, email, password) VALUES (?, ?, ?)'; 7 8 $arr = []; 9 $arr[] = $userData['username']; 10 $arr[] = $userData['email']; 11 $arr[] = password_hash($userData['password'], PASSWORD_DEFAULT); 12 13 try{ 14 $stmt = connect()->prepare($sql); 15 $result = $stmt->execute($arr); 16 return $result; 17 } catch(\Exception $e){ 18 echo $e->getMessage(); 19 echo $e->getTraceAsString(); 20 die(); 21 // return $result; 22 } 23 } 24 25 public static function login($email, $password) { 26 $result = false; 27 $user = self::getUserByEmail($email); 28 29 if(!$user) { 30 $_SESSION['msg'] = 'emailが一致していないよ;;'; 31 return $result; 32 } 33 34 if(password_verify($password, $user['password'])) { 35 session_regenerate_id(true); 36 $_SESSION['login_user'] = $user; 37 $result = true; 38 return $result; 39 } 40 41 $_SESSION['msg'] = 'パスワードが一致していないよ;;'; 42 return $result; 43 } 44 45 public static function getUserByEmail($email) { 46 $sql = 'SELECT * FROM users WHERE email = ?'; 47 48 $arr = []; 49 $arr[] = $email; 50 51 52 try{ 53 $stmt = connect()->prepare($sql); 54 $stmt->execute($arr); 55 $user = $stmt->fetch(); 56 } catch(\Exception $e){ 57 echo $e->getMessage(); 58 echo $e->getTraceAsString(); 59 die(); 60 // return $result; 61 } 62 } 63}

dbconnect.php

php

1<?php 2require_once 'env.php'; 3function connect() { 4 $host = DB_HOST; 5 $db = DB_NAME; 6 $user = DB_USER; 7 $pass = DB_PASS; 8 9 $dsn = "mysql:host=$host;dbname=$db;charaset=utf8mb4"; 10 try { 11 $pdo = new PDO($dsn, $user, $pass, [ 12 PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, 13 PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC 14 ]); 15 return $pdo; 16 } catch(PDOExeption $e) { 17 echo '接続失敗です;;' . $e->getMessage(); 18 exit(); 19 } 20} 21

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

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

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

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

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

guest

回答1

0

ベストアンサー

getUserByEmail()

で正常処理しても何もreturnしてないからでは?

投稿2022/09/20 05:03

編集2022/09/21 02:50
m.ts10806

総合スコア80850

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

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

kpby2751

2022/09/20 07:03

getUserByEmail()のtry catchでtryの部分にreturnをしていなかったことで、正常処理が正しく動作していませんでした。 教えてくれてありがとうございます。無事解決しました。
m.ts10806

2022/09/21 02:50

低評価された方 理由のコメントを。 嫌がらせ目的であれば規約違反です。 私を追いかけまわす暇があれば別のことに費やしてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問