ログイン画面より入力されたメールアドレス(ID)とPWが
データベースに登録されている情報と一致すればログイン成功(db.phpへ)。
不一致なら失敗でログイン画面(log001.php)をリダイレクトというプログラムを書いたのですが上手く動きません。
間違っている場所などのご指摘を頂けたら幸いです。宜しくお願い致します。
追記:何が上手くいかないのか野報告を忘れていました。申し訳ございません!
DBに登録したID/PWを入力してもログイン成功画面に移動せず、
リダイレクトされてしまいます。
lang
1<?php 2// セッション開始 3 session_start(); 4 5 if (isset($_SESSION['id'])){ 6 // セッションにユーザIDがある=ログインしている 7 // トップページに遷移する 8 header('Location: db.php'); 9 10 } else if (isset($_POST['a_mail']) && isset($_POST['a_pass'])){ 11 // ログインしていないがユーザ名とパスワードが送信されたとき 12 13 // データベースに接続 14 $dsn = 'mysql:host=localhost;dbname=DB名;charset=utf8'; 15 $user = 'ユーザ名'; 16 $password = 'パスワード'; 17 18 try { 19 $db = new PDO($dsn, $user, $password); 20 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 21 // プリペアドステートメントを作成 22 $stmt = $db->prepare( 23 "SELECT * FROM テーブル名 WHERE a_mail=:a_mail AND a_pass=:a_pass" 24 ); 25 26 // パラメータを割り当て 27 $stmt->bindParam(':a_mail', $_POST['a_mail'], PDO::PARAM_STR); 28 $stmt->bindParam(':a_pass', sha1($_POST['a_pass']), PDO::PARAM_STR); 29 30 //クエリの実行 31 $stmt->execute(); 32 33 if ($row = $stmt->fetch()){ 34 // ユーザが存在していたので、セッションにユーザIDをセット 35 $_SESSION['id'] = $row['id']; 36 header('Location: db.php'); 37 exit(); 38 } else { 39 // 1レコードも取得できなかったとき 40 // ユーザ名・パスワードが間違っている可能性あり 41 // もう一度ログインフォームを表示 42 header('Location: log001.php'); 43 exit(); 44 } 45 } catch(PDOException $e){ 46 die('エラー:' . $e->getMessage()); 47 } 48 49 } else { 50 // ログインしていない場合はログインフォームを表示する 51?> 52 53<html> 54<head> 55 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> 56 <title>ログイン</title> 57</head> 58<body> 59 <h1>ログインフォーム</h1> 60 <h2>ログイン</h2> 61 <form action="log001.php" method="post"> 62 <p>ユーザ名:<input type="text" name="a_mail"></p> 63 <p>パスワード:<input type="password" name="a_pass"></p> 64 <p><input type="submit" value="ログイン"></p> 65 </form> 66</body> 67</html> 68<?php } ?> 69
こんにちは。
どううまくいかないですか?(例:db.phpに遷移しない。catchされてしまい○○というエラーが発生する)
可能性としては、1.一致するレコードがない、2.例外が発生している、3.未ログインだがユーザ名とパスワードが送信されていない、のどれかですよね。デバッグ実行またはログ出力などで上記のどのケースでこの現象が起きているのか絞れますか?
もうひとつ、特に処理を入れずに「header('Location: db.php');」とした場合は正常に遷移しますか?ご確認お願い致します。
SESSIONが上手くつなげられていないのかもしれませんね・・・。
処理をせずにdb.phpへというのはログインボタンを押したらdb.phpへ飛ぶかということでしょうか?
何も設定しなかったら遷移します。
デバックは調べてみます
何も設定しなかった場合に遷移するのであれば、遷移処理自体に問題はなさそうですね。
先に挙げた3つのどれかでしょうか…。
1は問題なさそうです。
2か3だと思うのですが、まったく検討が付きません・・・
回答4件
あなたの回答
tips
プレビュー