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

Добавление товаров в базу данных

01.04.2022, 01:17. Показов 1811. Ответов 11
Метки php (Все метки)

Студворк — интернет-сервис помощи студентам
Есть база в ней таблица с товарами `top`, они выводятся на страницу nabrosok.php следующим образом:
PHP
1
2
3
4
5
6
7
8
9
10
11
<?foreach ($products as $product):?>
                    <div class="product">
                        <div class="prod">
                            <div class="product-pic" style="background: url('<?=$product['image']?>') no-repeat; background-size: cover; background-position: center">
                                <input type="button" class="js_buy" value="КУПИТЬ">
                            </div>
                        </div>
                        <span class="product-name"><?=$product['name']?></span>
                        <span class="product_price"><?=$product['price']?></span>
                    </div>
                <?endforeach?>
Хочу чтобы по нажатию на кнопку купить, данный товар добавлялся в таблицу `cart` , но не понимаю как это реализовать.
Добавление товаров из таблицы `top` в массив для последующего вывода на nabrosok.php
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
 
spl_autoload_register(function ($class){
    include 'classes/' . $class . '.php';
 
});
 
 
 
$PDO = PdoConnect::getInstance();
$result = $PDO->PDO->query("
    SELECT * FROM `top`
    ");
 
    $products = array();
 
    while ($productInfo = $result->fetch()){
        $products[] = $productInfo;
    }
?>
Класс для подключения к базе
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
<?php
 
class PdoConnect{
 
    private const HOST = 'localhost';
    private const DB = 'tovar';
    private const USER = 'nodenible';
    private const PASS = 'nodenible';
    private const CHARSET = 'utf8';
 
    protected static $_instance;
 
    protected $DSN;
    protected $OPD;
    public $PDO;
 
    private function __construct(){
 
        $this->DSN = "mysql:host=" . self::HOST . ";dbname=" . self::DB . ";charset=" . self::CHARSET;
 
        $this->OPD = array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
            PDO::ATTR_EMULATE_PREPARES => false,
        );
 
        $this->PDO = new PDO($this->DSN, self::USER, self::PASS, $this->OPD);
 
 
    }
 
    public static function getInstance() {
 
    if(self::$_instance === null)
        self::$_instance = new self;
 
    return self::$_instance;
 
    }
 
    private function __clone() {}
    private function __wakeup() {}
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.04.2022, 01:17
Ответы с готовыми решениями:

Добавление записи в базу данных и считывание из базы данных
Здравствуйте! Знаю, что эти вопросы поднимались уже тысячи раз, но помогите пожалуйста. Написала код добавления записи в БД. Сколько...

Добавление данных из нескольких текстовых полей в базу данных
Добрый день. С толкнулся со следующей проблемой: У меня есть форма в которой генерируется некое количество текстовых полей, оно всегда...

Добавление данных в базу данных во время функции printf()
Привет всем! У меня возникла проблема. Задача такая: нужно принять данные с одной таблицы в базе данных и после подтверждения их на...

11
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
01.04.2022, 09:48
Например, так:
POST /add/1, где 1 - идентификатор товара.

Судя по "js_buy", можно использовать AJAX.
1
0 / 0 / 0
Регистрация: 14.04.2021
Сообщений: 16
01.04.2022, 13:34  [ТС]
Хорошо, попробую, потом отпишусь

Добавлено через 6 минут
Просто как таково с AJAX не работал
0
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
01.04.2022, 15:42
Цитата Сообщение от Chappik Посмотреть сообщение
Просто как таково с AJAX не работал
Можно на JS сохранять в куках или каком-нибудь другом локальном хранилище, а в базу данных переносить только при формировании заказа. Также можно сделать обычным способом (без AJAX), но это будет "некрасиво", особенно при добавлении со страницы списка товаров, а не со страницы отдельного товара.
0
0 / 0 / 0
Регистрация: 14.04.2021
Сообщений: 16
01.04.2022, 18:26  [ТС]
Просто вот в чём вопрос, будет ли он понимать, что id, про который вы мне сказали соответствует нужному ибо они прогружаются массивом.

Добавлено через 2 минуты
Нашёл вот такую реализацию этого AJAX примерно так надо? Только вместо div записать в базу.
https://basicweb.ru/jquery/jquery_method_post.php

Добавлено через 23 минуты
Этим кодом я сделал административную панель, но нужно вопрос с корзиной всё ещё актуален.

Добавлено через 2 минуты
Сейчас попробую разобраться в этом и отпишу и обязательно скажу огромное спасибо за идею

Добавлено через 25 минут
К сожалению так и не разобрался пробовал блокам и name присваивать, но ничего
0
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
01.04.2022, 23:09
Цитата Сообщение от Chappik Посмотреть сообщение
Просто вот в чём вопрос, будет ли он понимать, что id, про который вы мне сказали соответствует нужному ибо они прогружаются массивом.
Естественно, в каждом элементе списка выводите соответствующий id. В самом-то массиве есть идентификаторы (как элементы каждого $product).

Страница по ссылке у меня не открывается.
0
0 / 0 / 0
Регистрация: 14.04.2021
Сообщений: 16
04.04.2022, 21:48  [ТС]
Продолжаю делать административную панель и столкнулся с этим, хочу добавлять товар в базу, но с этим ajax немного не понимаю вот код формы куда заношу данные
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
<script
  src="https://code.jquery.com/jquery-3.6.0.min.js"
  integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4="
  crossorigin="anonymous"></script>
<footer>
        <style>
            #bgmodal {
                display: none; /* Не отображать */
                position: fixed; /* Зафиксировать */
                z-index: 99998;
                top:0;  
                left: 0;
                background-color: rgba(128,128,128, 0.7); /* серый. прозрачный фон */
                height: 100%; /* высота 100% экрана */
                width: 100%; /* ширина 100% экрана */
            }
            #modal {
                position: relative;
                width: 50%;
                height: 50%;
                top:25%;
                left:25%;
                background-color: #fff;
                z-index: 99999;
            }
        </style>
 
            <div class="in_foter">
                <span>© 2023 СЧАСТЬЕ ЕСТЬ. Сайт создан  <a>Chappik</a></span>
            </div>
 
            <button id="open">Добавить товар</button>
                <div id="bgmodal">
                        <div id="modal">
                            <h1>Введите информацию о товаре</h1>
                                
                                    <input autocomplete="none" type = "text" placeholder = "Имя" name = "firstName" required class="picc"> <!-- поле обязательно к заполнению -->
                                    <input autocomplete="none" type = "text" placeholder = "Фамилия" name = "lastName" required class="namee">
                                    <input autocomplete="none" type = "text" placeholder = "Фамилия1" name = "lastNamee" required class="pricee"> <!-- поле обязательно к заполнению -->
                                    <button type = "submit" id="submitt" class="dobav">Add</button>
                                    <script>
                                        $(document).ready(function(){
                                            $('button.dobav').on('click',function(){
                                                var pick = $('input.picc').val();
                                                var name = $('input.namee').val();
                                                var price = $('input.pricee').val();
 
                                                $.ajax({
                                                  method: "POST",
                                                  url: "indexx.php",
                                                  data: { $firstName: pick, $lastName: name, $lastNamee: price }
                                                })
                                                  .done(function(msg) {
                                                   alert( "Data Saved: " + msg );
                                                  });
 
                                            })
                                        });
 
                                                
                                            
                                    </script>
                                    
                                    <button id="close">Закрыть окно</button>
                                
                            
                        </div>
                    <script type="text/javascript" src="js/modal.js"></script>
                </div>
