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

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

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

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

HTML

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

Q&A

解決済

2回答

5609閲覧

PHPで二重投稿を防ぎたいです

atomatom

総合スコア17

PHP

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

HTML

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

0グッド

4クリップ

投稿2017/04/29 22:10

画像投稿掲示板を作っています。リロードされた時やページを戻って再送信した場合に何度もsubmitされるのを防ぎたいのですが、このソースの場合どうしたらいいでしょうか?どうやらherder関数を使うということはわかったのですが、このソースのどこに書いたら動作するのかわかりません。

<?php if(isset($_POST['submit'])) { $tweet = $mysqli->real_escape_string($_FILES['tweet']['name']); // POSTされた情報をDBに格納する $query = "INSERT INTO tweet(messages,user_id) VALUES('$tweet','$user_id')"; if($mysqli->query($query)) { ?> <div class="alert alert-success" role="alert">登録しました</div> <?php } else { ?> <div class="alert alert-danger" role="alert">エラーが発生しました。</div> <?php } } ?> <?php //画像の保存先のパスを指定 $filedir = "images/"; //$filesdirで指定したファイルに画像を保存する。 if (is_uploaded_file($_FILES["tweet"]["tmp_name"])) { if (move_uploaded_file($_FILES["tweet"]["tmp_name"], $filedir.$_FILES["tweet"]["name"])) { echo $_FILES["tweet"]["name"] . "をアップロードしました。"; } else { echo "ファイルをアップロードできません。"; } } else { echo "ファイルが選択されていません。"; } ?>

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

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

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

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

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

guest

回答2

0

二重投稿の制御にはいろいろやり方があります。
以下の解説が役に立つと思います。
さいきょうの二重サブミット対策

リダイレクトで対応しようとしているみたいですが、何が防げて、何が防げないか理解した上で実装したほうが良いです。
緩い設計で動作させる掲示板のようですが、それなりにセキュリティ対策していないとユーザに迷惑をかけますよ。

投稿2017/04/29 22:41

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

ベストアンサー

既に指摘されていますが,二重投稿対策以前にSQLインジェクション脆弱性を直したほうがいいと思います,こちらのほうが致命的です。

本題ですが,リダイレクトを使うならステータスコードは303を指定してください。

php

1header("Location: $url", true, 303); 2exit;

↑を投稿処理を終えた部分に記述 (ただしHTMLを1文字も出力していない状態でしか使えない)

投稿2017/04/29 23:13

mpyw

総合スコア5223

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

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

退会済みユーザー

退会済みユーザー

2017/04/30 05:18

要件見ると「【PHP初心者向け】セキュアな掲示板を最小構成から作る - Qiita 」を固定トークンからワンタイムトークンに変更するのが1番簡単な実装方法じゃないですかね?
mpyw

2017/04/30 05:44

それも一つの解ですね。ただ今回の掲示板サービスに関しては,リダイレクトで実装するほうが個人的には好みです。厳密に「1人1回しか送信できない申し込みフォーム」などを作る場合ワンライムトークンもありです。
退会済みユーザー

退会済みユーザー

2017/04/30 07:08

リダイレクトがおすすめですか。最近ちょっと試してみたのですが、リダイレクト処理に関して、理解不足の箇所もあり敬遠してしまいました^^; どのあたりが好みの理由なんでしょうか?
mpyw

2017/05/03 23:47

ブラウザで「戻る」「更新」アクションを行ったときの挙動が自然だからです。これに尽きます。
退会済みユーザー

退会済みユーザー

2017/05/03 23:52

理解できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問