

初めて投稿させていただきます。  
プログラミング初心者です。

サイトにログイン機能を実装するため、会員登録ページ、ログインページを作成しました。  
ログインはメールアドレスとパスワードで認証するようにしています。

下記プログラムを書いてテストを行ったのですが、登録をした時のパスワードと  
ログイン時のパスワードの値が異なるようでログインできません。。  
登録時に暗号化したパスワードを用いてログインしたら成功しました。

入力パスワード:12345  
登録時(register_check.phpの結果):d41d8cd98f00b204e9800998ecf8427e  
ログイン時(login.phpの結果): 827ccb0eea8a706c4c34a16891f84e7b

ログインしようとすると、下記のメッセージが出ます。

ログイン失敗  
827ccb0eea8a706c4c34a16891f84e7b

ネットで同じようなことがないか調べましたが見つけられず。。  
基本的なことで大変恐縮ですが、ご教授頂けますと幸いです。

1-1)登録ページ(register.php)

[code]

            <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>
    
[/code]

1-2)登録完了ページ(register_check.php)

[code]

    <?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();
        }
    ?>
    
[/code]

2-1)ログイン画面(login.php)

[code]

    <?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>
    
[/code]

申し訳ございません。簡単のためにソースコードを省略して書いていたのですが、どうやらそこに問題があったようでした。。会員登録ページについて、ページ遷移をせずに登録完了させたく、Ajaxを追加していました。上記のプログラムは問題なく動きました。質問にご回答頂いた皆様、貴重なお時間を頂いたにも関わらず申し訳ございません。

実際に不具合を起こしているであろう箇所は下記です。  
恥を承知の上でもしアドバイスいただけるようでしたら、ぜひお願い致します。。

1-1改)登録フォーム  
１行めが異なります。

[code]

            <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>
    
[/code]

1-3) 登録完了ページを呼び出すjavascript

[code]

    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("登録失敗しました")
        }
      });
    }
    
[/code]

1-2) 登録完了ページ(register_check.php)  
上記と同じです。


CC BY-SA 3.0
2015-09-20T06:57:14.033
16791
2015-09-21T11:35:05.693
2015-09-21T11:35:05.693
12382
12382
question
php
MD5の結果が違う