</footer>

Вот куда я это всё передаю, но выдают что пытаюсь занести пустые значения
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
<?php
 
spl_autoload_register(function ($class){
    include 'classes/' . $class . '.php';
 
});
 
 
 
$PDO = PdoConnect::getInstance();
 
 
    
 
                $firstName = $_POST['pick'];
                $lastName = $_POST['name'];
                $lastNamee = $_POST['price'];
            
            $sql = "
                INSERT INTO proba (`pic`, `price`, `name`) VALUES ('"
                .$firstName."', '".$lastName."', '".$lastNamee."')
 
                ";  
              $res = $PDO->PDO->query($sql);
              var_dump($res);
 
?>
Добавлено через 5 минут
estic, Нуждаюсь в вашей помощи
0
0 / 0 / 0
Регистрация: 14.04.2021
Сообщений: 16
05.04.2022, 10:58  [ТС]
Так, ошибку я нашёл, передавал не те данные, заранее спасибо
0
1310 / 1002 / 232
Регистрация: 01.10.2018
Сообщений: 3,896
05.04.2022, 14:30
Лучший ответ Сообщение было отмечено Chappik как решение

Решение

В первом сообщении я про "url" писал. Идентификатор можно передавать и в теле запроса. Но я привык придерживаться принципов REST. А вот все остальное с клиента не нужно передавать. Вы в обработчике, проверяя существование товара, извлекаете необходимые данные из таблицы товаров и помещаете их в таблицу корзины. Причем не обязательно переносить, например, название товара, т.к. для покупателя не так важно, даже если оно поменяется. А вот цену по идее нужно. Хотя здесь тоже есть определенное "но": если у вас корзина может храниться годами, то не нужно, наверное.

Добавлено через 3 минуты
Если у вас для страницы товара нет никакого POST-обработчика, можете использовать "её" POST-обработчик, например:
GET /product/1 - страница (доступного) товара;
POST /product/1 - добавить этот товар в корзину текущего пользователя.
1
0 / 0 / 0
Регистрация: 14.04.2021
Сообщений: 16
07.04.2022, 20:28  [ТС]
В общем сделал, но он почему-то берёт только 1 айдишник, если я даже кликну на товар с айдишником 3, вот код вывода товаров и аякс запрос
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
<?foreach ($products as $product):?>
        
            
                
                    <div class="product">
                        <input class="product_id" value="<?=$product['id']?>">
                                    
                        <div class="prod">
 
                                
                            <div class="product-pic" style="background: url('<?=$product['image']?>') no-repeat; background-size: cover; background-position: center">
                                
                                    <button  class="js_buy">КУПИТЬ</button>
                                </div>
                        </div>
                        <span class="product-name"><?=$product['name']?></span>
                        <span class="product_price"><?=$product['price']?> руб</span>
                    </div>      
                <?endforeach?>
        </div>
</section>
 
</main>
 
    
        <?php
        include('footer.php');
          ?>
                                    <script>
                                        $(document).ready(function(){
                                            $('button.js_buy').on('click',function(){
                                                var iid = $('input.product_id').val();
                                                
                                                
                                                $.ajax({
                                                  method: "POST",
                                                  url: "indexx.php",
                                                  data: { $Id: iid }
                                                })
                                                  .done(function(msg) {
                                                   alert( "Внимание: " + msg );
                                                  });
                                            })
                                        });                                             
                                    </script>
А вот обработчик этого же запроса на стороне, не понимаю в чём беда, постоянно берёт 1 и тот-же id

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
<?php
 
spl_autoload_register(function ($class){
    include 'classes/' . $class . '.php';
 
});
 
 
 
$PDO = PdoConnect::getInstance();
$fName = $_POST['$Id'];
 
 
echo ".$fName.";
 
 
 
$sql = "
 
INSERT INTO `proba` (`pic`, `price`, `name`) SELECT `name`, `price`, `image` FROM `tov` WHERE `id` = '".$fName."'
 
";  
    $res = $PDO->PDO->query($sql);
 
                    
                    
 
                
              
 
?>
Добавлено через 38 минут
Пробовал через div изначально делать, но тогда он не принимает значения

Добавлено через 2 минуты
Или можно как-то добавлять это Id в блок div и уже от туда передавать это значение в ajax запрос

Добавлено через 5 часов 31 минуту
Вновь нуждаюсь в вас
0
0 / 0 / 0
Регистрация: 14.04.2021
Сообщений: 16
08.04.2022, 07:15  [ТС]
estic, хелп

Добавлено через 17 минут
Я ещё думаю, что он проверяет только тот элемент, который изначально кодом прописан, но тогда как мне отслеживать все остальные товары
0
377 / 319 / 73
Регистрация: 15.09.2017
Сообщений: 1,436
08.04.2022, 11:27
Лучший ответ Сообщение было отмечено Chappik как решение

Решение

Цитата Сообщение от Chappik Посмотреть сообщение
Я ещё думаю, что он проверяет только тот элемент, который изначально кодом прописан
Конечно. Нужно менять передаваемый id, формируя значение url динамически. Это значение можно брать непосредственно из атрибута href или из какого-нибудь пользовательского атрибута (data-). Во втором случае в атрибуте обычно хранят только id и динамически присоединяют его к "/product/".

Добавлено через 1 минуту
В соседней теме была ссылка: Ajax динамическая подгрузка данных html на страницу

Для POST-запроса вариант с href не подходит! Можете брать id из вашего value.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.04.2022, 11:27
Помогаю со студенческими работами здесь

Добавление данных в базу данных из зависимых списков
Сделала зависимые списки, в которых берутся данные из базы. Нужно, чтобы выбранные данные вставлялись в таблицу базы данных. В моем...

Добавление в базу данных
Пожалуйста, помогите разобраться с кодом. Пытаюсь добавить в базу новую запись. Форма: &lt;div&gt; &lt;p...

Добавление в базу данных
Здравствуйте! Помогите пожалуйста!!! Вот моя база данных: -- Table structure for table `Lic_scheta` -- CREATE TABLE IF NOT...

Добавление в базу данных
Мне нужно, чтоб данные, введенные пользователем на сайте заносились в базу. Пишу вот такое: $nomer=$_POST; $first_date=$_POST; ...

Добавление данных в базу
Доброго времени суток! Балуясь дома столкнулся с проблемой: Не добавляются данные в БАЗУ. 100500 раз перепроверял но ошибку не нашел. ...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru