MD5の結果が違う
初めて投稿させていただきます。
プログラミング初心者です。
サイトにログイン機能を実装するため、会員登録ページ、ログインページを作成しました。
ログインはメールアドレスとパスワードで認証するようにしています。
下記プログラムを書いてテストを行ったのですが、登録をした時のパスワードと
ログイン時のパスワードの値が異なるようでログインできません。。
登録時に暗号化したパスワードを用いてログインしたら成功しました。
入力パスワード:12345
登録時(register_check.phpの結果):d41d8cd98f00b204e9800998ecf8427e
ログイン時(login.phpの結果): 827ccb0eea8a706c4c34a16891f84e7b
ログインしようとすると、下記のメッセージが出ます。
ログイン失敗
827ccb0eea8a706c4c34a16891f84e7b
ネットで同じようなことがないか調べましたが見つけられず。。
基本的なことで大変恐縮ですが、ご教授頂けますと幸いです。
1-1)登録ページ(register.php)
<form class="form-horizontal" method="post" action="register_check.php">
<fieldset>
<!-- Sign Up Form -->
<!-- Text input-->
<div class="control-group">
<label class="control-label" for="Email_reg">メールアドレス:</label>
<div class="controls">
<input id="Email_reg" name="Email_reg" class="form-control" type="text" placeholder="sample@fashionista.pics" class="input-large" required="">
</div>
</div>
<!-- Password input-->
<div class="control-group">
<label class="control-label" for="pass">パスワード:</label>
<div class="controls">
<input id="pass" name="pass" class="form-control" type="password" placeholder="********" class="input-large" required="">
</div>
</div>
<!-- Button -->
<div class="control-group">
<label class="control-label" for="confirmsignup"></label>
<div class="controls">
<!-- 会員登録 -->
<button id="confirmsignup" name="confirmsignup" class="btn btn-success">次へ</button>
</div>
</div>
</fieldset>
</form>
1-2)登録完了ページ(register_check.php)
<?php
try
{
//ハッシュ化に使用する定数
//$salt = "mwefCMEP28DjwdW3lwdS239vVS";
$email = $_POST['Email_reg'];
$pass = $_POST['pass'];
$email = htmlspecialchars($email);
$pass = htmlspecialchars($pass);
//パスワードはハッシュ化する
$pass = md5($pass);
$dsn = 'mysql:dbname=mydb;host=localhost';
$user = 'root';
$password = '';
$dbh = new PDO($dsn,$user,$password);
$dbh->query('SET NAMES utf8');
$sql = 'INSERT INTO Fashionista(Email,Password) VALUES(?,?)';
$stmt = $dbh->prepare($sql);
$data[] = $email;
$data[] = $pass;
$stmt->execute($data);
$dbh = null;
echo "追加完了";
}
catch(Exception $e)
{
echo "ただいま通信障害によりご迷惑をお掛けしております。";
exit();
}
?>
2-1)ログイン画面(login.php)
<?php
//セッション開始
session_start();
$mysqli = new mysqli('localhost', 'root', '', 'mydb');
$status = "none";
//セッションにセットされていたらログイン済み
if(isset($_SESSION["Email"]))
$status = "logged_in";
else if(!empty($_POST["Email"]) && !empty($_POST["pass_word"])){
//ユーザ名、パスワードが一致する行を探す
$email = $_POST['Email'];
$pass = $_POST['pass_word'];
$email = htmlspecialchars($email);
$pass = htmlspecialchars($pass);
$pass = md5($pass);
$stmt = $mysqli->prepare("SELECT Email, Password FROM Fashionista WHERE Email = ? AND Password = ?");
$stmt->bind_param('ss', $email, $pass);
$stmt->execute();
//結果を保存
$stmt->store_result();
//結果の行数が1だったら成功
if($stmt->num_rows == 1){
$status = "ok";
//セッションにユーザ名を保存
$_SESSION["Email"] = $email;
}else
$status = "failed";
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>ログイン</title>
</head>
<body>
<h1>ログイン</h1>
<?php if($status == "logged_in"): ?>
<p>ログイン済み</p>
<?php elseif($status == "ok"): ?>
<p>ログイン成功</p>
<?php elseif($status == "failed"): ?>
<p>ログイン失敗</p>
<?php
print $pass
?>
<?php else: ?>
<form method="POST" action="login.php">
メールアドレス:<input type="text" name="Email" />
パスワード:<input type="password" name="pass_word" />
<input type="submit" value="ログイン" />
</form>
<?php endif; ?>
</body>
</html>
申し訳ございません。簡単のためにソースコードを省略して書いていたのですが、どうやらそこに問題があったようでした。。会員登録ページについて、ページ遷移をせずに登録完了させたく、Ajaxを追加していました。上記のプログラムは問題なく動きました。質問にご回答頂いた皆様、貴重なお時間を頂いたにも関わらず申し訳ございません。
実際に不具合を起こしているであろう箇所は下記です。
恥を承知の上でもしアドバイスいただけるようでしたら、ぜひお願い致します。。
1-1改)登録フォーム
1行めが異なります。
<form class="form-horizontal" method="post" onSubmit="send_register(); return false;">
<fieldset>
<!-- Sign Up Form -->
<!-- Text input-->
<div class="control-group">
<label class="control-label" for="Email_reg">メールアドレス:</label>
<div class="controls">
<input id="Email_reg" name="Email_reg" class="form-control" type="text" placeholder="sample@fashionista.pics" class="input-large" required="">
</div>
</div>
<!-- Password input-->
<div class="control-group">
<label class="control-label" for="pass">パスワード:</label>
<div class="controls">
<input id="pass" name="pass" class="form-control" type="password" placeholder="********" class="input-large" required="">
<em>※4文字以上20文字以内で設定してください</em>
</div>
</div>
<!-- Button -->
<div class="control-group">
<label class="control-label" for="confirmsignup"></label>
<div class="controls">
<!-- 会員登録 -->
<button id="confirmsignup" name="confirmsignup" class="btn btn-success">次へ</button>
</div>
</div>
</fieldset>
</form>
1-3) 登録完了ページを呼び出すjavascript
function send_register() {
var register_form = {
Email_reg : $(':text[name="Email_reg"]').val(),
pass : $(':text[name="pass"]').val()
};
alert(pass)
// AjaxでPHPを呼び出す
$.ajax({
type: 'POST',
url: './register_check.php', // 実行するPHPの相対パス
cache: false,
data: register_form, // register_check.phpに渡すデータ。
success: function(html) {
alert("登録成功しました")
},
error: function() {
// エラーが返ってきた場合の処理
alert("登録失敗しました")
}
});
}
1-2) 登録完了ページ(register_check.php)
上記と同じです。