- 締切済み
エラーメッセージがブラウザリロードしても消えない
https://www.web-officer.com/php/make-login-system-with-php.php エラーメッセージが出たあと、ブラウザをリロードしても消えないままです。 リロードしたら消える方法を教えて下さい。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- AsarKingChang
- ベストアンサー率46% (3467/7474)
<?php session_start(); if(!isset($_SESSION["user_name"])) { $no_login_url = "index.php"; header("Location: {$no_login_url}"); exit; } ソースをちゃんと読んでみるとわかります。 リロードで最後のPOSTが再度送られていると 言ったと思います。 if(!isset($_SESSION["user_name"])) { なので、この部分は、 user_nameが「なければ」~「中の処理」です。 「あった」場合には機能していませんよ。 なので、これを記載したこと自体は無意味だったのです。 そこを直せばOKでしょう。 また、 login.php -> login_success.php login_error.php にどちらにしても、ジャンプするようにしておけば 最初からこの問題は起きなかったんですがね。
- AsarKingChang
- ベストアンサー率46% (3467/7474)
リロードの場合、最後に送ったPOSTデータも再度送るのも込みで 「リロード」しているために起こる現象です。 ですので、同じページなどにジャンプする方がいいでしょう。 参考サイトで書いている <?php session_start(); if(!isset($_SESSION["user_name"])) { $no_login_url = "index.php"; header("Location: {$no_login_url}"); exit; } ?> この部分がそれです。 もう一つのやり方は、 エラーが出たら、現在のセッションデータを消してしまうやり方。 これならリロードしても、既存セッションは既に存在しないので、 新規扱いにできます。 または、エラーが出たときセッションにエラーが出たことを 格納しておき、リロード時すでにエラーが出たフラグが立っていたら 別の処理をするなど。
お礼
ありがとうございます。 以下追加しましたが、エラーメッセージは消えませんでした。どこが違うのでしょうか? <?php session_start(); $error_message = ""; if(isset($_POST["login"])) { if($_POST["user_name"] == "webtan" && $_POST["password"] == "webtan_pass") { $_SESSION["user_name"] = $_POST["user_name"]; $login_success_url = "login_success.php"; header("Location: {$login_success_url}"); exit; } $error_message = "※ID、もしくはパスワードが間違っています。<br> もう一度入力して下さい。"; } ?> <?php session_start(); if(!isset($_SESSION["user_name"])) { $no_login_url = "index.php"; header("Location: {$no_login_url}"); exit; } ?>
- q4330
- ベストアンサー率27% (768/2786)
お礼
すみません。 PHPは初心者で少しは分かると思ったのですが、この説明では理解できませんでした。