#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, поэтому в результате код повторил только первое и последнее условия.