Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.65/40: Рейтинг темы: голосов - 40, средняя оценка - 4.65
 Аватар для Kazachek
18 / 18 / 8
Регистрация: 03.11.2013
Сообщений: 405

Корзина интернет магазина PHP массивы + сессии

10.08.2016, 14:44. Показов 7660. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем добрый день.
Помогите пожалуйста разобраться с массивом внутри массива в сессии.

Задачи:

Проверить на существование массив cart
Если он существует:
.........Искать в массиве cart добавляемый продукт по ID-продукта
.........Если он существует
..................добавить к его количеству (поле cnt) +1
.........Иначе:
..................Создать новый массив(ключ ID продукта) с параметрами добавляемого продукта и добавить его в массив cart

Иначе:
.........Создать массив cart
.........Создать новый массив(ключ ID продукта) с параметрами добавляемого продукта и добавить его в массив cart



Очень нуждаюсь в помощи. Создание одного массива смог сделать, а остальное нет.
Пожалуйста помогите.

Добавлено через 30 минут
Нашел проверку существования массива
PHP
1
2
3
4
5
6
$array = array();   
if(is_array($array)){
      echo("Существует."); // TRUE
}else{
      echo("Не Существует."); // FALSE
}
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2016, 14:44
Ответы с готовыми решениями:

Корзина для интернет магазина (Куки или сессии)
Добрый день, появилась надобность написать небольшой интернет магазинчик, опыта программирования на PHP у меня не много. Магазинчик нужен...

корзина интернет магазина с использованием ip
Делаю тут корзину для интернет магазина. Хочу испольховать в качестве идентификатора пользователя его ip, т.е. в корзине отображаются...

Корзина для интернет магазина
Добрый вечер! Нужна помощь При нажатии на кнопку "добавить" на главной странице добавляется товар и выводится на странице корзины. У...

15
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
10.08.2016, 15:12
Лучший ответ Сообщение было отмечено Kazachek как решение

Решение

Если именно вашему алгоритму следовать, то как-то так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
$id = 0; // id товара
 
if(isset($_SESSION['cart']))
{
    if(isset($_SESSION['cart'][$id]))
        $_SESSION['cart'][$id]['cnt'] += 1;
    else
        $SESSION['cart'][$id]['cnt'] = 1;
}
else
{
    $_SESSION['cart'] = [];
    $_SESSION['cart'][$id]['cnt'] = 1;
}
Разумеется, до этого нужно сессию запустить.
1
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
10.08.2016, 20:24
Цитата Сообщение от Jodah Посмотреть сообщение
PHP
1
$_SESSION['cart'][$id]['cnt'] += 1;
можно даже не создавать ключ cnt а просто
PHP
1
$_SESSION['cart'][$id]++;
и того будет
1=>2
ключ это id а значение это кол-во.
2
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
10.08.2016, 21:33
Цитата Сообщение от Azdeman Посмотреть сообщение
можно даже не создавать ключ cnt а просто
Согласен, просто в ТЗ написано:
Цитата Сообщение от Kazachek Посмотреть сообщение
Создать новый массив(ключ ID продукта) с параметрами добавляемого продукта и добавить его в массив cart
Предположил, что раз есть параметры, то надо делать внутри [id] массив этих параметров, cnt в частности.
1
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
10.08.2016, 22:01
Ну тогда вы правы.
0
 Аватар для Kazachek
18 / 18 / 8
Регистрация: 03.11.2013
Сообщений: 405
11.08.2016, 07:39  [ТС]
Друзья огромное спасибо за доходчивое объяснение и помощь.
Если я правильно понял это называется асоциативным массивом?

Решил немножко усложнить себе задачу:
Каждый продукт должен иметь id,количество, стоимость

я на правильном пути?

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$id = 0; // id товара
$p_count = 3; // количество товара
$p_price = 15; // стоимость товара
 
if(isset($_SESSION['cart']))
{
    if(isset($_SESSION['cart'][$id]))
        $_SESSION['cart'][$id]['cnt'] += $p_count;
        $_SESSION['cart'][$id]['prc'] = $p_price;
    else
        $SESSION['cart'][$id]['cnt'] = $p_count;
        $_SESSION['cart'][$id]['prc'] = $p_price;
}
else
{
    $_SESSION['cart'] = [];
    $_SESSION['cart'][$id]['cnt'] = $p_count;
    $_SESSION['cart'][$id]['prc'] = $p_price;
}
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
11.08.2016, 07:51
Kazachek,
1. Я бы чуть поменял логику - перенёс создание массива в начало, чтобы избежать дублирования кода.
2. Вы забыли {} для if и else
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
if(!isset($_SESSION['cart']))
    $_SESSION['cart'] = [];
 
if(isset($_SESSION['cart'][$id]))
{
    $_SESSION['cart'][$id]['cnt'] += $p_count;
    $_SESSION['cart'][$id]['prc'] = $p_price;
}
else
{
    $SESSION['cart'][$id]['cnt'] = $p_count;
    $_SESSION['cart'][$id]['prc'] = $p_price;
}
Цитата Сообщение от Kazachek Посмотреть сообщение
я на правильном пути?
В целом да, только цену в сессии не хранят.
1
 Аватар для Kazachek
