Форум программистов, компьютерный форум, киберфорум
PHP: базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/190: Рейтинг темы: голосов - 190, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 138

Простая корзина товаров PHP + mysql

14.02.2018, 07:50. Показов 40233. Ответов 19

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Прошу помощи в создании очень простой корзины товаров.
Есть вывод товаров с базы данных, как сделать корзину товаров.
Допустим к товарам добавить кнопку "В корзину" при нажатии которой будет добавляться товар в корзину.
Сохранение корзины в бд не нужно. Нужна корзина через куки или сессию. Сам сайт: http://host1649597.hostland.pr... fyumeriya/
Нужна максимально простая, главное что-бы работала)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
14.02.2018, 07:50
Ответы с готовыми решениями:

Корзина на PHP И MySQL
Проблема следующая - при добавлении в корзину товара счетчик обновляется, в том числе и в базе, а таблица "trash" нет, запись не...

Корзина (MySQL + PHP) самая надоедлевая тема)))
Здравствуйте. Прошу помощи в таком вопросе, есть корзина PHP в которую добавляются товары. Таблицу товаров получаю из MySQL которая имеет...

Корзина на php+mysql (или нет.) желательно без перезагрузки.но это уже не важно
Направьте меня, пожалуйста.. Не могу сделать корзину товаров. Совсем не понимаю как она должна выглядеть и как это реализовать.:-|...

19
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
14.02.2018, 09:56
Самое простое:
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
class Cart
{
    /**
     * Данные корзины
     * 
     * @var array
     */
    protected $data = [];
    
    /**
     * Имя cookie с корзиной
     * 
     * @var string
     */
    protected $name = 'cart';
 
 
    public function __construct()
    {
        $this->decode();
    }
    
    /**
     * Добавление ID товара
     * 
     * @param integer $id
     * @return void
     */
    public function set($id)
    {
        if (!in_array($id, $this->data)) {
            $this->data[] = (int) $id;
        }
    }
    
    /**
     * Получение массива ID товаров
     * 
     * @return array
     */
    public function get()
    {
        return $this->data;
    }
    
    /**
     * Удаление товара из корзины
     * 
     * @param integer $id
     * @return void
     */
    public function delete($id)
    {
        if (false !== $key = array_search($id, $this->data)) {
            unset($this->data[$key]);
        }
    }
    
    /**
     * Получение корзины из cookie
     * 
     * @return void
     */
    protected function decode()
    {        
        $data = $_COOKIE[$this->name] ?? '';
        
        if ($data = json_decode($data, true)) {
            $this->data = array_filter($data, 'is_int');
        }
    }
    
    /**
     * Сохранение корзины в cookie
     * 
     * @return void
     */
    public function save()
    {
        setcookie($this->name, json_encode($this->data), time() + 30 * 86400);
    }
}
Использование:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# Добавление ID товара в корзину
$cart = new Cart;
$cart->set(1);
 
$cart->save();
 
# Удаление ID товара из корзины
$cart = new Cart;
$cart->delete(1);
 
$cart->save();
 
# Получение ID товаров из корзины
$cart = new Cart;
$ids = $cart->get();
Добавлено через 6 минут
Пара уточнений:
1) Если есть инструменты для работы с запросом и ответом (Request и Response), то напрямую к $_COOKIE лучше не обращаться и setcookie не вызывать, а использовать те инструменты.

2) Будет работать только в PHP 7. Для более ранних версий напишите 66 так:
PHP
1
$data = isset($_COOKIE[$this->name]) ? $_COOKIE[$this->name] : '';
1
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 138
14.02.2018, 20:06  [ТС]
Что-то сложно не могу понять
0
8 / 8 / 3
Регистрация: 06.12.2013
Сообщений: 200
15.02.2018, 01:58
Писать коды не буду, но принцип должен быть следующий.
Кнопка "Добавить в корзину" должна быть либо кнопкой формы либо картинкой ссылки, в зависимости от того каким методом будут передаваться данные на сервер POST или GET. В этих данных должны быть ID товара и допустим его кол-во, т.е. два значения. На сервере скрипт обрабатывает эти два значения и помещает в суперглобальный массив SESSION. А уж из него Вы черпаете информацию о добавленных товарах в самой корзине. На основе имеющихся данных в массиве SESSION можно стилизовать кнопку "Корзина" (подсветить там ее и написать сколько товаров в ней лежит...)
0
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 138
15.02.2018, 02:30  [ТС]
ну вот код кнопки
PHP/HTML
1
echo "<table><tr><th>Name</th><th>Code</th><th>Price</th><th>Brand</th><th>description</th></tr><tr><td>". $row['name']."</td><td>". $row['code']."</td><td>". $row['price']."</td><td>". $row['brand']."</td><td>". $row['description']."</td><td><a href='add_to_trash.php?id=". $row['category_id']."'>Add</a></td></tr></table><br />";
а именно
PHP/HTML
1
<a href='add_to_trash.php?id=". $row['category_id']."'>Add</a>
вот передача ид товара. дальше нужно сделать поиск товара по ид и добавление в корзину тут то я и бессилен
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
15.02.2018, 06:28
Цитата Сообщение от VladPik Посмотреть сообщение
Что-то сложно не могу понять
Код, что я привёл, сохраните в отдельный файл, затем подключайте его там, где нужно использовать корзину. Как использовать, я сказал после подписи "Использование:".
Ничего сложного.

