質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • PHP

    20910questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • jQuery

    6953questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

  • CodeIgniter

    279questions

    CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。

カートの商品削除の際にリロードすると削除処理した商品が復活してしまう

受付中

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,059

hidepon

score 161

PHPフレームワークCodeIgniterとJqueryでAjaxで
カートのデータ削除をしようとしています。
なぜか最後の1アイテムを削除しようとした際にリロードで商品が復活してしまいます。

//商品削除のJS部分
$(function(){
 //商品削除
 $(document).on('click', '.delete', function(){
  var index = $(".delete").index(this);
  $.ajax({
   type: "POST",
   url: "/cart/CU001",
   data: {"index":index},
   dataType: "json",
   cache: false,
   success: function(data, status){
    $('#cart').empty();
    $("#cart").append('<tr><th>商品画像</th><th>商品名</th><th>色</th><th>サイズ</th><th>単価</th><th>数量</th><th>小計</th></tr>');
    if(data.length > 0){
     for(var i in data){
       $("#cart").append('<tr><td><img src="/image_market/' + data[i].id + '01.jpg" style="width:100px;height:100px;" /></td><td>' + data[i].name + '</td><td>' + data[i].color + '</td><td>' + data[i].size + '</td><td>' + data[i].price + '</td><td>' + data[i].qty + '</td><td>' + data[i].subtotal + '</td><td><input type="button" value="削除" class="delete" /></td></tr>');
     }
    }else{
      $("p#alert").text("商品が選択されていません。");
      $("p#total").text("合計:0円(税抜)");
    }
   },
    error: function(XMLHttpRequest, status, errorThrown){
    alert("エラーが発生しました!");
    }
   });
  });
});
PHPのコントローラ
public function index(){
 //SESSIONデータ
 $session_array = array()
 $session_array = $this->session->all_userdata();
 //POSTデータ
 $post_array = array();
 $post_array = $this->input->post();
 //JSからのデータ設定あり
 if(array_key_exists("index",$post_array)){
  $prm = $post_array["index"];
  $new_arys = array();
  $conv = array();
  $i = 0;
  if(!empty($session_array["cart_contents"])){
   //カート内容のみを配列に格納
   foreach($session_array["cart_contents"] as $key => $value){
    if(is_array($value)){
     $conv[] = $value;
    }
    //削除されない情報を格納
    if($i!=$post_array["index"] && is_array($value)){
      $new_arys[] = $value;
    }
    $i++;
   }
  }
  //カートIDを格納
  foreach($conv as $key => $value){
   if(is_array($value)){
    foreach($value as $keys => $values){
     if($keys == "rowid"){
      $arys[]        =    $values;
     }
    }
   }
  }
  $data = array(
   'rowid'        =>    $arys[$prm],
    'qty'        =>    0
  );
  $this->cart->update($data); 
  $ary = array();
  if(!empty($new_arys)){
   //カート内容のみを配列に格納
   foreach($new_arys as $key => $value){
    $new_conv    =    array();
    if(is_array($value)){
     foreach($value as $keys => $values){
      if($keys!="options"){
       $new_conv[$keys]    = $values;
      }else{
       foreach($values as $k => $v){
        if($k == "size"){
         $new_conv[$k] = $this->size_detail->Get_Size_Detail_Name($v);
        }
    if($k == "color"){
         $new_conv[$k] = $this->color->Get_Color_Name($v);
        }
       }
      }
     }
    }
    if(!empty($conv)){
     $ary[] = $new_conv;
    }
   }
  }
  echo json_encode($ary);
 }
}

としています。どこに問題があるえしょうか?
教えてください。よろしくお願いいたします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • hidepon

    2016/03/25 09:42

    カートに入れた順番で最初の商品を削除した際に、リロードすると復活してしまいます。ちょっと原因が分からないです・・・

    キャンセル

  • t_obara

    2016/03/25 14:03

    削除時にエラーが発生していないか、削除直後にDBにアクセスして、本当に削除されているのかなど各フェーズで確認できるところはありそうに思いますが。

    キャンセル

  • hidepon

    2016/03/28 11:14

    いろいろ試していますが、うまくいきません。 現象としては 1.1つの商品を追加する 2.削除する(DOMで削除されて「カートに商品はありません」の内容を表示している) 3.リロードすると削除した商品が復活します。

    キャンセル

回答 1

0

$session_array = $this->session->all_userdata();

$session_array["cart_contents"]

カートの情報はセッションに格納されていると思うのですが

$data = array(
 'rowid'      =>    $arys[$prm],
  'qty'        =>    0
);
$this->cart->update($data);

削除らしき処理はDB?に対して行っていて、その後セッション内容の更新なり
DBへの同期がされていないように見えます。
CodeIgniterには明るくないので、もし見当違いな指摘ならすみません。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

関連した質問

同じタグがついた質問を見る

  • PHP

    20910questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • jQuery

    6953questions

    jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

  • CodeIgniter

    279questions

    CodeIgniterは、PHP向けオープンソースのWebアプリケーションフレームワークです。CodeIgniterは覚える構文が少なく、自由度も高いため、PHPを理解していれば構築が簡単です。