• ベストアンサー

formで送信したPOSTデータの削除について

いつもお世話になっております。 PHPでカートを作っております。カートに入れるボタンを押した際に、どのボタンを押したかを識別する為に、POSTで識別データを送信しております。 このPOSTデータが含まれている場合にカートに入れる動作が実行される様に設定しておりますが、POSTで送信すると、ブラウザの更新ボタンを押すたびにカートに同じ商品が追加されていってしまいます。 ですので、カートに入れる動作が終了した時点で、このPOSTのデータを無効にしたいのですが、PHPのunset関数を実行しても、ブラウザの更新を押した時点で、再度POSTを送信してしまうので、やはり重複登録されてしまいます。 このPOSTのデータを無効にする方法があれば、是非お教え頂けると助かります。

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

  • ベストアンサー
  • inu2
  • ベストアンサー率33% (1229/3720)
回答No.1

まずその前に すでにカートに入っている商品をもう一度カートに入れようとした場合の正しい動きを決めてください どんなショッピングカートを作っているのかわかりませんが、 この世の中にある通販サイトではそのような動きを正しい仕様として決めています あなたが頭ごなしに「すでにカートに入っている商品をもう一度カートに入れようとした場合、数が追加される」ということを悪いことのように思っているようですが。仕様としてそのような挙動が正しいもので有れば「仕様を満たしている」と言えます リロード時の再POSTですが。 リロードした場合はブラウザは再度同じデータを送りつけます、これはブラウザの仕様であり、PHPが悪いわけでもなければunsetで済ませられる問題でもありません。 PHPに限らず、ほかの言語でもPOSTされます。 ですから、更新(リロード)できないような対策が必要です 簡単な方法としては、クッキーやセッションでリロード対策ですね。 例えば if(商品番号をKeyとするクッキーが無い){  $obj->商品を追加("商品番号"); } みたいな感じの処理を入れておけばよいかと思います または、POSTされたときに、同一商品がすでにカートに入っているときは警告なりエラーを出してカートに追加するかしないかを選択してもらうようにするとか。 if( $obj->商品がカートに入っているか("商品番号") ){  $カートObj->getメッセージobj()->追加しますかメッセージを表示("商品番号",個数); }else{  $カートObj->商品をカートに入れる("商品番号",個数); } って感じです リロード対策に関してはさまざまな方法がありますので調べてみてください 何れにせよ、リロードさせない対策&リロードされた場合の挙動 をしっかりを決めて実装してください

nikuq
質問者

お礼

ありがとうございます。 やはり、再POSTを防止する方法はないんですね。 SESSION or COOKIEにて対策を練ります。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

データの登録が成功した時点で headerのlocationで「登録完了」ページへ飛ばせばよいでしょう。

nikuq
質問者

お礼

個人情報等の登録であればそれでもいいと思うのですが、カートに入れるだけなので、やはりSESSION or COOKIEにて対策します。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。
  • jone
  • ベストアンサー率42% (6/14)
回答No.2

POSTデータをSESSIONファイル(DBとか)などに記録してください。 再度押下された場合、その記録先のデータを検証すれば無効にできると思いますが・・・

nikuq
質問者

お礼