Добавлено через 13 минут
Цитата Сообщение от VladPik Посмотреть сообщение
добавление в корзину тут то я и бессилен
А для кого я готовый код корзины написал?
Например, сохранили тот код в файле "Cart.php". Затем, в add_to_trash.php (лучше в add_to_cart.php) пишем:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
 
require 'путь/к/файлу/Cart.php';
 
$id = filter_input(INPUT_POST, 'id', FILTER_VALIDATE_INT);
 
if (!$id) {
    # Указано не число или ноль. Можно ошибку выводить или возвращать назад
}
 
# Дальше проверяйте, есть ли товар в базе (хотя можно и не проверять, всё равно на клиенте корзина)
 
# Добавление ID товара в корзину
$cart = new Cart;
$cart->set($id);
 
$cart->save();
Проверку на наличие товара в базе можно не делать, так как корзина хранится на клиенте в открытом виде. Если ему надо, он может cookie подредактировать, добавив туда кучу несуществующих ID.

Для защиты от таких случаев я cookie шифровал в своих проектах.
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
15.02.2018, 13:40
Цитата Сообщение от VladPik Посмотреть сообщение
т передача ид товара. дальше нужно сделать поиск товара по ид и добавление в корзину тут то я и бессилен
SQL
1
SELECT `from your table ` WHERE id='Ваше id'
0
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 138
15.02.2018, 15:48  [ТС]
Parse error: syntax error, unexpected '[' in cart.php on line 9
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
15.02.2018, 15:59
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
<?php
session_start();
$path='phones.txt';
 
if($_POST['buy']) {
    unset($_SESSION['b']);
        unset($_SESSION['count_p']);
    echo "<p align='center'><span style='font-size: 20px; color: blue; border: 1px solid red;'>Thank you for purchasing :)!!!</span></p><br>";
 
    }
 
if($_POST['clear']) {
    unset($_SESSION['count_p']);
 
unset($_SESSION['b']);
    
 
$fp = fopen($path, 'w'); 
fputs($fp, "");
fclose($fp);
}
 
if($_POST['s']) {
 
    for($i=0;$i<count($_POST['id']); $i++){
 
 $result= $_POST['id'][$i]."\\\n";
 
$fp = fopen($path, 'a'); 
fputs($fp, $result);
fclose($fp);
 
        
 
 
    }
    if(!$_SESSION['count_p']) {
    $_SESSION['count_p'] = count($_POST['id']);
 
    }
    else {$_SESSION['count_p'] =  $_SESSION['count_p']+count($_POST['id']);}
}
?>
 
 
 
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
<title>Корзина</title>
 
<style type="text/css">
.korzina {
    
    margin-left: 200px;
    background: black;
    width: 200px;
    height: 200px;
    color: white;
    overflow: scroll;
    
}
</style>
<body>
<div class='korzina'>
 
<?PHP 
 
if($_SESSION['count_p']) {  
 
 echo "You added <span style='color: orange;'>$_SESSION[count_p] products</span> ";
 
 echo "Selected product: <br>";
 
 
     $a = file_get_contents($path);
 
    echo "<span style='color: yellow;'>".$a."</span><br>";
 
 echo "<form action='' method='POST'><input type='submit'  name='buy' value='buy'></form>";
 }
 else {echo "Until empty. Choose a product";}
 
 ?></div>
 
 
<div>
<form action='' method='POST'>
SAMSUNG(250$)<input value='SAMSUNG(250$)' type='checkbox' name='id[]' >
NOKIA(150$)<input value='NOKIA(150$)'type='checkbox' name='id[]'  >
APPLE(300$)<input value='APPLE(300$)' type='checkbox' name='id[]' >
MOTOROLA(400$)<input  value='MOTOROLA(400$)'type='checkbox' name='id[]' >
TESLA(500$)<input value='TESLA(500$)' type='checkbox' name='id[]' >
<input type='submit' name='s' value='Add'>
<input type='submit' name='clear' value='clear'>
</div>
</form>
</body>
</html>
вот вам мой вариант))) у Para bellum правильнее! - мой просто для теста))

