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

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

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

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

Q&A

解決済

1回答

7272閲覧

正しいパスワードを入力しているのにログインできない

aaaaaaaa

総合スコア501

PHP

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

0グッド

1クリップ

投稿2015/12/04 11:20

下記のソースは、別ページのフォームから送られてきたメールアドレスとパスワードのうちメールアドレスをDB内のメールアドレスを格納しているフィールドと照合し、合っていれば同じDB内の暗号化されたパスワードを取り出し、別ページから送信されたパスワードと
取り出した暗号化パスワードを照合、合っていれば会員ページにログインするというものなのですが、何故か暗号化される前のパスワードを入力しているのにも関わらず「メールアドレスかパスワードが間違っています。」と表示されてしまいます。もちろん、メルアドは間違っておりません。因みに、この処理は別日に作成したスタッフページにログインする為プログラムを流用しているのですがそちらは上手く動作するのです。
なぜ、この会員ページにログインするプログラムだけ上手く動作しないのでしょうか。

パスワードが合っているかどうか判定するソース

php

1<?php 2try { 3require_once '../lib/dbaccess.php'; 4require_once '../common/common.php'; 5 6$post = sanitize($_POST); 7 8$member_email = $post['email']; 9$member_pass = $post['pass']; 10 11$dbh = dbaccess(); 12//まず、前頁から送られてきた二つの情報のうちメールアドレスをデータベースで照合し、一致したらパスワードを呼び出し関数で送られてきたもう一つのパスワードと照らし合わせて合っていれば接続可能とする。 13$sql = 'SELECT email,name,password FROM dat_member WHERE email=?'; 14$stmt = $dbh->prepare($sql); 15$data[] = $member_email; 16$stmt->execute($data); 17 18$rec = $stmt->fetch(PDO::FETCH_ASSOC); 19if(! password_verify($member_pass, $rec['password'])) { 20 echo <<<EOL 21 <p>メールアドレスかパスワードが間違っています。</p> 22 <a href="./member_login.html">戻る</a> 23EOL; 24}else { 25 session_start(); 26 $_SESSION['member_login'] = 1; 27 $_SESSION['member_code'] = $rec['code']; 28 $_SESSION['member_name'] = $rec['name']; 29 header('Location: ./shop_list.php'); 30} 31 32$dbh = null; 33 34$rec = $stmt->fetch(PDO::FETCH_ASSOC); 35} catch(Exception $e) { 36 echo <<<EOL 37 ただいま障害により大変ご迷惑をおかけしております。 38EOL; 39exit(); 40} 41?>

会員登録の際に利用するソース

php

1$lastmembercode = 0; 2//会員登録込で商品を購入する際に利用する処理。会員登録に必要な情報をDBに保存させる。 3if($chumon == 'chumontouroku') { 4 $sql = 'insert into dat_member (password,name,email,postal1,postal2,address,tel,danjo,born) values(?,?,?,?,?,?,?,?,?)'; 5 $stmt = $dbh->prepare($sql); 6 $data = array(); 7 8 function password($password) { 9 $options = array('cost' => 10); 10 return $pass = password_hash($password, PASSWORD_DEFAULT, $options); 11 } 12 $pass = password($pass); 13 $data[] = $pass; 14 $data[] = $onamae; 15 $data[] = $email; 16 $data[] = $postal1; 17 $data[] = $postal2; 18 $data[] = $address; 19 $data[] = $tel; 20 if($danjo == 'dan') { 21 $data[] = 1; 22 } else { 23 $data[] = 2; 24 } 25 $data[] = $birth; 26 $stmt->execute($data); 27 28 $sql = 'select last_insert_id()'; 29 $stmt = $dbh->prepare($sql); 30 $stmt->execute(); 31 $rec = $stmt->fetch(PDO::FETCH_ASSOC); 32 $lastmembercode = $rec['last_insert_id()']; 33} 34

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

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

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

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

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

guest

回答1

0

ベストアンサー

提示しているソースが十分ではないので、確実ではありませんが、$post = sanitize($_POST) の部分が怪しい。

php

1require_once '../lib/dbaccess.php'; 2require_once '../common/common.php'; 3 4$post = sanitize($_POST); // 多分ここで変な処理してそう 5 6$member_email = $post['email']; 7$member_pass = $post['pass'];

以下のようにデバッグしましょう。

php

1$rec = $stmt->fetch(PDO::FETCH_ASSOC); 2 3var_dump($member_pass); // こんな感じでデバッグする 4var_dump($rec['password']); // こんな感じでデバッグする 5 6if(! password_verify($member_pass, $rec['password'])) {

投稿2015/12/04 11:34

編集2015/12/04 11:44
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問