いつもお世話になっております。
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も見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
フォーム送信後の更新ボタンでも$_POST変数が初期化されない
PHP
-
POST時に要素を削除してからPOST
JavaScript
-
$_POST['hoge']のデータをフラッシュするには
PHP
-
-
4
フォームへの前回入力値をクリアーする方法は?
PHP
-
5
PHPのif文でその処理を途中で抜けるにはどうすればよいでしょうか?
PHP
-
6
PHP ボタンが押されたら処理を実行する
PHP
-
7
別ファイルの変数を呼び出したいのですが?
PHP
-
8
tableタグとformタグの組み合わせ
HTML・CSS
-
9
フォームでのリセットを使う方法
PHP
-
10
PHPの関数実行
PHP
-
11
セッションを使わずに遷移先画面に変数の値を渡すには?
PHP
-
12
HTMLのテーブルのセルの値をPHPに渡す方法
PHP
-
13
MySQLで改行を含む文の登録のしかた(改行コード
MySQL
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
formで送信したPOSTデータの削...
-
ASP 多言語の表示がうまく出来...
-
Q&Aの掲示板を作成していてヤフ...
-
納品 vs ご納品 どちらが正し...
-
texに関する初歩的な質問
-
納入日と納品日について
-
「スポット受注」はどういう意...
-
テストについて
-
見積書と発注書を兼用できるの...
-
Zと2とか紛らわしいのがあるか...
-
マイクロソフト製品のライセン...
-
オーバレイ方式と仮想記憶シス...
-
納期の前倒しを依頼する場合 ...
-
VC++ ラジオボタンの初期値に...
-
三菱製PLC:ファイルレジスタ(...
-
EXCEL_VBAでOracleにADO接続し...
-
インプットとアウトプット
-
契約書の「重大な背信行為」は...
-
JANコード バーコード の違い...
-
Windows server 2022 CALとSQL ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
長さ0の文字列を格納できません...
-
formで送信したPOSTデータの削...
-
電子納品
-
Q&Aの掲示板を作成していてヤフ...
-
株価予測システムを作成するた...
-
住所から市町村JISコードを検出
-
桁数の長くないユニークな値の取得
-
Access97データベースの最大登...
-
CGI(Perl)を使用してGoogleスプ...
-
統計ソフトを作りたいです。
-
プログラムを依頼したときの相...
-
パソコン 言語について 競馬...
-
複数同時アクセスついて
-
Postgresの高速検索
-
【ASP.NET】DataSetをSqlDataSo...
-
「ByRef引数の型が一致しません...
-
xreaでのブログについて
-
株価の終値を自動入力し、自動...
-
マスタメンテ系の仕事とは?
-
XMLになるとホームページはどう...
おすすめ情報