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

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

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

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

解決済

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

aaaaaaaa
aaaaaaaa

総合スコア501

PHP

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

1回答

0リアクション

1クリップ

6317閲覧

投稿2015/12/04 11:20

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

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

php

<?php try { require_once '../lib/dbaccess.php'; require_once '../common/common.php'; $post = sanitize($_POST); $member_email = $post['email']; $member_pass = $post['pass']; $dbh = dbaccess(); //まず、前頁から送られてきた二つの情報のうちメールアドレスをデータベースで照合し、一致したらパスワードを呼び出し関数で送られてきたもう一つのパスワードと照らし合わせて合っていれば接続可能とする。 $sql = 'SELECT email,name,password FROM dat_member WHERE email=?'; $stmt = $dbh->prepare($sql); $data[] = $member_email; $stmt->execute($data); $rec = $stmt->fetch(PDO::FETCH_ASSOC); if(! password_verify($member_pass, $rec['password'])) { echo <<<EOL <p>メールアドレスかパスワードが間違っています。</p> <a href="./member_login.html">戻る</a> EOL; }else { session_start(); $_SESSION['member_login'] = 1; $_SESSION['member_code'] = $rec['code']; $_SESSION['member_name'] = $rec['name']; header('Location: ./shop_list.php'); } $dbh = null; $rec = $stmt->fetch(PDO::FETCH_ASSOC); } catch(Exception $e) { echo <<<EOL ただいま障害により大変ご迷惑をおかけしております。 EOL; exit(); } ?>

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

php

$lastmembercode = 0; //会員登録込で商品を購入する際に利用する処理。会員登録に必要な情報をDBに保存させる。 if($chumon == 'chumontouroku') { $sql = 'insert into dat_member (password,name,email,postal1,postal2,address,tel,danjo,born) values(?,?,?,?,?,?,?,?,?)'; $stmt = $dbh->prepare($sql); $data = array(); function password($password) { $options = array('cost' => 10); return $pass = password_hash($password, PASSWORD_DEFAULT, $options); } $pass = password($pass); $data[] = $pass; $data[] = $onamae; $data[] = $email; $data[] = $postal1; $data[] = $postal2; $data[] = $address; $data[] = $tel; if($danjo == 'dan') { $data[] = 1; } else { $data[] = 2; } $data[] = $birth; $stmt->execute($data); $sql = 'select last_insert_id()'; $stmt = $dbh->prepare($sql); $stmt->execute(); $rec = $stmt->fetch(PDO::FETCH_ASSOC); $lastmembercode = $rec['last_insert_id()']; }

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

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

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

PHP

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