SESSION or COOKIEにて対策するしか方法が無さそうですね。 ありがとうございました!

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • jQueryでGETだと送信できるデータがPOSTだと送信できません。

    jQueryでGETだと送信できるデータがPOSTだと送信できません。 jQueryをつかって文字列をPHPに送信したいのですが、GETでは送信できるのにPOSTだと送信ができません。 js -------------------- $.ajax({ type:"POST", //GETだと送信できます。 url:"hoge.php", data:{data:"hoge"}, success:function(data,status){ alert(data); } }); -------------------- php -------------------- <?php $_POST[data] //GETの場合、$_GET[data] == "hoge"。 echo $data; ?> -------------------- 問題点がわかりましたらご指摘いただければと思います。

  • ボタンを使用せずにpostでデータを送信する。

    お世話になります。 PHP5.0+Mysql5.0を使用してサイトを構築しています。 表示されているのがa.phpでその中のURLをクリックしてb.phpにデータを表示しようとしています。 そのときに、データをPOSTで送信したいのですが、 デザイン的な問題でボタンを使用せずに、リンクをクリックすることでPOSTデータを送信したいと考えています。 過去の質問を参考にしながらここまでは完成できました。 <form name="form1" action="b.php" method="post"> <input type="hidden" name="select" value=""> </form> <a href="" onclick="document.form1.select.value='datadata';document.form1.submit();return false;"> data</a> ただ、ここで問題が・・・ そのb.phpを新しいウインドウで大きさを使用して開きたいのです。 <a href="" onclick="window.open('b.php','','width=400,height=400'); return false;" > 「data1」を送信します</a> こうすれば出来るのはわかったのですが、上記2つを 同時に実行する方法がわかりません。 また、これはこうした方がいいというアドバイスも大変助かります。 よろしくご回答お願いします。

  • フォーム送信後の更新ボタンでも$_POST変数が初期化されない

    フォームのサブミット後にプログラムが走るようになっているtest.phpがあるのですが、フォーム送信後に更新ボタンを押しても再度ポストされるようになってしまっています。 ブラウザの更新ボタンを押したときには、ポストせずにフォームをクリアしたいのですが、どうすればできますでしょうか? <form method="post" action="<?php print($_SERVER['PHP_SELF']); ?>"> <input type=text name=aaa> <input type="submit" name="submit" value="submit"> </form> <?php if($_POST['submit']) { 処理 } ?>

    • ベストアンサー
    • PHP
  • POSTデータが送信されなくなりました。

    ある時から急にApache2+PHP4の環境下でPOSTデータが送信(又は受信)が出来なくなりました。 現象としましては、フォームで送信されたPOSTデータが送信(又は受信)出来ず、$_POSTの中を開いてみても何も無い空の状態で、念のため$_GETを開いて見ても空の状態でした。 この現象が出ている状態で、GETでデータを送信したところ、これは送受信共に可能でした。 Apacheを再起動すると現象は無くなるのですが、1日程すると再発します。 早いときでは半日程で…。 再起動してから再発するまでの期間は定まっていないみたいなので、定期的に再起動させるという方法がとれそうになく、 またその現象が出る原因が私には全くわからず… この現象はどういった時に何が原因で発生し、また解消方法を知っている方がいましたら教えて頂けないでしょうか。 Apache等のバージョンは Apache/2.0.59 (Win32) mod_ssl/2.0.59 OpenSSL/0.9.8d PHP/4.4.6 です。 SSL通信でやっていますので、一応そちらの方も記載しておきます

    • ベストアンサー
    • PHP
  • javascriptでポスト送信したデータの受け取り方

    javascriptで下記のようにPOST送信したデータのPHP側での受け取り方 xmlhttp.open("POST","../login/logincheck.php",true); xmlhttp.send("id="+encodeURI("saa")+"&password="+encodeURI("6")); 一応普通にPHP側では以下のように受け取ってみましたが、うまくうけとれていないようなのですが、どうしたらよいでしょうか? $id = $_POST['id']; $keyword = $_POST['password'];

    • ベストアンサー
    • PHP
  • リンクでPOSTデータを送信することは可能ですか?

    はじめまして。 Submitボタンを使用せずに<A>リンクでFORMのPOSTメソッドデータを送信することは可能でしょうか? やはりURLにデータを付加して送信するしかないのでしょうか? ご教授よろしくお願い致します。

    • ベストアンサー
    • HTML
  • formでデータを送信すると、AUでページが表示できない

    AUの携帯でPHPで書かれているページに普通にアクセスすると表示されるのですが、そのページの中にPOSTで送信するボタンがあり、そのボタンをクリックすると「リクエストされたページは表示できません」というエラー表示がされてしまいます。 POSTがだめなのかもと考え、GETに変えてみましたが同様の結果でした。 サーバの設定の問題かなとも思いましたが、他のページはきちんと見ることができます。また、ファイルのサイズの問題かと思いましたが、画像も使用していないページですし、POSTで送信するデータ量も多いとは考えられないのですが、他にどのような問題が考えられますか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • HTMLのpost送信について

    HTMLのpost送信について 送り側で入力した文字がphpのプログラムへ送られ、 ブラウザが開いて送られた文字列が表示されるはず なのですが、HTMLファイルの送信ボタンを押しても 無反応です。どこがまちがっているいのでしょうか? 送り側プログラム ファイル名:okuri1.html <html> <head> <hitle>送り側プログラム</title><br> </head> <body> <from method="post" action="uke1.php"> <input type="text" name="a"size="20"> <br> <input type="submit" value="送信" size="20"> </form> </body> </html> 受け側プログラム ファイル名:uke1.php <?php print POST["a"]; ?>

    • ベストアンサー
    • PHP
  • リンクをクリックした時にformからPOST送信したい。

    HTML、PHP、JavaScript等でサイトを作っているのですが・・・。 【実現出来ている例】 <form name="form1" method="post" action="Next.php" onSubmit="return InputCheck()">  <input type="submit" value="送信"> </form>  submitボタンを一つ置いて、それがクリックされた場合に formの内容をPOSTで送信する。 【実現したい例】 <form name="form1 method="post">  <a href="Next.php" onClick="???">???</a> </form>  formの中のリンクをクリックされた場合に、formの内容を POSTで送信したいのですが、その実現方法がわかりません。 GETで送るという手もあり得ますが、今回はどうしてもPOST したいのですが。

    • ベストアンサー
    • HTML
  • $POSTの送信

    POSTデータを送信する方法を教えてください。 PHPのPOSTを用いたプログラミングを行っています。 以下のように、前ページ受信したPOSTの内容(「aaa」)を hiddenで送信したいと思いましたが 次ページ(result.php)にて「$name」と受信してしまいます。 (前略) <?php $name = $_POST['name']; echo $name; ?> <form action="result.php" method="POST"> <input type="hidden" name="name2" value=$name> <input type="radio" name="name3" value=" (以下略) 説明下手ではありますがご回答頂きたいと思います。 宜しくお願いします。

    • ベストアンサー
    • PHP