
Codeigniter(3.X)というPHPフレームワークでECサイトを構築しようとしています。
商品の詳細画面で商品概要仕様を選択して「カートに入れる」を押して画面遷移をすると
選択した商品の一覧が表示されますが、
この画面で更新ボタンを押すと商品が追加されてしまいます。
それで、下記のような処理に変更したのですが。1回目だけが追加されて2回目が追加されなくなりました。
どのようにすれば更新ボタンを押しても数量が増えなくなるでしょうか?
宜しくお願いいたします。
//POSTデータ
$post_array = array();
$post_array = $this->input->post();
//SESSIONデータ
$session_array = array();
$session_array = $this->session->all_userdata();
if(!array_key_exists("pr_id",$session_array)){
$data["title"] = "商品カートに商品が登録されていません。";
$this->load->view('/header/header_012',$data);
$this->load->view('/common/parts_login',$data);
// $this->load->view('/common/parts_category_list',$data);
$this->load->view('/cart/cart_login_not_added');
$this->load->view('/common/parts_footer',$data);
return FALSE;
}
//セッションに数量を格納
$this->session->set_userdata('qty', $post_array["qty"]);
//すでにカートに登録されている内容を取得する
$contents = $this->cart->contents();
//更新ボタンを押しての重複登録防止
$error = 0;
//商品コンテンツ配列を確認して更新時のカウントアップを防ぐ
if(!empty($contents)){
foreach($contents as $key => $value){
//コンテンツの中に商品IDがあり、現状の商品IDと一致する場合、コンテンツの数値が違う場合カウントアップ
if($value["id"] == $session_array["pr_id"]){
if($value["qty"] != $post_array["qty"]){
$error++;
}
}
}
}
//更新ボタンを押していない場合
if($error == 0){
$option_array = array();
$option_price = 0;
//リバーシブル
if(array_key_exists("reversible",$post_array)){
$this->session->set_userdata('reversible', $post_array["reversible"]);
$option_array["reversible"] = $post_array["reversible"];
$price = $this->reversible->Get_Reversible_Option($post_array["reversible"]);
$option_price += $price;
}
//オプション金額を入れる
$option_array["option_price"] = $option_price;
$product_array = $this->product->Get_Product_Main_Data_Detail($session_array["pr_id"]);
$contents = array(
'id' => $session_array["pr_id"],
'qty' => $post_array["qty"],
'price' => $product_array["sale_price_ec"],
'name' => $product_array["product_name"],
'options' => $option_array,
);
//カートに登録
$this->cart->insert($contents);
}
//カート操作後の情報取得
$contents = $this->cart->contents();
//総額
$total = $this->cart->total();
//金額表示フォーマット
$data["total"] = number_format($total);
No.2
- 回答日時:
>header('location: show.php');
>みたいな感じですか?
飛び先がそこかどうかはわかりませんが、それが正しい処理です。
GETでもPOSTでもデータを渡した後リロードすれば同じ処理が実行されるのは避けられません。
登録処理後は登録完了ページに飛ばすのはよくある二重投稿の防止策です
そうではない場合は、なんらかのユニークなIDを付加して送信し
おなじIDで送られてきたリクエストは無視するというのでもよいでしょう
有難うございました。
うまくいった感じです。
テストをじっくりして確認していきます。
本当に有難うございました。
いつも有難うございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
特定の文からメールアドレスの...
-
再帰関数を用いて配列の合計を...
-
C言語の配列をPush(追加)する...
-
STLのvectorで作った配列をメン...
-
php で1から100までの素数の表...
-
読み(あ行~わ行)ごとに分け...
-
C言語で全角文字の扱いについて
-
System.String.Splitでエラー
-
C言語 最大値と最小値を求めて...
-
ネットショップシステムでカー...
-
reallocの使い方について
-
mallocで char *型の配列を確...
-
連想配列の文字コードを変換
-
cakephpでのトランザクション処...
-
Perlで重複行を削除したい
-
verilogで、配列の一部をタスク...
-
Delphiで別unitで宣言した「TAr...
-
正規表現
-
np.stack()とnp.array()の違い
-
PHPのmin関数、「1」以上の数値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語の配列をPush(追加)する...
-
cakephpでのトランザクション処...
-
行列
-
読み(あ行~わ行)ごとに分け...
-
特定の文からメールアドレスの...
-
c言語 単位行列
-
STLのvectorで作った配列をメン...
-
多次元配列をエンコードする関...
-
2次元配列を1次元配列にするには
-
phpで、配列の値が意図せず変わ...
-
Delphiで別unitで宣言した「TAr...
-
連想配列に追加ってできるン?
-
正規表現
-
配列の並びについて
-
PHPでCSVを出力するさいに、ル...
-
pascalについて知りたいのです...
-
文字列の取得について
-
ファイルの書き込みについて教...
-
数独かを判断するプログラム
-
文字列の並び替え
おすすめ情報
ご返答を頂き有難うございます。
1件目の登録をしたあとに別のページにリダイレクトをするということですか?
//カートに登録
$this->cart->insert($contents);
header('location: show.php');
みたいな感じですか?
こんな処理をしたことが無くて戸惑っています。