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

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

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

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

Q&A

1回答

576閲覧

掲示板の投稿について二重投稿をheader関数を用いて防ぎたい

webillion

総合スコア33

PHP

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

0グッド

1クリップ

投稿2018/10/11 05:23

編集2018/10/13 07:56

前提・実現したいこと

PHPで掲示板を作っています。
掲示板の投稿機能を作成中に二重POSTの問題が発生しました。

該当のソースコード

PHP

1<?php header('http://localhost/php_revise/chapter7/test1_db_insert.php')?> 2<body> 3 <p>投稿するメッセージを入力してください。</p> 4 <form action="board-input.php" method="post"> 5 <input type="text" name="message" required> 6 <input type="submit" value="投稿"> 7 </form> 8</body> 9 10<?php require '../header.php'; ?> 11<?php session_start(); ?> 12<?php echo 'こんにちは、', $_SESSION['customer']['name'], 'さん。'; ?> 13<hr> 14<?php require '../footer.php'; ?> 15 16<?php 17 18$file='board.txt'; 19if (file_exists($file)) { 20 $board=json_decode(file_get_contents($file)); 21} 22 23 24 25if(isset($_POST["message"])){ 26 //タイムゾーンの指定 27 date_default_timezone_set('UTC'); 28 $today = date("Ymd"); 29 //先頭に発言追加 30 array_unshift($board,$_REQUEST['message']); 31 //$board[]=$_REQUEST['message']; 32 file_put_contents($file, json_encode($board)); 33 34 35 foreach ($board as $message) { 36 echo $today,'<p>', $message, '</p><hr>'; 37 //echo $_POST['message']; 38 } 39} 40 41?> 42

試したこと

header関数を用いて自身のURLにリダイレクトさせて二重POSTを防ごうとしているのですが、
header関数をコードの何処に記述すればいいのか分かりません。

追記:すべての処理の前にheader関数で自身にリロードをかけましたが、二重処理が解決できませんでした。

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

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

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

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

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

guest

回答1

0

header関数が出力するのはHTTPヘッダですので、すべての出力の”前”です。
最初にrequireしているheader.phpで、何かechoされたりしているのであれば、一番上に書くことになります。

提示されたソースコードでは、HTMLの出力中に処理を行っているので、構造自体の見直しが変更です。

PHP

1<?php 2// 二重投稿チェック 3if(isMultiplePost()) { 4・・・ 5if(isset($_POST["message"])){ 6・・・ 7header(・・・ 8?> 9<html> 10・・・

投稿2018/10/11 05:38

kunai

総合スコア5405

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

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

webillion

2018/10/11 06:02

一点、ご質問がございまして、isMultiplePost()とはphpの関数でしょうか?調べても出てこなかったので、ご教示いただけると幸いです。
kunai

2018/10/11 06:05

あぁ、独自に作成した関数と考えて下さい。 勝手に書いただけです。すみません。
webillion

2018/10/11 06:09

isMultiplePost()をコード内に記述する必要性はございますか?それとも if(isset($_POST["message"])){ ・・・ header(・・・ ?> <html> ・・・ だけで大丈夫でしょうか?たびたび失礼します。
kunai

2018/10/11 06:21

二重Postの問題は、ブラウザバックで発生するものだけでなく、送信ボタン連打で起こるものがあります。 このチェックをするためには「今の投稿が多重投稿であるか」のチェックはあったほうがいいと思います。 ブラウザバック対策だけであれば、必要ありません。
webillion

2018/10/11 06:30

なるほど、ありがとうございます。多重投稿のチェックを入れてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

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

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問