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

Корзина на php+ajax

27.02.2024, 08:47. Показов 906. Ответов 8

Студворк — интернет-сервис помощи студентам
я пишу интернет магазин простой, и при создании всех запросов на php использую ajax технологию. везде всё работает как обычно без ошибок, за исключением добавления товаров в корзину по сессии конкретному пользователю. Проблема в том, что когда процесс добавления в корзину товаров работает без ajax на php, то всё выполняется корректно(и добавляется каждый товар и обновляется количество товаров в корзине, если он уже добавлен хотя б один раз).. А когда всё это дело подключаю через ajax, то ДОБАВЛЯЕТСЯ ТОЛЬКО ОДИН ТОВАР, КОТОРЫЙ ПО СЧЁТУ ПЕРВЫЙ, то есть другими словами он будто не видит больше товаров на сайте.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$('.plus').click(function() {
        $.ajax({
            url: "cartf.php",
            type: "POST",
            data: {product_name: $('.product_name').val(), product_price: $('.product_price').val(), product_image: $('.product_image').val(), product_quantity: $('.cshet').val()},
            success: function(data){
                if (data == 2){
                    alert ("чтобы заказать, войдите в аккаунт");
                }else if (data == 1) {
                    alert ("товар добавлен в корзину");
                }else if (data == 3) {
                    alert ("товар уже есть");
                }
            }
        });
    });
HTML5
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
<div class="centralsalepost">
        <?php $select_product=mysqli_query($conn,"SELECT * FROM `products`") or die('query failed');
 
        if (mysqli_num_rows($select_product)>0) {
            while ($fetch_product=mysqli_fetch_assoc($select_product)) {
 
        ?>
 
        <div class="kryshasalepost">
            <img class="kryshasalepostimg" width="125px" height="125px" src='../img/<?php echo $fetch_product['image']; ?>'>
            <div class="kryshasaleposttext">
                <div class="linkkryshasaleposttext">
                    <a href="">
                        <div><?php echo $fetch_product["name"]; ?></div>
                    </a>
                </div>
            <div class="textkryshasaleposttext">Комплект высокоэффективных облегченных материалов для шумоизоляции крыши Внедорожника Первый слой: Виброматериал Comfortmat D2 Второй слой: Comfortmat Ultra Soft 10
            </div>
            
            <div class="kryshasalepostcena"><?php echo $fetch_product['price']; ?>c.</div>
 
            <input type="hidden" class="product_name" name="product_name" value="<?php echo $fetch_product['name']; ?>">
            <input type="hidden" class="product_image" name="product_image" value="<?php echo $fetch_product['image']; ?>">
            <input type="hidden" class="product_price" name="product_price" value="<?php echo $fetch_product['price']; ?>">
            
                <input type="submit" name="plus" value="Купить" class="plus onright">
                <input type="number" min="1" class="cshet onright" name="product_quantity" value="1">
                
            </div>
        </div>
 
        
<?php 
                
        }
 
    }
    
?>
 
    </div>
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
<?php
session_start();
include'config.php';
//выбор продуктов из базы данных
 
    
  
    $product_name=$_POST['product_name'];
    $product_price=$_POST['product_price'];
    $product_image=$_POST['product_image'];
    $product_quantity=$_POST['product_quantity'];
    $user_id=$_SESSION['user_id'];
 
    $select_cart=mysqli_query($conn, "SELECT * FROM `cart` WHERE name='$product_name' AND user_id='$user_id'") or die('query failed');
    
    if(mysqli_num_rows($select_cart) > 0){
      
      echo 3;
    }else{
        if (mysqli_num_rows($select_cart)==0) {
    
        mysqli_query($conn, "INSERT INTO `cart`(user_id, name, price, image, quantity) VALUES('$user_id', '$product_name', '$product_price', '$product_image', '$product_quantity')") or die('query failed');
        echo 1;
        }
    }
   
 
?>
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.02.2024, 08:47
Ответы с готовыми решениями:

Корзина на PHP
Здравствуйте! Учусь делать корзину с помощью localstorage, где id и колличество товара передается на сервер через ajax. Подскажите,...

корзина PHP MySQL
Нужно написать корзину для покупки книг. Можна пример либо сылку на толковую корзинуё Уже столько перелистал а толку 0.

Через ajax в url:'ajax.php', нужно передать одну переменную, и значение radio кнопки
Как значение radio передать я разобрался, а вот как еще переменную со страницы кинуть в url: ajax.php Всем спасибо

8
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
27.02.2024, 17:46
Timur2498, 1) Для добавления товара в корзину достаточно id товара и количество. Остальное можно достать из БД, а что если я изменю картинку или название товара, или вовсе его удалю через админку.