Добавлено через 5 минут
Цитата Сообщение от VladPik Посмотреть сообщение
Parse error: syntax error, unexpected '[' in cart.php on line 9
посмотрите какая у вас версия php
в новой -можно создавать массив $a = [];
а старой $a = array();
0
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
15.02.2018, 16:23
Цитата Сообщение от andyyy Посмотреть сообщение
посмотрите какая у вас версия php
У него, наверное, 5.3 ещё.
Цитата Сообщение от VladPik Посмотреть сообщение
Parse error: syntax error, unexpected '[' in cart.php on line 9
Если нужно, чтобы работало в старинных версиях, вот:
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<?php
 
class Cart
{
    /**
     * Данные корзины
     * 
     * @var array
     */
    protected $data = array();
    
    /**
     * Имя cookie с корзиной
     * 
     * @var string
     */
    protected $name = 'cart';
 
    public function __construct()
    {
        $this->decode();
    }
    
    /**
     * Добавление ID товара
     * 
     * @param integer $id
     * @return void
     */
    public function set($id)
    {
        if (!in_array($id, $this->data)) {
            $this->data[] = (int) $id;
        }
    }
    
    /**
     * Получение массива ID товаров
     * 
     * @return array
     */
    public function get()
    {
        return $this->data;
    }
    
    /**
     * Удаление товара из корзины
     * 
     * @param integer $id
     * @return void
     */
    public function delete($id)
    {
        if (false !== $key = array_search($id, $this->data)) {
            unset($this->data[$key]);
        }
    }
    
    /**
     * Получение корзины из cookie
     * 
     * @return void
     */
    protected function decode()
    {
        $data = filter_input(INPUT_COOKIE, $this->name, FILTER_SANITIZE_STRING);
        
        if ($data = json_decode($data, true)) {
            $this->data = array_filter($data, 'is_int');
        }
    }
    
    /**
     * Сохранение корзины в cookie
     * 
     * @return void
     */
    public function save()
    {
        setcookie($this->name, json_encode($this->data), time() + 30 * 86400);
    }
}
0
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 138
16.02.2018, 14:38  [ТС]
andyyy, ваш способ мне больше подходит. но как сделать вывод с бд и обойтись без phones.txt
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
16.02.2018, 14:59
Цитата Сообщение от VladPik Посмотреть сообщение
andyyy, ваш способ мне больше подходит. но как сделать вывод с бд и обойтись без phones.txt
если вы просто для теста - то можете мой использовать, если серьезные операции с деньгами - то возьмите вариант
Para bellum на классах.

Цитата Сообщение от VladPik Посмотреть сообщение
но как сделать вывод с бд и обойтись без phones.txt
вместо таких строк,

PHP
1
2
3
$fp = fopen($path, 'a'); 
fputs($fp, $result);
fclose($fp);
где вы сохраняйте дааные в текстовом документе вы пишите инсерт в базу(сами надеюсь справитесь)

Добавлено через 36 секунд
можете сделать на ajax - тогда у вас все будет без перезагрузки
0
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 138
16.02.2018, 15:56  [ТС]
да ваш способ для меня более менее понятен а в его способе что то неизвестное мне. можно как нибудь обойтись без записи в бд что-бы содержание хранилось у пользователя в сессии. просто если записывать в бд то у всех будет одна корзина. и магазин без регистрации так что нельзя будет каждому пользователю обозначить свою корзину
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
16.02.2018, 17:55
Цитата Сообщение от VladPik Посмотреть сообщение
одержание хранилось у пользователя в сессии.
файл я сделал для того чтобы суммировались все покупки, к примеру если он захотел еще что то купить- чтобы не заново начиналось, а приплюсовывалось)


вот простая

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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
<?php
session_start();
 
 
if($_POST['buy']) {
 
        unset($_SESSION['count_p']);
    echo "<p align='center'><span style='font-size: 20px; color: black; border: 1px solid red;'>Thank you for purchasing :)!!!</span></p><br>";
 
    }
 if($_POST['clear']) {
 
 }
 
 
