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

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

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

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

解決済

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

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

2回答

0グッド

0クリップ

1024閲覧

投稿2022/02/09 04:29

編集2022/02/09 07:07

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

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>

以下のような質問にはグッドを送りましょう

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

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

2022/02/09 06:12依頼された後にこの質問は修正されています

こちらの質問が複数のユーザーから「過去の低評価」という指摘を受けました。

m.ts10806

2022/02/09 06:51 編集

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

2022/02/09 06:57

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

回答2

1

ベストアンサー

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

投稿2022/02/09 06:38

ockeghem

総合スコア11501

退会済みユーザー👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

回答へのコメント

退会済みユーザー

退会済みユーザー

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 編集

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

1

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

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

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

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

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

投稿2022/02/09 04:43

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

総合スコア79924

kei344👍を押しています

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

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

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

このような回答には修正を依頼しましょう。

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

PHP

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