2) Если ajax проходит в метод success, то считается, что операция выполнена успешна, а чтоб выводить alert с ошибкой, запрос должен падать в fail, для этого вы должны возвращать другой статус, отличный от 200 (4** либо 5**) в формате json с полем message. И само сообщение должно приходить со стороны сервера, а не перечислять на фронте, на фронте вы максимум можете добавить на случай, если запрос вовсе не прошел из-за отключения интернета.

3) По селектору $('.product_name') - вы получите все элементы с этим классом. Либо ограничевайте каким-нибудь div-ом

HTML5
1
2
3
4
5
<div class="js-plus-wrapper">
    <input class="js-product-name" value="Товар" hidden>
    <input type="submit" class="js-plus">
    <input class="js-product-quantity" value="1">
</div>
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$('.js-plus-wrapper .js-plus').on('click', function(event) {
    event.preventDefault();
 
    let $plus = $(this);
    let $wrapper = $plus.closest('.js-plus-wrapper');
    let $quantity = $wrapper.find('.js-product-quantity');
    let $name = $wrapper.find('.js-product-name');
 
    $.ajax({
        url: '/cart/add.php',
        type: 'post',
        data: {
            name: $name.val(),
            quantity: $quantity.val()
        },
    }).done(function(data) {
        alert(data.message)
    })
})
Данные можно передать через data-* аттрибуты, сериализацию форм и т.д.
0
0 / 0 / 0
Регистрация: 27.02.2024
Сообщений: 5
28.02.2024, 20:45  [ТС]
Я извиняюсь, но не совсем понял. В моем случае есть регение по моему методу? То есть без ajax на php все рабоатет корректно, а воо через ajax он передает в БД только один и тот же товар, даже когда добавляю другие
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
28.02.2024, 21:27
Цитата Сообщение от Timur2498 Посмотреть сообщение
Я извиняюсь, но не совсем понял. В моем случае есть регение по моему методу?
Я по вашему методу и показывал. Проблема в селекторе
0
0 / 0 / 0
Регистрация: 27.02.2024
Сообщений: 5
28.02.2024, 22:08  [ТС]
Обьясните пожалуйста еще раз что мне исправить. В js или php? Может я неправильные типы данных передаю в data? Я хотел не менять php код, если это возможно. Спасибо
0
 Аватар для sad67man
2604 / 1508 / 689
Регистрация: 23.08.2015
Сообщений: 3,839
28.02.2024, 23:13
Timur2498, Я уже не помню, что у вас там было.

Цитата Сообщение от Timur2498 Посмотреть сообщение
Я хотел не менять php код, если это возможно.
Тогда это не ко мне. Вы в учебных целях пишите?
0
0 / 0 / 0
Регистрация: 27.02.2024
Сообщений: 5
28.02.2024, 23:24  [ТС]
посмотрите пожалуйста. я пишу себе простой интернет магазин. чтобы запустить его, используя свои знания. Помогите пожалуйста. Я просто не пойму, где моя ошибка. Потому что в php без ajax всё работает корректно, а когда делаю всё через ajax, то он просто напросто не видит другие товары. то есть при добавлении товара асинхронно без перезагрузки, на какой б товар я не нажал купить, добавляется один и тот же товар. а без ajax, php работает корректно
0
 Аватар для crautcher
2450 / 2301 / 597
Регистрация: 27.05.2011
Сообщений: 7,845
29.02.2024, 18:33
Лучший ответ Сообщение было отмечено Timur2498 как решение

Решение

Цитата Сообщение от Timur2498 Посмотреть сообщение
ДОБАВЛЯЕТСЯ ТОЛЬКО ОДИН ТОВАР, КОТОРЫЙ ПО СЧЁТУ ПЕРВЫЙ
JavaScript
1
product_name: $('.product_name').val()
селектор и говорит взять первый товар по счету
0
0 / 0 / 0
Регистрация: 27.02.2024
Сообщений: 5
29.02.2024, 22:16  [ТС]
Безграничное спасибо вам. Очень помогли. Дошло до меня и всё работает
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.02.2024, 22:16
Помогаю со студенческими работами здесь

Корзина интернет магазина PHP массивы + сессии
Всем добрый день. Помогите пожалуйста разобраться с массивом внутри массива в сессии. Задачи: Проверить на существование массив...

Передать переменную из index.php через ajax в handler.php и обратно
Пытаюсь разобраться в основах основ. Есть три файла: index.html, ajax.html и handler.php. 1. При клике на тексте, нужно передать...

PHP с ajax, или PHP и замена кода
Всем привет, делаю себе не большой движок, для удобства редактирования своего лендинга. Я использую шаблонизатор smarty, и решил сделать...

php корзина
Здравствуйте. Очень нужна помощь. Пишу для дипломной работы подобие интернет магазина. Так вот сделал сам сайт, и вывод товаров из бд....

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru