![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつもお世話になっております。
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で質問しましょう!
似たような質問が見つかりました
- HTML・CSS GETをPOSTに変更したところ 送信 不能です。 1 2022/04/10 17:31
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- JavaScript ラジオボタンによるフォームの開閉を行いたい 3 2022/03/31 21:30
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- Visual Basic(VBA) VBAで重複データを確認したい 5 2022/10/07 16:24
- Yahoo!ショッピング ヤフーショッピング(ペイペイモール/ZOZOTOWN)についての質問です。 もともとカートに入れて置 1 2022/06/19 12:19
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Chrome(クローム) 【Google AndroidのChromeブラウザーでフォームに入力後に送信ボタンを押すと、400 1 2022/06/26 16:52
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
フォーム送信後の更新ボタンでも$_POST変数が初期化されない
PHP
-
POST時に要素を削除してからPOST
JavaScript
-
$_POST['hoge']のデータをフラッシュするには
PHP
-
-
4
フォームへの前回入力値をクリアーする方法は?
PHP
-
5
PHPのif文でその処理を途中で抜けるにはどうすればよいでしょうか?
PHP
-
6
Javascript_submit()完了後に処理したい
JavaScript
-
7
別ファイルの変数を呼び出したいのですが?
PHP
-
8
#1062 - '0' は索引 'PRIMARY' で重複しています。とでています。
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
長さ0の文字列を格納できません...
-
XMLになるとホームページはどう...
-
納品 vs ご納品 どちらが正し...
-
契約期間内における値上げ等に...
-
「スポット受注」はどういう意...
-
三菱製PLC:ファイルレジスタ(...
-
納入日と納品日について
-
Zと2とか紛らわしいのがあるか...
-
テストについて
-
マイクロソフト製品のライセン...
-
ラダープログラムのお手本
-
見積書、注文書、請求書、領収...
-
オーバレイ方式と仮想記憶シス...
-
ひな型ってなんですか?
-
samba(linux)ファイルサーバの...
-
インプットとアウトプット
-
フライに天つゆ
-
詐欺罪などの疑いがある外国人...
-
UNIX→WindowsXPへ移行
-
プログラムコードの読解力の鍛え方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
長さ0の文字列を格納できません...
-
formで送信したPOSTデータの削...
-
Access97データベースの最大登...
-
Q&Aの掲示板を作成していてヤフ...
-
レコードセット検索
-
住所から市町村JISコードを検出
-
Postgresの高速検索
-
桁数の長くないユニークな値の取得
-
データベースの検索機能つきのH...
-
株価予測システムを作成するた...
-
プログラムを依頼したときの相...
-
アクセスについて
-
マスタデータの要件定義
-
マスタメンテ系の仕事とは?
-
株価の終値を自動入力し、自動...
-
知識がなくても作成可能な「ソ...
-
データベースから円グラフや棒...
-
言葉の類似性を求めるアルゴリズム
-
JPドメイン以外でEUCを使用
-
「ByRef引数の型が一致しません...
おすすめ情報