18 / 18 / 8
Регистрация: 03.11.2013
Сообщений: 405
11.08.2016, 08:04  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
только цену в сессии не хранят.
У меня в блоке должно отобразится количество товаров и стоимость всех товаров в корзине.
Я думал, что если в сессии будут данные о ценах, я каждого умножу на количество и приплюсую к остальным.

как правильно это делается?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
11.08.2016, 08:21
Kazachek, товары, цены и всё прочее хранится в БД. В корзине хранятся товары, которые пользователь туда добавил. В качестве доп. параметров могут выступать цвет, размер и прочее.

В корзине есть id товара. Вот по этому id получаете данные из БД, и выводите.
1
 Аватар для Kazachek
18 / 18 / 8
Регистрация: 03.11.2013
Сообщений: 405
11.08.2016, 08:42  [ТС]
Jodah, еще один вопрос:

В массиве хранятся несколько продуктов с количеством,
как мне высчитать общее количество всех товаров?

Я должен определить, сколько в массиве вложенных массивов, потом в цикле вытаскивать значения ['cnt'] и суммировать?
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
11.08.2016, 08:51
Kazachek, обычный перебор
PHP
1
2
3
4
$products_count = 0;
 
foreach($_SESSION['cart'] as $product)
    $products_count += $product['cnt'];
1
 Аватар для Kazachek
18 / 18 / 8
Регистрация: 03.11.2013
Сообщений: 405
28.08.2016, 14:03  [ТС]
Цитата Сообщение от Kazachek Посмотреть сообщение
$_SESSION['cart'] = [];
Всем добрый день. Пожалуйста разясните для чего служит вот эта часть кода. Как я понял для создания пустого массива в сессиях. Почему я задал этот вопрос - дело в том что код ведет себя по разному в двух разных хостин серверах.
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
28.08.2016, 14:05
Цитата Сообщение от Kazachek Посмотреть сообщение
Как я понял для создания пустого массива в сессиях.
Всё верно.
Цитата Сообщение от Kazachek Посмотреть сообщение
дело в том что код ведет себя по разному в двух разных хостин серверах.
На одном из них версия PHP ниже 5.4, оттуда и ошибки, если Вы он них.
1
 Аватар для Kazachek
18 / 18 / 8
Регистрация: 03.11.2013
Сообщений: 405
28.08.2016, 14:08  [ТС]
Цитата Сообщение от Para bellum Посмотреть сообщение
На одном из них версия PHP ниже 5.4, оттуда и ошибки, если Вы он них.
Изменил до 5.6 всё равно сессия не создается

ниже пример кода
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
case 'add_to_cartss':
    $p_count=$_POST['pcounter_val'];
    $p_id=$_POST['clickId'];
    $p_price=$_POST['cenna'];
    if($p_count>1){
        $p_price=$p_price*$p_count;
    }
    
    $id = $p_id; // id товара
    $p_count = $p_count; // количество товара
    $p_price = $p_price; // стоимость товара
     
    if(!isset($_SESSION['cart']))
        $_SESSION['cart'] = [];
     
        if(isset($_SESSION['cart'][$id]))
        {
            $_SESSION['cart'][$id]['cnt'] += $p_count;
            $_SESSION['cart'][$id]['prc'] += $p_price; 
        }
        else
        {
            $_SESSION['cart'][$id]['cnt'] = $p_count;
            $_SESSION['cart'][$id]['prc'] = $p_price;
        }
    
    
        
        if(isset($_SESSION['cart'])){
            $products_count = 0;
    
     
    foreach($_SESSION['cart'] as $product)
       $products_count += $product['cnt'];
       
    }else{
        $products_count=0;
        
    }
    
    
    
    if(isset($_SESSION['cart'])){
    
        $products_price = 0;
     
    foreach($_SESSION['cart'] as $productes)
       
       $products_price += $productes['prc'];
    }else{
        
        $products_price=0;
    }
    
    $otvet=$products_count."|".$products_price;
    echo $otvet;
        
    
break;
0
Эксперт PHP
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,904
28.08.2016, 14:13
Цитата Сообщение от Kazachek Посмотреть сообщение
сессия не создается
session_start сделали?
1
 Аватар для Kazachek
18 / 18 / 8
Регистрация: 03.11.2013
Сообщений: 405
28.08.2016, 14:16  [ТС]
Цитата Сообщение от Jodah Посмотреть сообщение
session_start сделали?
((( при копировании незнаю как удалилось.

Прошу простить за то что отвлек вас от дел(((

Прописал всё заработало.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.08.2016, 14:16
Помогаю со студенческими работами здесь

Нужна корзина для интернет-магазина, на заказ
Нужна корзина для этого магазина www.shop.n-volna.ru

Корзина для интернет-магазина
Здравствуйте, я новичок и мне очень нужна корзина для моего интернет-магазина. Желательно через сессию. Напишите пожалуйста, кому не...

Простая корзина для интернет магазина
Здраствуйте, сейчас работаю над одним сайтом где необхадима простая корзина для покупок.В интернете нашел множество всяких примеров, но все...

Корзина для интернет-магазина на php и сессиях
Здравствуйте, необходимо разработать корзину товаров для интернет магазина , скажем у меня на сайте есть каталог товаров , у каждого товара...

Корзина для интернет магазина
Помогите пожалуйста сделать корзину и форму для заказа, у кого есть код либо исходник?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru