お世話になります。
現在phpでログイン画面を作っているのですがうまくいかず困っています。
<?php require_once 'h.php'; # クリックジャッキング対策 header('X-FRAME-OPTIONS: SAMEORIGIN'); # セッション開始 session_start(); # ユーザー名とパスワードを設定します。複数名分の設定ができます。 $userid[] = '1'; // ユーザーID $username[] = '1'; // お名前 // パスワード「pass1」をpassword_hash()関数でハッシュ化した文字列 $hash[] = '$2y$10$7llM8TDTW3cxrMPzwd1ydOky3FP7yYOzn/d4bEWWbeFDiQ.tTbM3O'; $userid[] = 'test'; $username[] = 'テスト'; // パスワード「pass2」をpassword_hash()関数でハッシュ化した文字列 $hash[] = '$2y$10$qNxqM4UP79klxfqV9cIwcO6LBJI44Z34k76m9w9teN.PLpfTe8lxG'; # エラーメッセージの変数を初期化します。 $error = ''; # 認証済みかどうかのセッション変数を初期化します。 if (! isset($_SESSION['auth'])) { $_SESSION['auth'] = false; } if (isset($_POST['userid']) && isset($_POST['password'])) { foreach ($userid as $key => $value) { if ($_POST['userid'] === $userid[$key] && # 入力されたパスワード文字列とハッシュ化済みパスワードを照合します。 password_verify($_POST['password'], $hash[$key])) { # セッション固定化攻撃を防ぐため、セッションIDを変更します。 session_regenerate_id(true); $_SESSION['auth'] = true; $_SESSION['username'] = $username[$key]; break; } } if ($_SESSION['auth'] === false) { $error = 'ユーザーIDかパスワードに誤りがあります。'; } } if ($_SESSION['auth'] !== true) { ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title>簡単なログインフォームを作成したい</title> </head> <body> <div id="login"> <h1>認証フォーム</h1> <?php if ($error) { // エラー文がセットされていれば赤色で表示 echo '<p style="color:red;">' . h($error) . '</p>'; } ?> <form action="<?php echo h($_SERVER['SCRIPT_NAME']); ?>" method="post"> <dl> <dt><label for="userid">ユーザーID:</label></dt> <dd><input type="text" name="userid" id="userid" value=""></dd> </dl> <dl> <dt><label for="password">パスワード:</label></dt> <dd><input type="password" name="password" id="password" value=""></dd> </dl> <input type="submit" name="submit" value="ログイン"> </form> </div> </body> </html> <?php exit(); } ************************************************************** ************************↓h.php******************************** <?php function h($var) // HTMLでのエスケープ処理をする関数 { if (is_array($var)) { return array_map('h', $var); } else { return htmlspecialchars($var, ENT_QUOTES, 'UTF-8'); } } *************************************************************
上記のコードなのですが
$error = 'ユーザーIDかパスワードに誤りがあります。';
が出てしまいます。
どこが間違っているのでしょうか?
ご教授いただければ幸いです。
回答4件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/02/04 12:29
2015/02/04 13:25
2015/02/04 17:00
2015/02/05 02:31
2015/02/05 03:06