продукты дважды отображаются в массиве php

#php #shopping-cart

Вопрос:

Пожалуйста, мне нужна помощь, я создаю функцию корзины для магазина тортов. когда я добавляю продукт, он работает, но если я добавляю его снова, он отображается как 2-й массив. Как я могу убедиться, что продукт добавляется только один раз. я использовал функцию in_array (), но, похоже, я неправильно ее понял.

Вот мой код

 lt;?php  session_start(); if(isset($_POST['add_to_cart'])) {  // if the cart isn't opened  if(!isset($_SESSION['cart']))  {  $_SESSION['cart'][0]=array('cakename'=gt;$_POST['cakename'],'cakeprice'=gt;$_POST['cakeprice'],'Quantity'=gt;1);     echo "lt;scriptgt;  alert('Item Added');  window.location.href='index.php';  lt;/scriptgt;";  }  // If the product already exists in the shopping cart  elseif(in_array($_POST['cake_name'],$_SESSION['cart']))  {  echo "lt;scriptgt;  alert('Item ALREADY Added');  window.location.href='index.php';  lt;/scriptgt;";    }  else  {  $count= count($_SESSION['cart']);   $_SESSION['cart'][$count]= array('cakename'=gt;$_POST['cakename'],'cakeprice'=gt;$_POST['cakeprice'],'Quantity'=gt;1);     echo "lt;scriptgt;  alert('Item Added');  window.location.href='index.php';  lt;/scriptgt;";  }  } ?gt;  

Комментарии:

1. Я думаю, вы имеете $_POST['cakename'] в виду, но вместо этого вы ввели $_POST['cake_name'] это elseif условие. Я подозреваю, что это своенравное подчеркивание вызывает эту проблему.

2. Большое вам спасибо за то, что указали на эту ошибку. К сожалению, исправление этого не сработало.

Ответ №1:

 // your session is a mutidimension array  // let session has the following values $_SESSION['cart'] = [  0 =gt; ['cakename'=gt; 'cake1','cakeprice'=gt;'200.00', 'quantity'=gt;1],  1 =gt; ['cakename'=gt; 'cake2','cakeprice'=gt;'100.00', 'quantity'=gt;3],  2 =gt; ['cakename'=gt; 'cake3','cakeprice'=gt;'300.00', 'quantity'=gt;4] ];  // NOTE : I have skipped the validation / sanitizaion part of $_POST $cakeName = $_POST['cakename']; $cakePrice = $_POST['cakeprice'];  if(!isset($_SESSION['cart'])){  $_SESSION['cart'] = []; } // empty array is false in lt;IFgt; if($_SESSION['cart'] amp;amp; ( $key = array_search($cakeName, array_column($_SESSION['cart'], 'cakename')) !== FALSE ){  $_SESSION['cart'][$key]['quantity']  = 1; } else {  $_SESSION['cart'][] = ['cakename'=gt; $cakeName,'cakeprice'=gt;$cakePrice, 'quantity'=gt;1]; }  

Это может помочь!!

Комментарии:

1. вы должны взять идентификатор вместо имени торта в сеансе

2. Спасибо вам за вашу помощь. Я решил эту проблему. Я не использовал правильные условия if-else, поэтому в результате код повторил только первое и последнее условия.