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

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

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

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

データベース

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

ログイン

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

Q&A

解決済

2回答

914閲覧

ログイン機能作成にあたって、DBから上手く結果を得られません。

anchan_

総合スコア0

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

PHP

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

データベース

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

ログイン

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

MAMP

Mac 上で WordPress などの動的ページのサイトが作れるように環境を構築するフリーソフト

0グッド

0クリップ

投稿2021/08/19 01:56

編集2021/08/19 02:51

前提・実現したいこと

MAMP環境でログイン機能の作成を行っている所です。
データベースから結果が返ってきていない状況なのは分かったのですがなぜ返って来ないのか調べてもわからない状態です。
かなり初歩的な質問になってしまうとは思うのですがご教授頂けますと幸いです。

※POST送信したpassword平文として表示されている状態です。

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

エラーメッセージは表示されず画面は正常に表示されている状態。 ログインがしたくてもログインが出来ない状態です。現状分かっているのは$resultに上手く値が返って来ていなさそうということです。

該当のソースコード

loginphp

1<?php 2 require_once('../../Controllers/LoginController.php'); 3 //オブジェクト生成 4 $login = new LoginController(); 5 6 if($_POST){ 7 $result = $login->login($_POST); 8 if(!empty($result)){ 9 $_SESSION['User'] = $result; 10 header('Location: /php_base/07_SelfMade/Views/mypage/mypage.php'); 11 exit; 12 }else{ 13 $massage = "ログインできませんでした"; 14 } 15 } 16 ?> 17 18<!DOCTYPE html> 19<html lang="ja"> 20<head> 21 <meta charset="UTF-8"> 22 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 23 <title> TeBuRa-Login</title> 24 <!-- title --> 25 <link rel="stylesheet" type="text/css" href="../../public/css//bootstrap.min.css"> 26 <!-- css --> 27</head> 28<body> 29 <div id="wrapper"> 30 <header> 31 <?php require('../header_nonmember.php'); ?> 32 <!-- <?php require('../header_member.php'); ?> --> 33 </header> 34 <!-- header --> 35 <main class="container"> 36 <article> 37 <section> 38 <div class="row"> 39 <div class="col-1 mt-5 mx-5"> 40 <h1>Login</h1> 41 </div> 42 <!-- col-1 --> 43 </div> 44 <!-- row --> 45 <form class="m-5 p-5" name="form" action="" method="POST"> 46 <?php if (isset($massage)) { 47 var_dump($_POST); 48 var_dump($result); 49 var_dump($_SESSION['User']); 50 echo "<p class = 'error'>".$massage."</p>"; 51 }?> 52 <div class="row mb-4"> 53 <label for="inputEmail3" class="col-sm-2 col-form-label">E-mail</label> 54 <div class="col-sm-10"> 55 <input type="email" class="form-control" id="inputEmail3" name="mail"> 56 </div> 57 </div> 58 <div class="row mb-4"> 59 <label for="inputPassword3" class="col-sm-2 col-form-label">Password</label> 60 <div class="col-sm-10"> 61 <input type="password" class="form-control" id="inputPassword3" name="password"> 62 </div> 63 </div> 64 65 <div class="mt-5 pt-5 d-grid mx-auto col-2"> 66 <a href="/php_base/07_SelfMade/Views/login&signup/passreset_request.php" class="link-primary">パスワードを忘れた方</a> 67 </div> 68 <div class="mt-4 d-grid mx-auto col-1"> 69 <button type="submit" class="btn btn-primary"> Login</button> 70 </div> 71 </form> 72 </section> 73 <!-- section --> 74 </article> 75 <!-- article --> 76 </main> 77 <!-- main container-fluid --> 78 <footer> 79 <?php require('../footer.php');?> 80 </footer> 81 <!-- footer --> 82 </div> 83 <!-- wrapper --> 84 <script src=" ../../public/js/jquery-3.5.1.js" type="text/javascript"> 85 </script> 86 <script src="../../public/js/bootstrap.min.js"></script> 87 <script src="../../public/js/xxx.js"></script> 88 <!-- js --> 89</body> 90</html>

Loginphp

