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

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

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

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PHP

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

JavaScript

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

HTML

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

解決済

二重投稿を阻止するために、htmlを書き換えるかphpで制御したい。

shio_kou
tamanikuru

総合スコア25

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PHP

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

JavaScript

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

HTML

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

2回答

0評価

1クリップ

907閲覧

投稿2021/07/21 13:34

編集2021/07/22 08:48

前提・実現したいこと

PHP(7.x系)で掲示板システムを作っています。
投稿ボタンを押した後リロードや戻るボタンを押してしまい、二重投稿になってしまうことがありました。
そのため、投稿ボタンにリダイレクトをする文を記述しました。
ですが、うまくいかず、2回戻るボタンを押すと二重投稿ができてしまいます。
誰か知恵を貸してくれる人はいませんか?また、どう書き換えればいいか教えてください。

コード

PHP

<?php // recaptchaを使うので、試してみるために組んでいます。 // よって、使わない部分が多いです。 // ほぼ確認用のコードです。 require '../recaptcha/recaptcha_vars.php'; // サイトキー $siteKey = V2_SITEKEY; // シークレットキー $secretKey = V2_SECRETKEY; $result_status = ''; // 結果を初期化 if ( isset( $_POST[ 'g-recaptcha-response' ] ) ) { //GoogleのAPIを指定 $url = 'https://www.google.com/recaptcha/api/siteverify'; //パラメータを指定 $data = array( 'secret' => $secretKey, 'response' => $_POST[ 'g-recaptcha-response' ] ); //POST メソッドを使用 $context = array( 'http' => array( 'method' => 'POST', 'header' => implode("\r\n", array('Content-Type: application/x-www-form-urlencoded',)), 'content' => http_build_query($data) ) ); //設定したパラメータからAPIを使って取得する $api_response = file_get_contents($url, false, stream_context_create($context)); $result = json_decode( $api_response ); if ( $result->success ) { $result_status = '成功しました'; //デバッグ用。使わないのでコメントアウト。 //$re = 'OK'; } else { $result_status = '失敗しました。: '; $result_status .= $result->{'error-codes'}[ 0 ]; //デバッグ用。使わないのでコメントアウト。 //$re = 'NG'; } } print($re); ?> <html> <script> var onloadCallback = function() { grecaptcha.render('recaptcha', { 'sitekey' : "<?php echo $siteKey; ?>", 'callback' : verifyCallback, 'expired-callback' : expiredCallback }); }; var verifyCallback = function(response) { document.getElementById("warning").textContent = ''; document.getElementById("send").disabled = false; }; var expiredCallback = function() { document.getElementById("warning").textContent = '投稿するにはチェックを入れてください。'; document.getElementById("send").disabled = true; }; </script> </head> <head> <link rel="icon" type="image/png" href="../icon.png"> <title>掲示板</title></head> <body> <body bgcolor="#181a19" text="#cccccc" alink="#ffffff"> <p><h1>掲示板</h1></p><br> <a href="https://***.**/">***.**(トップページ)</a><br> <p>テスト的な意味もありますが、ちょっと作ってみました。</p> 削除・変更の依頼は<a href="./delete.php" target="_blank">こちら</a>から <form method="POST" action="<?php print($_SERVER['PHP_SELF']) ?>"> <input type="text" name="personal_name"><br><br> <textarea name="contents" rows="8" cols="40"></textarea><br><br> <div id="recaptcha"></div> <p id="warning">投稿するにはチェックを入れてください。</p> <input id="send" type="submit" name="btn1" class="btn btn-primary" disabled value="投稿!!" onclick="location.href='***.**/keiji/keiji_all.php'"> </form> <?php if($_SERVER["REQUEST_METHOD"] == "POST"){ writeData(); } // ファイルを読み込んで表示 readData(); function readData(){ $keijban_file = 'keiji_all.txt'; $fp = fopen($keijban_file, 'rb'); if ($fp){ // ファイルロック if (flock($fp, LOCK_SH)){ while (!feof($fp)) { $buffer = fgets($fp); print($buffer); } flock($fp, LOCK_UN); }else{ // できないなら print('ファイルロックに失敗しました'); print('何度も失敗する場合は知らせてください。'); } } fclose($fp); } function writeData(){ $personal_name = $_POST['personal_name']; $contents = $_POST['contents']; $contents = nl2br($contents); // HTMLの構成 $data = "<hr>\r\n"; $data = $data."<p>投稿者:".$personal_name."</p>\r\n"; $data = $data."<p>内容:</p>\r\n"; $data = $data."<p>".$contents."</p>\r\n"; // ファイルへ書き込み開始 $keijban_file = 'keiji_all.txt'; $fp = fopen($keijban_file, 'ab'); if ($fp){ if (flock($fp, LOCK_EX)){ if (fwrite($fp, $data) === FALSE){ print('ファイル書き込みに失敗しました'); print('何度も失敗する場合は知らせてください。'); } // ファイルロック解除 flock($fp, LOCK_UN); }else{ print('ファイルロックに失敗しました'); print('何度も失敗する場合は知らせてください。'); } } fclose($fp); } ?> </body> <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit" async defer></script> </html>

試したこと

cookieとjavascriptを使ってエラーメッセージを出すようにし、リダイレクトさせる
→どちらか一方を拒否されていると機能しない。
上記のように、リダイレクトさせる
→上記のような問題が発生する

補足情報

PHPバージョンはPHP7.3です。
windows 10のedgeを使って検証しました。

良い質問の評価を上げる

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

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

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

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

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

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

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

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

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

m.ts10806

2021/07/22 01:33

コードこれだけだと再現確認無理では。 あまり省略されると全体の流れが見えなくなるので、「現象が再現する最小構成のコード」を提示してください。 提示のコードではそもそもエラーとなります。
m.ts10806

2021/07/22 01:34

>windows 10のIE8 >windows XPのIE6でも検証。 そもそもIEが終わるのでここら辺は全然捨てていい範囲かと。

まだ回答がついていません

会員登録して回答してみよう

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

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

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

Windows

Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

PHP

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

JavaScript

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

HTML

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