if($_POST['add']) {
    
    $all = count ($_POST['id']);
 echo "<div style='background: grey;  width: 200px; position: absolute; right: 1%; color: white;'>Last <b>$all</b> choosed products: <span style=' color: blue;'>";
 
 
 
   
   for($i=0;$i<count($_POST['id']); $i++){
 
 $result= "<p><a href='#'>".$_POST['id'][$i]."</a></p>"; 
 
 echo $result;
 
        
 
 
    }
 
 
    echo "<form method='POST'><input type='submit'  name='buy' value='BYE'></form>";
    echo "</span></div>";
  //  if(!$_SESSION['count_p']) {
  //  $_SESSION['count_p'] = count($_POST['id']);
 
  //  }
   // else {$_SESSION['count_p'] =  $_SESSION['count_p']+count($_POST['id']);}
}
?>
 
 
 
 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 
<title>Корзина</title>
 
<style type="text/css">
 
#aaa:checked + label {background: grey;}
 
</style>
<body>
 <?php if(!$_POST['add']) { ?>
 <div style='background: grey;  width: 200px; position: absolute; right: 1%; color: white;'> 
 Choose a product</div>
 <?php }?>
<div>
<form action='' method='POST'>
<input id='aaa' value='SAMSUNG(250$)' type='checkbox' checked name='id[]' ><label for='aaa'>SAMSUNG(250$)</label>
<input id='aaa'value='NOKIA(150$)'type='checkbox' name='id[]'  ><label for='aaa'>NOKIA(150$))</label>
<input id='aaa' value='APPLE(300$)' type='checkbox' name='id[]' ><label for='aaa'>APPLE(300$)</label>
<input id='aaa' value='MOTOROLA(400$)'type='checkbox'  name='id[]' ><label for='aaa'>MOTOROLA(400$))</label>
<input id='aaa' value='TESLA(500$)' type='checkbox' name='id[]' ><label for='aaa'>TESLA(500$)</label>
<input type='submit' name='add' value='Add'>
<input type='submit' name='clear' value='clear'>
</div>
</form>
</body>
</html>
0
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 138
16.02.2018, 18:42  [ТС]
все же не выходит сделать такую корзину http://z-shop.net/cart
0
767 / 323 / 157
Регистрация: 26.05.2016
Сообщений: 2,127
16.02.2018, 19:34
Цитата Сообщение от VladPik Посмотреть сообщение
Что-то сложно не могу понять
делайте думайте! там на javascript сделано
Стилизируйте корзинку + отслеживайте клик + и прибавляйте счетчик
0
0 / 0 / 0
Регистрация: 03.09.2015
Сообщений: 138
17.02.2018, 16:35  [ТС]
не могу ничего найти в интернете то что бы подошло. Простенькая корзина на php js
0
576 / 514 / 253
Регистрация: 26.09.2010
Сообщений: 2,603
17.02.2018, 20:40
Цитата Сообщение от VladPik Посмотреть сообщение
не могу ничего найти в интернете то что бы подошло. Простенькая корзина на php js
Вам же дали пример, объяснили как сделать, если до Вас не доходит значит надо нанять человека который за Вас это сделает
0
3 / 3 / 0
Регистрация: 29.07.2017
Сообщений: 33
22.12.2018, 18:15
Разбираю ваш код, ну так вот, у меня почему то не работает удаление куки:

функция
PHP
1
2
3
4
5
6
public function delete($id)
    {
        if (false !== $key = array_search($id, $this->data)) {
            unset($this->data[$key]);
        }
    }
вызов

PHP
1
2
3
4
5
6
7
8
if ($action == 'delete')
{
$id = $_GET['idfood'];
 
$cart->delete($id);
header('Location: add_to_cart.php');
return;
}
0
0 / 0 / 0
Регистрация: 19.08.2020
Сообщений: 1
19.08.2020, 15:22
Плагин https://github.com/rah-emil/angry-cart.js - как отличный вариант
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.08.2020, 15:22
Помогаю со студенческими работами здесь

PHP+MySQL Простая Фотогалерея
Мне нужно сделать очень простую фотогалерею на PHP и MySQL. В центре фотография, справа и слева ссыка на следующую и предыдующую...

Корзина товаров для гостей
Всем привет! Появилось у меня желание написать корзину добавления товаров для гостей. И не совсем могу понять как это можно сделать? Для...

Корзина инет магазина, вычисляем сумму всех товаров в корзине
Проблема которую я не могу решить и гугл не помог. SUM(price) тоже не советовать есть 2 таблицы Таблица корзины (идентификация по ip) ...

Корзина товаров PHP ! :cry:
Я делаю интернет магазин - не получается сделать корзину : Сохранять то что в корзине в сессиях не получится (по крайней мере у меня) в...

Простая авторизация на php и mysql, очень простая!
В базе данных таблица с двумя строками: id, user, password. На странице есть два поля для ввода (имени и пароля) и кнопка входа. По...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG-файла с альфа-каналом с помощью библиотеки SDL3_image на Android
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru