質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1072閲覧

post処理の後のみ、変数の表示を行う

toll_tree

総合スコア199

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/05/07 06:29

編集2019/05/07 08:17

下記コード(test3.php)において、解決したい問題があります。

php

1<?php 2$success_msg = ''; 3if(isset($_POST)){ 4 5 /** 6 * データベース接続などの処理 7 */ 8 9 $success_msg = '成功'; 10 11 //2重送信防止 12 header('Location:test3.php'); 13 14} 15 16?> 17 18<!DOCTYPE html> 19<html lang="en"> 20<head> 21 <meta charset="UTF-8"> 22 23</head> 24<body> 25 <div> 26 27 <!-- POSTされた後のみ、成功メッセージを表示 --> 28 <?php echo $success_msg; ?> 29 <form action="test3.php" method="post"> 30 <input type="submit" value="送信"> 31 <input type="hidden" name="name" value="1"> 32 </form> 33 </div> 34</body> 35</html>

formによりpostされると、if(isset($_POST))以降の処理がなされますが、なんらかの方法によりpostされ、header関数により、再読み込みされた後のみ、$success_msgを表示するというのは、できないでしょうか?
つまり、header関数による、再読み込みされたページが表示された後、もう一度F5ボタンなどで更新処理を行った場合は、$success_msgは表示されないようにしたいです。ページが初めて読み込まれた場合など、post処理が終わった後、以外では、成功メッセージを表示しない為です。
どなたか、ご助言頂ければ幸いです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

たとえばこう

PHP

1<?php 2session_start(); 3if(!empty($_POST)){ 4 $_SESSION["success_msg"]= '成功'; 5 header('Location:'.$_SERVER["SCRIPT_NAME"]); 6 exit; 7} 8$success_msg=isset($_SESSION["success_msg"])?$_SESSION["success_msg"]:""; 9$_SESSION["success_msg"]=""; 10?> 11<!DOCTYPE html> 12<html lang="en"> 13<head> 14 <meta charset="UTF-8"> 15 16</head> 17<body> 18 <div> 19 <?=$success_msg;?> 20 <form method="post"> 21 <input type="submit" value="送信"> 22 <input type="hidden" name="name" value="1"> 23 </form> 24 </div> 25</body> 26</html>

※一部チェック処理が抜けていたので修正

投稿2019/05/07 06:51

編集2019/05/07 07:14
yambejp

総合スコア114837

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toll_tree

2019/05/07 07:27 編集

ご回答ありがとうございます。 ご回答頂いたコードと全く同じではないのですが、セッションを使用し、試してみたのですが、post送信をし、header関数による再読み込みを行った後、post処理の外側で、「var_dump($_SESSION['success_msg']);exit();」としてみたのですが、中身が空になってしまっていました...
yambejp

2019/05/07 07:57

何がいいたいかよくわかりませんが、私のサンプルで ・ページ読み込み時:表示なし ・post時:成功 ・リロード時:表示なし という処理になっていませんか? もしこれが希望の挙動でないならどうしたいかもう少しきちんと提示してください
toll_tree

2019/05/07 08:08

分かりづらい説明ですみません。 質問に追記させて頂きましたコード(top.php)は、yamabejpさんに提示頂いたご回答のコードを組み込んだものなのですが、post処理の後も、$success_msgの内容が表示されなかった為var_dump($_SESSION['success_msg']);exit();とし、post後の$_SESSION['success_msg']の値を確認したのですが、中身が空になってしまっており、$success_msgの内容がpost後も表示できていないといった状況です
toll_tree

2019/05/07 08:14

すみません。 自分のコードにミスがありました。 問題なく、解決できました。
guest

0

if文ですべて解決じゃあ!
しかしHTML部でif文末尾の{}を使うと{}だらけで読みづらくなります。

じゃあどうするか、
PHPにはif (): ~~ endif;といった感じの公式が用意されているので、
そちらを使えばスッキリ書けます。
制御構造に関する別の構文 - PHPマニュアル

PHP

1<?php 2session_start(); 3 4// $success_msgを初期化しておく。 5$success_msg = ""; 6if (isset($_SESSION['success_msg'])) { 7 $success_msg = $_SESSION['success_msg']; 8 // 一度表示したら捨てる 9 unset($_SESSION['success_msg']); 10} 11 12if (isset($_POST)) { 13 // 今までのPOSTの処理 14 $_SESSION['success_msg'] = 'POST成功'; 15} 16?> 17 18 <!-- HTML部 --> 19 <?php if ($success_msg): ?> 20 <?= $success_msg ?> 21 <?php endif; ?>

ちなみに<?php echo "" ?>の代わりに<?= "" ?>の形式を使っていますが、
こちらはPHP推奨なのでいくら使っても構いません。

<? echo "" ?>という?だけのショートタグがxmlなどの文書宣言などと混同するため、
非推奨でありPHPの最新のバージョンで削除されただけの話です。

投稿2019/05/07 08:19

編集2019/05/07 08:38
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

toll_tree

2019/05/07 08:28

ご回答ありがとうございます。 セッションを使用せずに、if文のみで可能ということでしょうか?
miyabi-sun

2019/05/07 08:33

POST後にF5リロードをすると、 同じデータで再送信し始めるのでリダイレクト&セッションは必要です。 なので`isset($_POST)`じゃダメですね。ちょっとだけ回答文を修正しておきます。
toll_tree

2019/05/07 09:02

ありがとうございます。 こういった処理のやり方は、最初はリダイレクトさせてしまうので、無理なんじゃないかと思ったのですが、まさか、できると思わなかったので、ご教示くださり助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問