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

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

ただいまの
回答率

91.04%

  • PHP

    17280questions

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

  • JavaScript

    13330questions

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

  • HTML

    7252questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

PHPでのフォームデータ再送の確認画面を回避する方法

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 105

Mcgregor

score 4

PHPを学習しており、現在自力で解決策が見つかっておりません。
どなたかご助力、ご助言いただけると助かります。

//現状
簡単なデータを表示するブラウザアプリをPHPで作成しております。
画面上部にリストから選んで、画面下部へPOSTするという仕組みのものです。

データがどんどん増えるもので、1分毎に自動で更新する様にしております。
自動更新にはJavascriptを利用し更新を行なっています。

なのですが、POSTするリストを追加する以前はブラウザには何も表示されず、
自動で更新されていたのですが、POSTのリストを追加してからブラウザに

確認
このページを表示するにはフォームデータを再度送信〜

と表示されるようになりました。
データが送信されているので、当然表示されるのだろうと思い、
一旦そのPOSTリストを外したのですが、何故か表示され続けます。

//やったこと
POSTされた値が残ってるから表示されるのかと思い、
1)ブラウザのキャッシュやクッキーなど記録を全て削除
2)session_destroy()/$_POST = array()でクリア

を行なってみたのですが、相変わらずPOSTリストを外しても、
フォームデータの確認画面が表示されます。

//目標
まだ実装しておりませんが、将来的にはこのPOSTされた条件でデータを表示し、
自動で更新され続ける様にしたいと考えています。

この様なPOSTされた値がある場合に自動更新を自動でし続けるという方法を、
ご教示いただけると助かります。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

多分、JavaScriptで下記のようにしているため、「フォーム再送信…」というメッセージが表示されていると思われます。

location.reload();

POSTをどのように行っていたのか不明ですが、POSTを消しても同じメッセージが表示されるのは、コードが消されていないからだと思います。

例えば、JavaScriptのファイル名がapp.jsだとして、サイト上ではapp.min.jsを読んでいて単純にminimized化し忘れているか、minimized化に失敗しているためだと思います。ブラザーの開発者ツール(F12)で実際に該当のコードを探してみてください。

それから、一度POSTデーターありでサイトを読み込んで「フォーム再送信…」というメッセージが出てから、JavaScriptを変更してリロードしても「再読み込み」なのでメッセージは表示され続けます。この場合は、ブラザーキャッシュをクリアしてから、URLロケーションバーにフォーカスしてからエンターしてページを読み込みするか、他のページから該当ページのリンクをクリックしてアクセスします。

POST付きでページを再読み込みしたいのであれば、JavaScriptでPOSTすればよいと思います。

document.forms.フォーム名.submit();

HTMLフォームがない場合で、JavaScriptのみでフォーム要素を作成してPOSTしたいのであれば下記のようにします。

var form = document.createElement('form');
document.body.appendChild( form );

var input = document.createElement('input');
input.setAttribute('type', 'hidden');
input.setAttribute('name', '要素名');
input.setAttribute('value', '値');

form.appendChild(input);
form.setAttribute('action', 'POST先(現在ページ)');
form.setAttribute('method', 'post');

form.submit();

個人的には自動リロードでなんらかのパラメーターをつけたいのであれば、POSTメソッドではなく、GETでURLクエリ付きのほうが自然な気がします。URL表示にパラメーターを見せたくないのであれば、Ajaxで更新したいコンテンツノードの書き換えが良いと思います。jQueryなどを使うと簡単にできますし。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/21 22:48

    Javascriptでのリロードですがご指摘の通りでした。
    setTimeout("location.reload()",1000*60);

    これで1分で自動リロードさせるという方法を使っていました。
    まだ教えていただいた、JavascriptでPOSTするという方法を試しておりませんが、
    一度試してみようと思います。

    私がGETとPOSTの適切な使用状況を理解できておらず、
    作成時に素人考えなのですが「最初はどうなるのか?」と思っていて、
    そういう場合はGETの方がなんとなくですが、適切なのかと少し悩みました。

    別の方のご指摘でもGETの方がとおっしゃられておりましたので、
    GETでも試してみようと思います。
    コードのサンプル、ありがとうございます。

    キャンセル

+1

画面上部にリストから選んで、画面下部へPOSTするという仕組みのものです。 

かんたんなソースの提示はできますか?
frame(iframe)処理なのでしょうか?
定期的に処理するならクロスサイトでなければajaxでpostする手もあるかと思いますが
とりあえずmethodをgetにしてsubmitしていればpost云々は表示されないと思います
(reload的なものは辞めたほうがいいでしょう)

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/12/21 22:41

    ご助言ありがとうございます。
    frameは使っておらず、本体となるPHPファイルにincludeして、そこをファンクションで呼び出していました。
    この方法が良いのか悪いのか全くわかっておらず、単に一つのファイルに全てを記述しようとすると、
    どうしても長く冗長的になるので別ファイルにPOSTするリストを作成し、
    本体で読み込んで表示させようとしていました。
    今だにGETを使うべきなのかPOSTを使うべきなのかよく理解しておらず、
    そこを改めて勉強してみようと思います。

    キャンセル

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

  • ただいまの回答率 91.04%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    17280questions

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

  • JavaScript

    13330questions

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

  • HTML

    7252questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。