簡易な交流サイトのログイン機能を作成しているのですが、ユーザー情報(名前、パスワード)が入力された際に、データベースに保存されてある、PHPの「password_hash」関数により、ハッシュ化されたパスワード及び、名前との照合を行いたいのですが、方法はありますでしょうか?
以下は、ログイン画面の表示及び、ログイン処理を行う「login.php」になります。
<?php
require_once 'function.php';
require_once 'config.php';
session_start();
if(isset($_SESSION['id'])){
header('Location:index.php');
}else if(isset($_POST['name']) && isset($_POST['password'])){
$name = filter_input(INPUT_POST,'name');
$password = filter_input(INPUT_POST,'password');
$hash_password = password_hash($password,PASSWORD_DEFAULT);
try{
$db = db_connection(DSN,DB_USERNAME,DB_PASSWORD);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);
$db->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$stmt = $db->prepare("
SELECT id,name,password FROM users WHERE name=:name
");
$stmt->bindValue(':name',$name,PDO::PARAM_STR);
$stmt->execute();
if($row = $stmt->fetch()){
$_SESSION['id'] = $row['id'];
session_regenerate_id(true);
header('Location : index.php');
exit();
}else{
header('Location:login.php');
exit();
}
}catch(PDOException $e){
die('エラー:' . $e->getMessage());
}
}else{
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<h1>テニススクール交流サイト</h1>
<h2>ログイン</h2>
<form action="login.php"method="post">
<p>ユーザ名:<input type="text"name="name"></p>
<p>パスワード:<input type="password"name="password"></p>
<p><input type="submit"value="ログイン"></p>
</form>
</body>
</html>
<?php } ?>
上記コードでは、$_SESSION['id']が存在しない(ログインしていない)場合に、入力された内容に基づいて、データベースに格納されている情報との照合を行おうと思ったのですが、パスワードを「password_hash」によりハッシュ化しているため、名前とパスワードを指定して、データベースから値を取得することができず、データベースに入っているデータとの照合ができません。
解決する方法などありましたら、教えてください。
よろしくお願いします
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+2
名前とパスワードを指定して、データベースから値を取得することができず、データベースに入っているデータとの照合ができません。
条件を名前だけでデータベースから抽出して、password_vefify
(PHPマニュアル)で正しいか検証してください。
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.23%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
m.ts10806
2019/04/11 21:03 編集
さすがにこれは丸投げがすぎますね。
password_hash()とpassword_verify()をペアで対応する記事は幾らでも出てきますしPHPマニュアルにもpassword_verify()のことは書いてあります。
newyee
2019/04/11 21:05
もちろん「password_hash()とpassword_vefify()をペアで対応する」ことは分かっていますが、それをどう生かして、値を照合するのかといった部分が分からなかったんですよね
newyee
2019/04/11 21:06
回答を頂いたので、今実践している所ですが。
m.ts10806
2019/04/11 21:07
それを具体的に書かれないとどこまで把握してるか誰もわかりませんよ。
誰もあなたとペアプロやっているわけじゃないので、きちんと「全く何も知らない他人」に向けて質問を書いてください。
newyee
2019/04/11 21:13
maisumakunさんには伝わっていたみたいですけどね
m.ts10806
2019/04/11 21:17 編集
はて?「ペアで対応することが伝わっている」ならなぜpassword_verify()の使用をすすめられるんでしょうか。
調べてもないし検証もしてない ということしか伝わってません。
newyee
2019/04/11 21:23
全部読んでください。
「条件を名前だけでデータベースから抽出して」とも書いてあります
m.ts10806
2019/04/11 21:29 編集
password_hash() で検索したら結構最初のほうに出てくる記事をスルーしてますよね。
マニュアルを見るとNoteじゃなく例にちょっと考えたらわかるコードが挙がっていますね。
何を調べて何を試したのでしょうか。これくらいで失敗するのを恐れて他人に丸投げするのはやめてください。
若干エスパーに近い回答をもらっただけでドヤ顔しないでください。
password_verify()をすすめられている時点で自身が把握されていること試したこと半分も伝わってません。
newyee
2019/04/11 21:42 編集
まぁ客観的に見れば、エスパーなどではなく、質問内容から分からない部分が正しく読み取れた為、適切な回答が得られただけだと思いますよ
m.ts10806
2019/04/11 21:44
password_hash() で検索したら結構最初のほうに出てくる記事をスルーしてますよね。
マニュアルを見るとNoteじゃなく例にちょっと考えたらわかるコードが挙がっていますね。
何を調べて何を試したのでしょうか。
退会済みユーザー
2019/04/11 21:47
teratailのQAはナレッジベースとして、同じ疑問を持った質問者のためのものでもあります。たまたまエスパー回答であなたの疑問が解決できたとしても、あなたより経験の浅い質問者のためになるように、情報は補足しましょう。
newyee
2019/04/11 21:51
>情報は補足しましょう
どのような情報を補足するべきと考えられますでしょうか?
退会済みユーザー
2019/04/11 21:52
mts10806さんの指摘内容です。
m.ts10806
2019/04/11 21:53
>どのような情報を補足するべきと考えられますでしょうか?
(3回目)何を調べて何を試したのでしょうか。
newyee
2019/04/11 21:54
phpマニュアルは調べましたよ
m.ts10806
2019/04/11 21:57
それこの質問内容でわかりますか?自身の質問を「客観的に」読んでみてください。
何も書いてないと本当に調べず試さず質問する人との区別はつきませんよ。
「調べた」だけじゃなく「試す」必要がありますよね。
https://teratail.com/help/question-tips#questionTips1-2
>投稿前に自分で一度調べてみましょう。そして調べたことを元に、一度は自分でやってみましょう。
検索して見つけたページでわからない事があれば、どのページのどの部分がわからないのかを明確に記し質問してみてください。
何を参考にして何をどう試したかこの質問内容でわかりますか?「客観的に」読んでみてください。
2019/04/11 21:59
複数のユーザーから「やってほしいことだけを記載した丸投げの質問」という意見がありました
「質問を編集する」ボタンから編集を行い、調査したこと・試したことを記入していただくと、回答が得られやすくなります。
退会済みユーザー
2019/04/11 22:00 編集
@newyee
> phpマニュアルは調べましたよ
これが、「何を調べて何を試したのでしょうか」の回答なら、あなたかなりまずいですよ。
本当に受け応えが成立しない人を相手に回答する人の身にもなってください。
あなたに回答すること自体、何も生まないし、誰のためにもなりません。
teratailを使うにあたって、他人の時間をいただいているということを配慮すべきです。最低限のマナーなのでそれができていないのは本当に致命的です。
newyee
2019/04/11 23:21
正直な所、何を試すか、と言った部分で、何を伝えたいのかが分からないというのはあるんですよね
マニュアルは調べましたが、それで何を試すのか、と言った部分に疑問があります
退会済みユーザー
2019/04/11 23:24
それならそうとその事情を質問文に含めるべきでしょう。
あなたはおよそ聞きたいことと書いている質問内容が一致していないことが問題です。
newyee
2019/04/11 23:38
質問内容に関しては、自分の中では、maisumakunさんに、自分の求めていた回答を頂いた為、うまく伝わっていると思っているのですが、具体的に何を追記すべきと考えられていますでしょうか?
m.ts10806
2019/04/12 04:25
なぜこれで分からないのかが分かりません。
何を調べたか、何を試したかあなた自身を除いて知ってる人はいませんよね。
この質問内容でphpマニュアルを観たことは誰にも伝わってません。だからmaisumakunさんもphpマニュアルを根拠資料に出してますよ?
わかりませんか?プログラミング能力以前の問題が多発しているご自身に気づきませんか?
m.ts10806
2019/04/12 07:49 編集
うちの子はまだ未就学児(小学生未満)ですが、まだうちの子のほうが理解力があります。では、未就学児に向けるつもりで質問内容について確認と追記修正依頼をします。
下記で質問本文に明示されてないものは加筆修正が必要です。自己判断ではなく客観的視点で自身の質問を見つめ直してください。
1。password_hash()はどこから持ってきましたか
2。password_hash()のPHPマニュアルを読みましたか
3。2をしたのならどう理解していますか
4。password_verify()とペアで使う、というのをどこでどう知りましたか
5。4で事前に知っていたの場合なぜpassword_verify()について質問内に一切言及されてませんか
6。質問内のどこを読んだらPHPマニュアルを確認したこと、password_verify()とペアで使うことを知っていたことが分かりますか
7。質問内のどこを読んだら試したことと調べたことが分かりますか
8。スペルミスには気づきましたか
9。password_verify()とペアであると質問前に分かっている場合、回答でpassword_verify()の使用をすすめられていてなぜ解決ですか
10。質問前に分かっていたことはどれだけこの質問に書かれていますか
※解決済みにされてますが、この質問、誰のためにもなりません。結局どう解決したかコメントもない
※ちなみに本当に解決なら加筆修正は厳禁です。きちんと解決した内容や手順を残すにとどめてください
newyee
2019/04/12 08:38
>プログラミング能力以前の問題が多発しているご自身に気づきませんか?
まさにあなたのことですね。
まぁあなたはこういったらことに詳しいので、偉そうに超上から目線で物を言えるのかもしれませんが、はたからみたらただの嫌な奴でしかないです。
まさにあなたの言ったことを、自分自信で、客観的に捉え受け止めて欲しいものですがね...
m.ts10806
2019/04/12 08:43 編集
追記修正依頼の場です。私の指摘は質問本文に対する客観的事実に基づく指摘です。
反論だけに必死になるのではなく、追記修正依頼に応えてください。
ちなみにこの質問やあなたの姿勢は反面教師程度にしか参考にできません。
newyee
2019/04/12 08:54
そうですかね?
客観的に見れば、プログラミング勉強して詳しくなったとしてもあなたみたいな人間にはなりたくないと思いますよ
m.ts10806
2019/04/12 08:55
追記修正依頼の場です。私の指摘は質問本文に対する客観的事実に基づく指摘です。
反論だけに必死になるのではなく、追記修正依頼に応えてください。
m.ts10806
2019/04/12 08:58 編集
下記で質問本文に明示されてないものは加筆修正が必要です。自己判断ではなく客観的視点で自身の質問を見つめ直してください。※一部確認事項の表現を修正
1。password_hash()はどこから持ってきましたか
2。password_hash()をPHPマニュアルで確認しましたか
3。2をしたのならどう理解していますか
4。password_verify()とペアで使う、というのをどこでどう知りましたか
5。4で事前に知っていたの場合なぜpassword_verify()について質問内に一切言及されてませんか
6。質問内のどこを読んだらPHPマニュアルを確認したこと、password_verify()とペアで使うことを知っていたことが分かりますか
7。質問内のどこを読んだら試したことと調べたことが分かりますか
8。スペルミスには気づきましたか
9。password_verify()とペアであると質問前に分かっている場合、回答でpassword_verify()の使用をすすめられていてなぜ解決ですか
10。質問前に分かっていたことはどれだけこの質問に書かれていますか
※解決済みにされてますが、この質問、誰のためにもなりません。結局どう解決したかコメントもない
※ちなみに本当に解決なら加筆修正は厳禁です。きちんと解決した内容や手順を残すにとどめてください
newyee
2019/04/12 08:59 編集
以前、出典を書く書かないの話しをしていた時、あなたも追記修正依頼の場で、指摘されていましたよね?
自分だけ間違ったことはして来ていないかの物言いはやめて下さい
m.ts10806
2019/04/12 09:02 編集
その時の指摘を省みて淡々と質問本文に対する確認と追記修正依頼をコメントしています。指摘してくれた方にはその場で反省の弁を述べていますし、今後繰り返さないようにと今回”初めから”きちんと確認と修正依頼をかけています。
それに一切応じず反論だけしている自身はどうなのでしょうか?自身の目が濁っているだけだと思いませんか?
いつ、反論だけしている姿勢を省みて質問に対する確認と追記修正依頼のほうに目を向けてくれますか?
newyee
2019/04/12 09:10
確認事項の表現を修正したのは、何故でしょうか?
m.ts10806
2019/04/12 09:17 編集
反論材料見つけたくてうずうずしているのは分かるのですが落ち着いてください。
見比べればすぐわかります。より正しく意図が伝わるように修正(というか調整)しただけです。
>以前、出典を書く書かないの話しをしていた時、あなたも追記修正依頼の場で、指摘されていましたよね?
自分だけ間違ったことはして来ていないかの物言いはやめて下さい
newyeeさん、あなたもs8_chuさんに「ごめんなさい」してきましょう。あれはあなたにも指摘されています。自分だけ間違ったことは以下略
newyee
2019/04/12 09:23
では、お聞きしますが、未就学児がどうこうと言った人をバカにした言い方は正しいと思われますか?
そのような言い方をしていては、誰もあなたの意見を聞こうとは思いません。
退会済みユーザー
2019/04/12 09:27
あれこれ言われるのが嫌なら、プログラミング学校へ通ってください。
お金さえ払えばどんなバカでも優しく教えてもらえるはずです。
m.ts10806
2019/04/12 09:31
直接「この程度も理解できないのか、馬鹿かお前は」では伝わらないと思ったので指摘のために例えを出しただけです。結果的にもっと馬鹿にしたように伝わったようですか、それはそれで伝えたかったことなので正しい。
それだけ理解力が未熟であるという指摘です。Kosuke_Shibuyaさんも「受け答えが成立しない」と指摘されていますね。
それに確認と追記修正依頼は意見ではありません。質問本文に対する客観的事実に基づく指摘です。
無視して立場が悪くなるのはむしろ質問者としてのあなたの立場です。
反論材料見つけたくてうずうずしているのは分かるのですが落ち着いてください。
newyee
2019/04/12 09:36
似た者同士痛い所をつかれて、感情的になっているのは分かりますが、そのような発言は自分の醜い心を露呈するだけなので、やめた方がよろしいかと。
m.ts10806
2019/04/12 09:41 編集
どこをどう見たら「痛いところを突いたつもり」なのかわかりませんが、質問に対する追記修正依頼の場であなたは何を仰っていますか?反論材料だけ探してマウント取ろうとするその行為は醜いと思いませんか?ほかのユーザーからの印象を悪くするだけと思いませんか?
”客観的に”を推すのでしたらまず自身を客観的に見てください。
いつ、反論だけしている姿勢を省みて質問に対する確認と追記修正依頼のほうに目を向けてくれますか?
m.ts10806
2019/04/12 09:42 編集
それとも、もっとかみ砕かないとあの10の確認項目が何の確認かすらわかりませんか?でしたらそのように言ってください。無反応ではどこまでわかっているのかわかりません。
newyee
2019/04/12 10:03
まぁあなたには分からないでしょうね。
人をバカにした発言を指摘され、開き直るような人には。
m.ts10806
2019/04/12 10:07
どこをどう見たら開き直ったことになるのか客観的に具体的に説明してください。できないなら適当に発言しないでください。ここは質問に対する追記修正依頼の場です。
それに質問に対する追記修正依頼の場であなたはいつまで何をこだわっていますか?せっかくs8_chuさんが指摘してくれてたのにまだわかりませんか?
m.ts10806
2019/04/12 10:22
mts10806:それとも、もっとかみ砕かないとあの10の確認項目が何の確認かすらわかりませんか?でしたらそのように言ってください。無反応ではどこまでわかっているのかわかりません。
newyee: まぁあなたには分からないでしょうね。
↑よーく読んでください。受け答えが成立していません。
道端でタクシー拾って「自宅まで」とだけ指示して運転手に「自宅ってどの方面ですか?」と聞かれたのに「あなたには分からないでしょうね(なんで分からないの)」と言っているのと同じ流れです。どっちが上から目線に見えますか?客観的に考えてみてください。
あなたが唯一触れたと思われるのは「確認事項の表現を修正したのは、何故でしょうか?」だけです。
私の確認項目の内容には一切触れていません。それで私の「どこまでわかったの?」という問いに対して「あなたには分からないでしょうね」では会話が成立していません。
それとも「全部わかりません」ということでしょうか。質問に対する追記修正依頼の場であなたはいつまで何をこだわっていますか?
いつ、反論だけしている姿勢を省みて質問に対する確認と追記修正依頼のほうに目を向けてくれますか?
newyee
2019/04/12 10:28
「直接「この程度も理解できないのか、馬鹿かお前は」では伝わらないと思ったので指摘のために例えを出しただけです。結果的にもっと馬鹿にしたように伝わったようですか、それはそれで伝えたかったことなので正しい。」
上記のような言い方は、完全に開き直ってますよね。上記書き込みは、完全に人を中傷する内容の書き込みです。まずは、謝罪するべきではないでしょうか。
m.ts10806
2019/04/12 10:41 編集
「完全に開き直ってますよね」は感情的で主観的な意見です。却下。これまでの経緯からあなたには客観的な説明は無理と分かっています。
客観的であるならもっと先に気づくことがありますよね?
謝るのは、あなたが先です。
指摘してくれたs8_chuさんへの謝罪、
赤の他人とペアプロを求めるかのような質問の仕方ばかりをする誤ったteratailの使い方を続けることへの謝罪、
質問者としてあるまじき最初からやさぐれた態度をとった私への謝罪(修正依頼に全く応じず枝葉の反論ばかり続ける姿勢の反省と謝罪)、
「ペアで対応することが分かって」いながら質問本文でpassword_verify()について触れずにmaisumakunさんにpassword_verify()について触れさせたことへの謝罪、
解決済みとしながらどう解決したか一切コメントしないことへの謝罪、
ここまでできてようやく私があなたを馬鹿にしたことへの謝罪が必要か否かの検討が可能になります。
もしmaisumakunさんの回答や私のコメントにより「ペアで対応することが分かっ”た”」のであれば、そもそもpassword_hash()について何も調べずに試さずにデバッグもせずに使っていたことになるので、どちらにせよ丸投げです。
m.ts10806
2019/04/12 11:06
>ここまでできてようやく私があなたを馬鹿にしたことへの謝罪が必要か否かの検討が可能になります
まあここまで言う必要はなかったかな。
状況を理解させるためとはいえ、多少言いすぎた感はありますね。失礼しました。
次はあなたですね。謝罪すべきことをきちんと精査して謝罪し、質問本文への確認・追記修正依頼に応える番です。
newyee
2019/04/20 20:12
諸事情で、返信遅れました。
まぁ確かに自分も、質問内容に関して不備があったとは思います。その点は失礼しました。
m.ts10806
2019/04/20 20:16
はい。あくまで問題解決の場なのでそこは私も含めユーザー同士見失わないようにしたいところですね