2015-06-01 2 views
3

Я работаю над системой корзин PHP, и у меня есть проблема.PHP Session Array - хранить тот же элемент с разными значениями

Проблема:

Когда пользователь добавляет элемент, а затем снова, добавляет тот же элемент, но с разными значениями типа (разного размера или количества) тележка обновляет эту запись с новыми значениями, которая, выбранные пользователь. предыдущая информация удаляется.

Решение я искал

Если пользователь добавляет какой-либо элемент, а затем хочет добавить тот же товар, но с разными требованиями, должны быть добавлены как отдельный элемент ИНТ телеги сессии. (Только если изменяется конкретная переменная, например: один продукт, но с разными размерами).

Как я могу это сделать в своем текущем коде?

корзина

//add item in shopping cart 
if(isset($_POST["type"]) && $_POST["type"]=='add') 
{ 
    $product_code = filter_var($_POST["product_code"], FILTER_SANITIZE_STRING); //product code 
    $product_size = filter_var($_POST["product_size"], FILTER_SANITIZE_NUMBER_INT); //product size 
    $product_qty = filter_var($_POST["product_qty"], FILTER_SANITIZE_NUMBER_INT); //product quantity 
    $return_url  = base64_decode($_POST["return_url"]); //return url 


    //MySqli query - get details of item from db using product code 
    $results = $connection->query("SELECT * FROM products WHERE prod_code='$product_code' LIMIT 1"); 
    $obj = $results->fetch_object(); 

    if ($results) { //we have the product info 

     //prepare array for the session variable 
     $new_product = array(array('name'=>$obj->product_name, 'code'=>$product_code, 'size'=>$product_size, 'qty'=>$product_qty, 'price'=>$obj->price)); 

     if(isset($_SESSION["products"])) //if we have the session 
     { 
      $found = false; //set found item to false 

      foreach ($_SESSION["products"] as $cart_itm) //loop through session array 
      { 
       if($cart_itm["code"] == $product_code){ //the item exist in array 

        $product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'size'=>$product_size, 'qty'=>$product_qty, 'price'=>$cart_itm["price"]); 
        $found = true; 
       }else{ 
        //item doesn't exist in the list, just retrieve old info and prepare array for session var 
        $product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'size'=>$cart_itm["size"], 'qty'=>$cart_itm["qty"], 'price'=>$cart_itm["price"]); 
       } 
      } 

      if($found == false) //we didn't find item in array 
      { 
       //add new user item in array 
       $_SESSION["products"] = array_merge($product, $new_product); 
      }else{ 
       //found user item in array list, and increased the quantity 
       $_SESSION["products"] = $product; 
      } 

     }else{ 
      //create a new session var if does not exist 
      $_SESSION["products"] = $new_product; 
     } 

    } 

    //redirect back to original page 
    header('Location:'.$return_url); 
} 

Ждем некоторые полезные ответы.

Благодаря

***** ****** UPDATE

Код для удаления продукта из корзины:

//remove item from shopping cart 
if(isset($_GET["removep"]) && isset($_GET["return_url"]) && isset($_SESSION["products"])) 
{ 
    $product_code = $_GET["removep"]; //get the product code to remove 
    $return_url  = base64_decode($_GET["return_url"]); //get return url 


    foreach ($_SESSION["products"] as $cart_itm) //loop through session array var 
    { 
     //if($cart_itm["code"]!=$product_code){ //item does,t exist in the list 
     if($cart_itm["code"] != $product_code && $cart_itm["size"] != $product_size){ 
      $product[] = array(
      'name'=>$cart_itm["name"], 
      'code'=>$cart_itm["code"], 
      'size'=>$cart_itm["size"], 
      'qty'=>$cart_itm["qty"], 
      'price'=>$cart_itm["price"] 
      ); 
     } 

     //create a new product list for cart 
     $_SESSION["products"] = $product; 
    } 

    //redirect back to original page 
    header('Location:'.$return_url); 
} 

ответ

2

if условием, что вы используете это ошибка, ты сделал. Попробуйте один

if($cart_itm["code"] == $product_code && $cart_itm["size"] == $product_size) 

вместо

if($cart_itm["code"] == $product_code) 

Метод проверки с количеством не является хорошей практикой, так как вы можете изменить количество один в уже существующую запись.

+0

Это, кажется, работает сейчас. Спасибо sujivasagam – yaqoob

+0

Теперь элементы, добавляемые отдельно, это ответ, который я смотрел. Но есть проблема с удалением. все элементы удаляются, потому что '$ product_code' одинаково, как это сделать? Я применил это же условие 'if ($ cart_itm [" code "]! == $ product_code && $ cart_itm [" size "]! == $ product_size) {' – yaqoob

+0

@yaqoob Ваше условие в комментарии не является ни тем же, ни напротив условия судживасагама. Код, на который вы ссылаетесь, также не отображается.Пожалуйста, задайте новый вопрос в этой части – holroy

2

Вам необходимо разработать код товара, который уникален, чтобы заставить его работать. Либо вы можете комбинировать код продукта с размером или количеством, либо использовать что-то вроде GUID для хранения отдельной позиции корзины.

Сводный ключ имеет проблему при изменении размера или количества. Использование GUID требует небольшой работы, но является жизнеспособным и надежным решением.

+0

Спасибо holroy, я попробую это. – yaqoob

+0

обновил (а) мой вопрос с кодом для "удаление элемента" – yaqoob

0

попробуйте объявить $product как массив в начале.

$product = array(); 

Надеюсь, это поможет.

+0

@sujivasagam ответ разработан для меня. Спасибо :) – yaqoob

Смежные вопросы