実現したい事
PHPの学習の一環でログイン機能を作っており、その実装がしたいです。
メールアドレスとパスワードを使ってログインする機能の実装を試みています。(パスワードのハッシュ化は行っていません。)
問題
ログインページから、メールアドレスとパスワードを入力してログインボタンを押しても本来行くはずのマイページに行きません。
状況
・データベースには登録済み仮ユーザーの値が入っている
・マイページのphp上(mypage.php)のエラーページへのリダイレクトは機能している
このような状況なので、データベースのデータと入力されたデータの照合に何か問題があると感じているのですが、原因がわかりません。
もしわかる方がいらっしゃいましたら、ご教授いただけると幸いです。
コード
mypagephp
1<?php 2 mb_internal_encoding("utf8"); 3 session_start(); 4 5 if (empty($_SESSION['id'])) { 6 try { 7 $pdo = new PDO ("mysql:dbname:XXXXX;host:XXXXXX;", "XXXXX", "XXXX"); 8 }catch (PDOException $e){ 9 die("<p>申し訳ございません。現在サーバーが混み合っており一時的にアクセスができません。 10 <br> 11 しばらくたってから再度ログインしてください。</p> 12 <a href='http://localhost/login_mypage/login.php'>ログイン画面へ</a>" 13 ); 14 } 15 16 $stmt = $pdo -> prepare("select * from login_mypage where mail = ? and password = ?"); 17 18 $stmt -> bindValue(1, $_POST['mail']); 19 $stmt -> bindValue(2, $_POST['password']); 20 21 $stmt -> execute(); 22 $pdo = NULL; 23 24 while ($row = $stmt -> fetch()){ 25 $_SESSION['id'] = $row['id']; 26 $_SESSION['name'] = $row['name']; 27 $_SESSION['mail'] = $row['mail']; 28 $_SESSION['password'] = $row['password']; 29 $_SESSION['picture'] = $row['picture']; 30 $_SESSION['comments'] = $row['comments']; 31 } 32 33 // 値がなければエラー画面にリダイレクト 34 if (empty($_SESSION['id'])){ 35 header("Location:login_error.php"); 36 } 37 38 // ログイン保持にチェックがあれば、セッションに代入 39 if (!empty($_POST['login_keep'])){ 40 $_SESSION['login_keep'] = $_POST['login_keep']; 41 } 42 } 43 44 // ログインしていてログイン情報保持のセッションがある場合は、Cookieを作成 45 if (!empty($_SESSION['id']) && !empty($_SESSION['login_keep'])) { 46 setcookie('mail', $_SESSION['mail'], time()+60*60*24*7); 47 setcookie('password', $_SESSION['password'], time()+60*60*24*7); 48 setcookie('login_keep', $_SESSION['loginkeep'], time()+60*60*24*7); 49 // ログインキープのセッションがなければCookie削除 50 }else if (empty($_SESSION['login_keep'])){ 51 setcookie('mail', time()-1); 52 setcookie('password', time()-1); 53 setcookie('login_keep', time()-1); 54 } 55 56?>
ログイン画面のコード
ログイン画面のフォームのコードです。
loginphp
1<form action="mypage.php" method="post"> 2 <div class="form_contents"> 3 <div class="mail"> 4 <label>メールアドレス</label> 5 <br> 6 <input type="text" class="formbox" size="40" value="<?php if (isset($_SESSION['mail'])) { 7 echo $_SESSION['mail']; 8 } ?>" name="mail"> 9 </div> 10 <div class="password"> 11 <label>パスワード</label> 12 <br> 13 <input type="password" class="formbox" size="40" value="<?php if (isset($_SESSION['password'])) { 14 echo $_SESSION['password']; 15 } ?>" name="password"> 16 </div> 17 <div class="checkbox"> 18 <label><input type="checkbox" size="40" value="login_keep" name="login_keep" <?php if (isset($_COOKIE['login_keep'])) { 19 echo "checked='checked'"; 20 } ?> >ログイン状態を保持する</label> 21 </div> 22 <div class="login_button"> 23 <input type="submit" class="submit_button" size="35" value="ログイン"> 24 </div> 25 </div> 26 </form> 27
試したこと
mypage.phpの最初のif文がおかしいかなと思い、
if (isset($_POST['mail'])) {・・・ ```に変更してみましたが、機能せずでした。 また、ここteratailで似たような質問を参考にしましたが、どれもうまくいかずでしたので、質問させていただきました。 お手数をおかけいたしますが、何卒お力添えいただけると幸いです。