• ベストアンサー

phpでの二重投稿防止について

お世話になります。 php5にて二重投稿防止のスクリプトを考えておりますが、 なかなか良いものが浮かばず、検索でも見つけられないため質問します。 制作仕様としては、 1つのindex.phpの中に一言コメントを付けて送信するものなのですが、(twitterのような感じ) 更新ボタンを押すと「再送信~」というダイアログが出てしまいます。 別に確認ページや完了ページ等を設ければ、$_SESSIONやheader関数で解決するのですが、 どうしても同一ページ(index.php)内で全てを処理したいのです、何か方法があるのでしょうか? お手隙の方、ヒントをよろしくお願いいたします。

  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5076/13261)
回答No.1

index.php の中で、POSTデータが有れば処理して index.php へリダイレクトさせ、POSTデータが無ければただ表示だけするようにすれば表示されたページでリロードを行っても「再送信~」は出なくなると思います。

barakamon
質問者

お礼

大変良いヒントを頂きました。 ページ上部に if (!empty($_POST)) { header("Location: {$_SERVER['REQUEST_URI']}"); } を入れることで全てが解決致しました。 本当にありがとうごうざいます。

関連するQ&A

  • 問い合わせ完了ページでの二重送信防止法

    過去の投稿で同内容のものがあることを確認はしたのですが、そこで書かれていた方法がうまく動作しなかった(二重送信されてしまった)ので、再度質問させてください。 問い合わせフォーム(inquire.html)にて、送信ボタン押下後、 「お問合せ受付完了」のページ(inquire_send.php)を表示する流れになっているのですが、この受付完了のページにてブラウザの更新ボタンを押下すると、 「情報を再送信しないとページを更新できません」 というダイアログが表示され、同内容のメールを送信してしまうことになります。 この、更新ボタン押下時の二重送信を防止したいのですが、以前の記事に書かれていた「header("Location: ××.php");」では、思い通りの動作になりませんでした。 他に何か方法がありましたら、教えていただきたいです。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • 二重投稿防止方法

    PHP3でメールフォームを作っています。 メールを送信後、リロード等を行うと同じメール内容が何通を送られてしまいます。 何とかして、制御したいのです。 なんか、いい二重投稿防止方法がありましたらお願いします。

    • ベストアンサー
    • PHP
  • 二重投稿防止処理

    PHPの掲示板を作成しています。 現在リロードや連続で送信ボタンを押された際の二重投稿防止処理を作っているのですが、どうしてもうまくいきません。 ログで最新に書かれた記事を呼び出し、送信されたデータと比較し、名前とコメントが一緒であれば二重投稿という扱いにするつもりなのですが、 改行があるとうまくいかないようなのです。 str_replaceを使って<br>タグを削除したり、 \r\nや\rを\nに統一させたり、 両方にtrimを使用してみたりしたのですが、 ソースを見るとフォームで送られてくるコメントのみ、どうしても改行されたままなんです。 これは一体何が原因なのでしょうか? どうしたら改行を含んだデータを比較することができますか?

    • ベストアンサー
    • PHP
  • PHPによるメールフォームの作り方

    今までメールフォーム制作する際、次のような構成で行っておりました。 1.contact.html・・・入力画面 2.contact.php・・・確認画面 3.mail.php・・・入力内容をメールに送信するプログラム 最後にjavascriptでダイアログを表示し「送信ありがとうございました」でOKを押すとトップに戻ります。しかしながら、2.の次に「ありがとうございました」というページを表示し、そこの中のOKを押すとトップに戻るようにしたいと思っております。その際、ファイルの構成はどのようになりますでしょうか?また、記述方法をご教授頂けますと幸いです。ちなみに現在「~有難う御座いました」はjavascriptのダイアログで表示してますが、2.の最後尾に echo(" <script>alert('送信ありがとうございました') location.href='index.html'; </script> "); のように記述しています。これを、htmlまたはphpのthank you画面で表示したく、今回有識者の方々にご質問させて頂きました。ご教授のほどよろしくお願い致します。

    • ベストアンサー
    • PHP
  • onclickイベントでの二重送信防止に関して

    onclickイベントでフォームの二重送信の防止をしたいと考えています。 <input "type="submit">が一つしかないページでは、 <input "type="submit" onclick="this.disabled=true;this.value='送信中';this.form.submit();" value="送信"> でうまくいったのですが、 2つ以上あるページだと、クリックすると空白のページに飛んでしまい、フォームが送信できませんでした。 どのようにすれば、<input "type="submit">が2つ以上あるページでも、この方法で二重送信防止を作動させることができるでしょうか。 ご教授よろしくお願いいたします。

  • 【JavaScript】二重送信防止

    いつもお世話になっております。 JavaScriptの二重送信防止についてご教授ください。 現在、下記のJavaScriptを組んでいるのですが、うまく二重送信防止が効いていません。 どこか、おかしなコードがありますでしょうか? ちなみに、<html:text>タグ内でonkeypress="JavaScript:toEnter();"を指定…((1))、 <a href>内でonclick="JavaScript:toAdd();"を指定…((2))しているのですが、 テキストボックス内でエンターを押下した時((1))にうまく二重送信防止が効いていません。 宜しくお願い致します。 <script language="JavaScript"> <!-- var flgSubmit = false; function submitCheck() { if ( flgSubmit ) { return false; } else { flgSubmit = true; return true; } } function toEnter(){ if( submitCheck() ) { if(event.keyCode == 13) toAdd(); } } function toAdd() { if( submitCheck() ) { document.AddForm.submit(); } } //--> </script>

  • PHPでhome以外のページのアクセス制限

    こんにちは、 PHP条件でhome以外のページをユーザーログインしていない際に制限したいのですが、 ---------------------- コード(index.php) require('header.php'); //....(中略) require('footer.php); -------------------- コード(header.php) (前略) <?php if(!isset($_SESSION['app']['username']) || $_SESSION['app']['username']==''){ if($section != 'home'){echo 'ログインしてください';}else{ ?> ------------------- コード(footer.php) <?php }} ?> (後略) ----------------------- のように設計すれば動作できるはずなのですが、「unexpected $end」エラーになってしまいます。直接index.phpを開くから'header.php'と'footer.php'がひとまとめにならないのでしょうか?footer.phpでちゃんと括弧を閉じたのに。 どうやって解決できるでしょうか 詳しい方がいらっしゃいましたら、教えていただきたいのです。 宜しくお願いします。

    • ベストアンサー
    • PHP
  • このサイトの二重投稿防止の方法は?

    http://www.kirin.co.jp/active/env/mizunomegumi/click.html 上記のURLはキリンのクリック募金ページです。 このページのクリック募金の二重投稿を防止している方法について教えてください。 通常、アンケートなど二重投稿を防止するには、「IP」もしくは「クッキー」の二通りが思いつくのですが、下記のような理由からどちらの制御でもないようなのです。 ・初回クッキーの無効設定 → カウントされる ・クリック後にクッキーを削除 → 再カウントされない (クッキー制御ではない?) ・別のブラウザを変更 → カウントされる ・同一LAN内の別PCからアクセス → カウントされる (IP制御でもない?) また、クッキー削除後も「○回目のクリックありがとう」というようにこれまでのトータルクリック数が保存されているのも不思議です。 アンケートでの二重投稿防止などに利用したいのですが、これはどのような制御をしているのでしょうか。その方法もしくはヒントなどご教授いただけませんでしょうか。 他にも下記のサイトに同じようなシステムのリンクがあります。 http://www.dff.jp/(クリック募金サイト) 上記サイト内のコスモ石油・エイブルなど(IPBとカカクコムはクッキー制御のようです) よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PHPのセッションについて。

    <?php if(isset($_POST['cmdSubmit'])){ session_start(); $user = $_POST['user_name']; $_SESSION['user_name'] = $user;  header('Location:./test.php'); } ?> アンケートフォームの内容をセッションに入れて 別ページで <?echo $_SESSION['user_name'];?> という感じで出力させたいのですがうまく行きません。 セッションに登録されているかチェックするために 移動する前にecho $_SESSION['user_name']; で内容が表示されるかどうか確認したのですが そのときは問題なく内容が表示されるので、 headerで他のページに移動する前までは問題なさそうだと思います。 なにかアドバイスいただけたらとおもいます。 よろしくおねがいします。

    • ベストアンサー
    • PHP
  • よくわかるPHPの教科書から、

    「Twitter風ひとこと掲示板」の作成でのエラー。 [OK] ・データーベース作成 ・会員登録画面から登録可能 ・データベースを見ると登録されていること確認 http://higelatta.bob.buttobi.net/nise_twitter/index.php http://higelatta.bob.buttobi.net/nise_twitter/login.php [NG] ・ログイン画面でログイン後、TOPのindex.php画面に飛んだとき、エラーが発生 ■エラー内容 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-5, 5' at line 1 以上です。 SQL文にエラーがありますと、バージョンがどーのこーのといっているようですが、 具体的な解決方法がわかりません。 以下に、TOPのindex.phpのソースを少々添付いたします。 <?php session_start(); require('dbconnect.php'); if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { // ログインしている $_SESSION['time'] = time(); $sql = sprintf('SELECT * FROM members WHERE id=%d', mysql_real_escape_string($_SESSION['id']) ); $record = mysql_query($sql) or die(mysql_query()); $member = mysql_fetch_assoc($record); } else { // ログインしていない header('Location: login.php'); } // 投稿を記録する if (!empty($_POST)) { if ($_POST['message'] != '') { $sql = sprintf('INSERT INTO posts SET member_id=%d, message="%s", reply_post_id=%d, created=NOW()', mysql_real_escape_string($member['id']), mysql_real_escape_string($_POST['message']), mysql_real_escape_string($_POST['reply_post_id']) ); mysql_query($sql) or die(mysql_error()); header('Location: index.php'); } } // 投稿を取得する $page = $_REQUEST['page']; if ($page == '') { $page = 1; } $page = max($page, 1); 以上です。 長々と申し訳ありません。 おそらく、 if (isset($_SESSION['id']) && $_SESSION['time'] + 3600 > time()) { 付近に問題があるのかなと思うのですが、 詳しい方ご教授願います。

    • ベストアンサー
    • PHP

専門家に質問してみよう