1<?php 2require_once(__DIR__ . '/Db.php'); 3 4class Login extends Db{ 5 private $table = 'users'; 6 7 //DB接続 8 public function __construct($dbh = null){ 9 parent::__construct($dbh); 10 } 11 12 //ログイン 13 public function login($arr){ 14 $sql = 'SELECT * FROM users WHERE mail = :mail AND password = :password'; 15 $stmt = $this->dbh->prepare($sql); 16 $params = array(':mail'=>$arr['mail'],':password'=>$arr['password']); 17 $stmt->execute($params); 18 $result = $stmt->fetch(); 19 return $result; 20 } 21}

LoginControllerphp

1<?php 2session_start(); 3require_once('/Applications/MAMP/htdocs/php_base/07_SelfMade/Models/Login.php'); 4 5class LoginController{ 6 private $Login; //Contactモデル 7 8 //DB接続 9 public function __construct(){ 10 //モデルオブジェクトの生成 11 $this->Login = new Login(); 12 } 13 14 //ログイン login 15 public function login($arr){ 16 $this->Login->login($arr); 17 } 18 19}

試したこと

var_dump($_POST);
var_dump($result);
var_dump($_SESSION['User']);

上記をlogin.phpのhtml内に記述しどこまでは代入が出来ているのか調べる所までは実施。 該当ソースのbody内20行目あたりに記述しております。
下記が返って来た値です。
array(2) { ["mail"]=> string(23) "入力内容" ["password"]=> string(1) "入力内容" } NULL NULL
そこからどうすればいいかわからない状態です。

phpMyAdminで下記を実行した場合は欲しいデータは返ってきます。
SELECT * FROM users WHERE mail = "入力内容" AND password = "入力内容"

補足情報(FW/ツールのバージョンなど)

MAMP

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

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

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

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

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

m.ts10806

2021/08/19 02:09

試したこと はどこに挿入してどういう結果が出ましたか?
m.ts10806

2021/08/19 02:10

本件とは別なのでこちらで require_once('/Applications/MAMP/htdocs/php_base/07_SelfMade/Models/Login.php'); 上記、完全環境依存の書き方なのでよろしくありません。 相対パスにするか__DIR__などの定義済み定数を利用してください。
anchan_

2021/08/19 02:13

login.phpのhtml内に記述致しました。 該当ソースのbody内20行目あたりです。 結果としては下記が返って来ております。 array(2) { ["mail"]=> string(23) "入力内容" ["password"]=> string(1) "入力内容" } NULL NULL
m.ts10806

2021/08/19 02:14

質問本文に追記してください。
m.ts10806

2021/08/19 02:15

あと実装の問題ですが、$_POSTは「スーパーグローバル変数」と呼ばれるものであらゆる場所から参照できるので引数にする必要はなかったりします。
m.ts10806

2021/08/19 02:16

ちなみにパスワードは暗号化されたものが保存されてますか?暗号化されてない平文ですか?
anchan_

2021/08/19 02:24

平文として表示されている状態です。
m.ts10806

2021/08/19 02:28

質問本文に追記してください。 ではもう一点。 コード内のSQLを直にDBに対して実行すると想定の結果は得られますか?  パラメータは入力値に置き換えてください
m.ts10806

2021/08/19 02:42

あ、でもデバッグ入れる場所そこじゃダメです。 $resultのemptyチェックがtrueのときにheaderリダイレクトされて通らないので。 headerとめた上でemptyの手前に置いてください。 なんならexitでデバッグのために余計な出力を止めても良いです。
anchan_

2021/08/19 03:07

emptyの手前に下記を入れてみたのですが変化が無い状態です。コメント頂いた内容をちゃんと理解出来ていないかもしれないです... var_dump($_POST); var_dump($result); var_dump($_SESSION['User']);
m.ts10806

2021/08/19 03:28

では、Login::loginメソッド内ではどうですか? 各変数の値がどうなってるか、できれば全て確認してください。 特にパラメータが確実に渡っていることを確認する必要はあります。 DB接続先が合ってるかとかその辺もですね。幾つかデータ作ってみてそれらに対するselectが有効かどうかも確認してみてください。 (回答みたいな内容になってしまったけど、問題切り分けは進むと思います)
anchan_

2021/08/19 06:18

メソッド内のでの変数の値を確認しようと思ったのですが確認方法がわからず困ってます。どのようにすればmodel内の変数を確認出来ますか...
m.ts10806

2021/08/19 06:52

同じようにvar_dump そこを通ってるならちゃんと出ます
anchan_

2021/08/19 07:14

ありがとうございます!error_logで出しました! var_dumpでも出せるんですね!なんとかログイン出来ました!controllerから値をviewに渡せて無かったです!ありがとうございました!
m.ts10806

2021/08/19 07:25

望ましいのはデバッガを使うことです。コードに入れ込むと後に消さなければなりませんから。
anchan_

2021/08/19 09:54

ありがとうございます!VScodeで一応デバッガの拡張機能は追加したんですが使い方がよくわからなくて... デバッガに関しても調べ直します!
m.ts10806

2021/08/19 09:56

例えデバッガ導入に数時間~1日かかっても余裕で取り戻せるくらいのメリットはあります。
guest

回答2

0

値が受け取れていないというならば、それを取得しているところ、返すところを逆に辿ってどこでおかしくなっているのかを調べると良いですよ。

投稿2021/08/19 02:55

ishina_yum

総合スコア509

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

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

anchan_

2021/08/19 06:20

回答ありがとうございます。viewで値を確認するのは出来るのですがmodel内の変数の値を確認する際はどのように確認をされていますか??? 検索の仕方が悪いんだとは思うのですがなかなか欲しい内容の書いてる記事を見つけられない状態でして...
ishina_yum

2021/08/19 06:36

phpならば、どこであろうともvar_dumpすれば出てくると思いますけど。 そうしたせいでHTMLが滅茶苦茶になってJavaScriptが動かなくなったりもしますが、その前段階でつまづいているのだからそんなことは気にしなくても良いでしょう。
anchan_

2021/08/19 07:11

ありがとうございます!
guest

0

自己解決

error_log();関数を使ってログを辿り解決しました。
間違っていたのはcontrollerからviewに値を渡せていなかった部分でした。

public function login(){
$this->Login->login();
}

public function login(){
$result = $this->Login->login();
return $result;
}

投稿2021/08/19 07:18

anchan_

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問