2017-02-08 12 views
0

商品がカートに入っている場合は、その商品をカートに追加するとその数量を更新する必要があります。現在、数量を更新する代わりに重複した項目が追加されます。誰でも助けてください!以下のコード。商品が再び追加されたときのカート内の商品数の増加

case "add": 
    if(!empty($_POST["quantity"])) { 
     $productByCode = $db_handle->runQuery("SELECT * FROM medicine WHERE med_id='" . $_GET["med_id"] . "'"); 
     $itemArray = array(
      $productByCode[0]["med_id"]=>array(
       'name'=>$productByCode[0]["med_name"], 
       'med_id'=>$productByCode[0]["med_id"], 
       'image'=>$productByCode[0]["Image"], 
       'quantity'=>$_POST["quantity"], 
       'price'=>$productByCode[0]["unit_cost"] 
      ) 
     ); 

     if(!empty($_SESSION["cart_item"])) { 
      if(in_array($productByCode[0]["med_id"],$_SESSION["cart_item"])){ 
       foreach($_SESSION["cart_item"] as $k => $v) { 
        if($productByCode[0]["med_id"] == $k) 
         $_SESSION["cart_item"][$k]["quantity"] = $_POST["quantity"]; 
       } 
      } 
      else { 
       $_SESSION["cart_item"] = array_merge($_SESSION["cart_item"],$itemArray); 
      } 
     } 
     else { 
      $_SESSION["cart_item"] = $itemArray; 
     } 
    } 
    break; 

case "remove": 
    if(!empty($_SESSION["cart_item"])) { 
     foreach($_SESSION["cart_item"] as $k => $v){ 
      if($_GET["med_id"] == $_SESSION["cart_item"][$k]['med_id']) 
       unset($_SESSION["cart_item"][$k]);   
      if(empty($_SESSION["cart_item"])) 
       unset($_SESSION["cart_item"]); 
     } 
    } 
    break; 
+0

あなたのカート用のプラグインやライブラリを使用したり、それを自分でコーディングされていますか? – PhpDude

+0

$ _SESSION ["cart_item"] [$ quantity]] = $ _POST ["quantity"]; 'は$ _SESSION [" cart_item "] [$ k] [" quantity "] + = $ _POST [" quantity "];'、 '+ ='に気付く。 – Rasclatt

+0

また、これをしないでください: '' SELECT * FROM medicine where med_id = '"。 $ _GET ["med_id"]。 "" "。あなたはSQLインジェクションの機会を許しています。 'med_id'が数値であると想定されている場合、まず数値であることを確認し、そうでなければエラーを投げます。最も簡単なのはparamをバインドすることだけです。 – Rasclatt

答えて

0

追加の問題に対処するには、関数を使用してロジックを再加工すると役立つかどうかを確認することができます。私は少しでもそれをきれいにするだろう。別のページ(複数可)に機能を保存し、使用前にそれらを含める:スイッチに追加の

function getMedsById($id,$db) 
    { 
     if(!is_numeric($id)) 
      return false; 

     $productByCode = $db->runQuery("SELECT * FROM medicine WHERE med_id='" . $id . "'"); 

     $product = (!empty($productByCode[0]["med_id"]))? $productByCode[0] : false; 
     if(empty($product)) 
      return false; 

     return array(
      'name'=>$product["med_name"], 
      'med_id'=>$product["med_id"], 
      'image'=>$product["Image"], 
      'price'=>$product["unit_cost"] 
     ); 
    } 

function addToCart($array,$id,$qty) 
    { 
     $array['quantity'] = $qty; 
     # Save item to cart 
     $_SESSION["cart_item"][$id] = $array; 

    } 

リワーク:

case "add": 
    if(!empty($_POST["quantity"])) { 
     # Just do a basic ternary to avoid warnings 
     $id = (!empty($_GET["med_id"]))? $_GET["med_id"] : false; 
     # Check input not manipulated 
     $qty = (!empty($_POST['quantity']) && is_numeric($_POST['quantity']))? $_POST['quantity'] : 1; 
     # Use the function to get the item from db 
     $prod = getMedsById($id,$db_handle); 
     # Stop if return is empty (user may be trying to manipulate cart) 
     if(empty($prod)) 
      break; 
     # Same as yours 
     if(!empty($_SESSION["cart_item"])) { 
      # Check if this product is already set 
      if(isset($_SESSION["cart_item"][$id])){ 
       # If already set, just add the qty to existing 
       $_SESSION['cart_item'][$id]['quantity'] += $qty; 
       # Stop the add process here 
       break; 
      } 
     } 
     # Just add to cart here, it won't get here if already in cart 
     addToCart($prod,$id,$qty); 
    } 
    break; 
+0

私は$ _SESSION ["cart_item"] [$ k] ["quantity"] = $ _POST ["quantity"]を変更しました。 $ _SESSION ["cart_item"] [$ k] ["quantity"] + = $ _POST ["quantity"];それでもなお同じ問題です。アイテムがすでにカートに入っている場合は、アイテムの新しい行が追加されます。私は前の量のアイテムを変更する必要があります。プラグインやライブラリは使用されません。 – Nikhil

+0

@Nikhilあなたは私の機能を試しましたか? – Rasclatt

関連する問題