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

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

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

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

Q&A

解決済

2回答

1700閲覧

php パズワードが一致しているかどうかのを判定する方法が知りたい。

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

0クリップ

投稿2022/02/09 04:29

編集2022/02/09 16:14

提示コードですが参考サイトと同じようにコードを真似たのですが以下の警告文が表示されて上手く値を取得できません。どうやってデーターベースの一致している値を取得するのでしょうか?

Warning: Undefined array key "password" in /opt/lampp/htdocs/sample/loginCheck.php on line 35 Deprecated: password_verify(): Passing null to parameter #2 ($hash) of type string is deprecated in /opt/lampp/htdocs/sample/loginCheck.php on line 35

イメージ説明

参考サイト: https://qiita.com/MasaKu_n/items/51552aa0331f3ae90dae

<!DOCTYPE html> <html lang=ja> <head> <meta charset="utf-8"> <link rel="stylesheet" href="style.css"> <title>send</title> </head> <body> <?php ini_set("display_errors",1); error_reporting(E_ALL); ?> <?php try { $password = password_hash($_POST["password"],PASSWORD_DEFAULT); $id = $_POST["id"]; $dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; $dbh = new PDO($dsn,"root",""); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = 'SELECT name FROM Account WHERE ID = :id;'; $stmt = $dbh->prepare($sql); $stmt->bindParam(':id', $_POST['id']); //$stmt->bindParam(':password', $password); $stmt->execute(); $result = $stmt->fetch(); if(password_verify($_POST["password"],$result['password']) == true) { echo true; } else { echo false; } } catch(PDOException $e) { die($e->getMessage()); } ?> </body> </html>

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

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

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

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

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

m.ts10806

2022/02/09 06:51 編集

参考にした記事ポンポンだすのいいですけど、 「検索して出てきた記事をとりあえず挙げただけで読んでません」と宣言してるようなもんですよ。 読んでたらそんなコードになりません。読んでください。理解してください。 毎度ですが回答も読んでないし理解してませんよね。
m.ts10806

2022/02/09 06:57

そして、どんどん質問内容をガラッと書き換えるから既についた回答との整合性がどんどん取れなくなる。
guest

回答2

0

ベストアンサー

password_hashの結果は、パスワードが同じでも、結果は毎回変わります。それは、ソルトという部分が毎回変わる仕様であり、ソルトによってハッシュ値も変わるからです。
なので、ログイン処理ではpassword_hash関数は使いません。
ではどうするかというと、SQLのSELECT文ではIDのみを指定して、パスワードのハッシュ値を求めます。
それをpassword_very関数により照合するという流れになります。

投稿2022/02/09 06:38

ockeghem

総合スコア11701

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

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

退会済みユーザー

退会済みユーザー

2022/02/09 06:44 編集

質問ですが「SQLのSELECT文ではIDのみを指定して、パスワードのハッシュ値を求めます。」とはどういう意味でしょうか?IDからパスワードのハッシュ値はどうやって求めるのでしょうか? $sql = 'SELECT name FROM Account WHERE ID=?'; $stmt = $dbh->prepare($sql); $data[] = $id; $stmt->execute($data); $result = $stmt->fetch(); if(password_verify($_POST['password'],$result['id']) == true) { echo true; } else { echo false; }
退会済みユーザー

退会済みユーザー

2022/02/09 07:00 編集

誤投稿です
m.ts10806

2022/02/09 07:00 編集

質問文どんどん変えてますね。コードもどんどん変えてますね。 雑に対応することで自ら別の問題を引き起こして招いてるだけです。もっと丁寧にコード書いてください。
退会済みユーザー

退会済みユーザー

2022/02/09 07:04

はい、すいませんでした。質問ですが以下のようにコードを書いたのですが以下の2つの警告はどう対処すればいいのでしょうか? 「 Warning: Undefined array key "password" in /opt/lampp/htdocs/sample/loginCheck.php on line 35 Deprecated: password_verify(): Passing null to parameter #2 ($hash) of type string is deprecated in /opt/lampp/htdocs/sample/loginCheck.php on line 35 」 コード [ <?php try { $password = password_hash($_POST["password"],PASSWORD_DEFAULT); $id = $_POST["id"]; $dsn = 'mysql:dbname=Bulletin_Board;host=localhost;charset=utf8'; $dbh = new PDO($dsn,"root",""); $dbh->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION); $sql = 'SELECT name FROM Account WHERE ID = :id;'; $stmt = $dbh->prepare($sql); $stmt->bindParam(':id', $_POST['id']); //$stmt->bindParam(':password', $password); $stmt->execute(); $result = $stmt->fetch(); if(password_verify($_POST["password"],$result['password']) == true) { echo true; } else { echo false; } } catch(PDOException $e) { die($e->getMessage()); } ?> ]
m.ts10806

2022/02/09 07:14 編集

誰も謝ってくれとは言ってないですけど。 いずれもエラーに書いてある通りです。 本回答で指摘されたことを理解していて、 提示した記事を理解できてれば解決できます。
guest

0

自身が提示しているPHPマニュアルに使い方書いてあるのでちゃんと読めばわかる。
なので、読んでない理解してないのが問題。

値の取り出し方法がわかりません。

今日自身で質問してなかった?
今日じゃなくてもここ数日した自身の質問から何も得られないわけがないんだけど。
理解してないなら解決にしちゃダメだよね。

参考先たくさん出してるけど、読んでるなら今回の質問する必要はないので、やはり読んでないのが原因。
書籍も名前だけで質は良くないとは指摘されるものだけど、それ以前の問題。

提示されている記事はSELECT時にパスワードなんて入れてません。何をどう参考にされたのでしょうか。
理解してない状態でオリジナルなことやろうとするからです。何よりも理解を優先してください。

投稿2022/02/09 04:43

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

総合スコア80765

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問