Я работаю над системой корзин 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);
}
Это, кажется, работает сейчас. Спасибо sujivasagam – yaqoob
Теперь элементы, добавляемые отдельно, это ответ, который я смотрел. Но есть проблема с удалением. все элементы удаляются, потому что '$ product_code' одинаково, как это сделать? Я применил это же условие 'if ($ cart_itm [" code "]! == $ product_code && $ cart_itm [" size "]! == $ product_size) {' – yaqoob
@yaqoob Ваше условие в комментарии не является ни тем же, ни напротив условия судживасагама. Код, на который вы ссылаетесь, также не отображается.Пожалуйста, задайте новый вопрос в этой части – holroy