
いつもお世話になっております。
PHPでカートを作っております。カートに入れるボタンを押した際に、どのボタンを押したかを識別する為に、POSTで識別データを送信しております。
このPOSTデータが含まれている場合にカートに入れる動作が実行される様に設定しておりますが、POSTで送信すると、ブラウザの更新ボタンを押すたびにカートに同じ商品が追加されていってしまいます。
ですので、カートに入れる動作が終了した時点で、このPOSTのデータを無効にしたいのですが、PHPのunset関数を実行しても、ブラウザの更新を押した時点で、再度POSTを送信してしまうので、やはり重複登録されてしまいます。
このPOSTのデータを無効にする方法があれば、是非お教え頂けると助かります。
No.1ベストアンサー
- 回答日時:
まずその前に
すでにカートに入っている商品をもう一度カートに入れようとした場合の正しい動きを決めてください
どんなショッピングカートを作っているのかわかりませんが、
この世の中にある通販サイトではそのような動きを正しい仕様として決めています
あなたが頭ごなしに「すでにカートに入っている商品をもう一度カートに入れようとした場合、数が追加される」ということを悪いことのように思っているようですが。仕様としてそのような挙動が正しいもので有れば「仕様を満たしている」と言えます
リロード時の再POSTですが。
リロードした場合はブラウザは再度同じデータを送りつけます、これはブラウザの仕様であり、PHPが悪いわけでもなければunsetで済ませられる問題でもありません。
PHPに限らず、ほかの言語でもPOSTされます。
ですから、更新(リロード)できないような対策が必要です
簡単な方法としては、クッキーやセッションでリロード対策ですね。
例えば
if(商品番号をKeyとするクッキーが無い){
$obj->商品を追加("商品番号");
}
みたいな感じの処理を入れておけばよいかと思います
または、POSTされたときに、同一商品がすでにカートに入っているときは警告なりエラーを出してカートに追加するかしないかを選択してもらうようにするとか。
if( $obj->商品がカートに入っているか("商品番号") ){
$カートObj->getメッセージobj()->追加しますかメッセージを表示("商品番号",個数);
}else{
$カートObj->商品をカートに入れる("商品番号",個数);
}
って感じです
リロード対策に関してはさまざまな方法がありますので調べてみてください
何れにせよ、リロードさせない対策&リロードされた場合の挙動
をしっかりを決めて実装してください
ありがとうございます。
やはり、再POSTを防止する方法はないんですね。
SESSION or COOKIEにて対策を練ります。
ありがとうございました!
No.3
- 回答日時:
データの登録が成功した時点で
headerのlocationで「登録完了」ページへ飛ばせばよいでしょう。
個人情報等の登録であればそれでもいいと思うのですが、カートに入れるだけなので、やはりSESSION or COOKIEにて対策します。
ありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ASP 多言語の表示がうまく出来...
-
長さ0の文字列を格納できません...
-
納品 vs ご納品 どちらが正し...
-
Zと2とか紛らわしいのがあるか...
-
「スポット受注」はどういう意...
-
三菱製PLC:ファイルレジスタ(...
-
Windows server 2022 CALとSQL ...
-
営業職をやってます。先月発注...
-
テストについて
-
フレーム使用時にブラウザのス...
-
地方自治体との契約における分...
-
三菱シーケンサーA1SHCPUとA1SJ...
-
プログラム修正の際に古いソー...
-
電子納品 CDへの捺印について
-
C#の単体テストでローカル変数...
-
texに関する初歩的な質問
-
テキストファイル内の外字の有無
-
発注書と見積書の品番が異なっ...
-
東京でヨコイのソース買えますか?
-
HWNDへの変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
長さ0の文字列を格納できません...
-
formで送信したPOSTデータの削...
-
電子納品
-
パソコン 言語について 競馬...
-
住所から市町村JISコードを検出
-
簡易データベースのWebサイトと...
-
株価予測システムを作成するた...
-
【ASP.NET】DataSetをSqlDataSo...
-
ASP 多言語の表示がうまく出来...
-
EC-CUBEでお勧め商品を2つ表示...
-
Javaで家計簿を作成
-
VBとSQLで、、、、
-
PHP 更新順を作成日順に変更し...
-
学校データについて
-
Access97データベースの最大登...
-
納品 vs ご納品 どちらが正し...
-
「スポット受注」はどういう意...
-
三菱製PLC:ファイルレジスタ(...
-
Zと2とか紛らわしいのがあるか...
-
テストについて
おすすめ情報