下記のソースは、別ページのフォームから送られてきたメールアドレスとパスワードのうちメールアドレスを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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。