### 前提・実現したいこと
phpで、ログイン機能を作成しています。
アクセスした際には初期画面の入力フォームを空で表示させたいです。
サブミットした際にバリデーション等で返ってきたときには、
間違った入力値のまま表示させたいです。
発生している問題・エラーメッセージ
大半の機能は実装できたのですが、
いざ動かすと入力フォームに値が存在しています。
その値を消してボタンを押下すると、また値が表示されてしまいます。
該当のソースコード
<?php // セッション開始 session_start(); if (isset($_SESSION["NAME"])) { header("Location: my.php"); exit; } $db['host'] = "localhost"; // DBサーバのURL $db['user'] = "phpusr"; // ユーザーID $db['pass'] = "phppass"; // ユーザー名のパスワード $db['dbname'] = "php10"; // データベース名 $date = date('Y-m-d H:i:s');//日付 // エラーメッセージの初期化 $errorMessage = ""; // ログインボタンが押された場合 if (isset($_POST["login"])) { // 1. ユーザIDの入力チェック if (empty($_POST["userid"])) { // emptyは値が空のとき $errorMessage = '※UserIDまたはPasswordが間違っています。'; } else if (empty($_POST["password"])) { $errorMessage = '※UserIDまたはPasswordが間違っています。'; } if (!empty($_POST["userid"]) && !empty($_POST["password"])) { // 入力したユーザIDを格納 $userid = $_POST["userid"]; // 2. ユーザIDとパスワードが入力されていたら認証する $dsn = sprintf('mysql: host=%s; dbname=%s; charset=utf8', $db['host'], $db['dbname']); // 3. エラー処理 try { $pdo = new PDO($dsn, $db['user'], $db['pass'], array(PDO::ATTR_ERRMODE=>PDO::ERRMODE_EXCEPTION)); $stmt = $pdo->prepare('SELECT * FROM userdata WHERE name = ?'); $stmt->execute(array($userid)); $password = $_POST["password"]; if ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { // if (password_verify($password, $row['password'])) { if ( $password == $row['password']) { session_regenerate_id(true); //正常に叩かれた場合、SQL実施 時間 $sql = "UPDATE userdata SET sdate='$date' WHERE id='1'"; $result = $pdo->query($sql); // 入力したIDのユーザー名を取得 $id = $row['id']; $sql = "SELECT * FROM userdata WHERE id = $id"; //入力したIDからユーザー名を取得 $stmt = $pdo->query($sql); foreach ($stmt as $row) { $row['name']; // ユーザー名 } $_SESSION["NAME"] = $row['name']; header("location: my.php"); exit(); // 処理終了 } else { // 認証失敗 $errorMessage = '※UserIDまたはPasswordが間違っています。'; } } else { // 4. 認証成功なら、セッションIDを新規に発行する // 該当データなし // $errorMessage = 'ユーザーIDあるいはパスワードに誤りがあります。'; $errorMessage = '※UserIDまたはPasswordが間違っています。'; } } catch (PDOException $e) { header("Location: 500.php"); //$errorMessage = $sql; // $e->getMessage() でエラー内容を参照可能(デバッグ時のみ表示) // echo $e->getMessage(); } } } ?> <!doctype html> <html> <head> <meta charset="UTF-8"> <title>ログイン</title> <link rel="stylesheet" href="test.css"> </head> <body> <div class="parent"> <h1>login page</h1> <form id="loginForm" name="loginForm" action="" method="POST"> <div><font color="#ff0000"><?php echo htmlspecialchars($errorMessage, ENT_QUOTES); ?></font></div> <br>UserIDとPasswordを入力してください</br> <div class="kakko" > <label for="userid">UserID</label>   <input type="text" name="userid" value=""> <br> <label for="password">Password</label><input type="password" name="password" value=""> </br> <input type="submit" id="login" name="login" value="login"> </div> </div> </form> </body> </html>
試したこと
クッキーはこのページ作成してからのものは消去したつもりです。
補足情報(FW/ツールのバージョンなど)
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/07 05:30