|
0 / 0 / 0
Регистрация: 18.12.2015
Сообщений: 9
|
|
Изменение счетчика по клику внутри цикла18.07.2016, 12:19. Показов 1334. Ответов 11
Здравствуйте.
В корзине товары выводятся циклом, внутри каждой записи о выбранном товаре есть кнопка увеличения числа товара(если человек хочет не один товар, а больше). Поскольку все происходит в цикле (в результате там все переменные относятся ко всем записям), если я кликаю по счетчику одного товара, изменяются значения всех счетчиков. Мне нужно, чтоб менялся счетчик только того товара, который я выбрал. Помогите студенту доделать дипломную работу. Ниже привожу код: <?php $dbconnect; $var_order_id = (int)$_GET['ordid']; $c_result = pg_query("SELECT i.image, i.name, c.prod_price, c.prod_count, c.id_cart, c.prod_id, i.id FROM cart as c join items as i on i.id = c.prod_id WHERE c.order_id = '$var_order_id'"); $div_numc = pg_num_rows($c_result); for($i=0; $i < $div_numc; $i++){ $cart_catalog = pg_fetch_array($c_result); $id_cart = $cart_catalog['id_cart']; $prod_id = $cart_catalog['prod_id']; if(isset($_POST['subplus'])&&$_POST['send_prodid'] == $prod_id){ $update_query = pg_query("UPDATE cart SET prod_count = prod_count+1, sum_price = prod_price*(prod_count+1) WHERE id_cart = '$id_cart' returning prod_count"); $v_prod_count = pg_fetch_array($update_query); $var_prod_count = $v_prod_count['prod_count']; } ?> <form action = "" method = "post"> <div class = "orderedproduct"> <div class = "layer"></div><!--Граница между блоками--> <div class = "divproductpic"><div class = "productpic">Изображение<br> товара</div> <img src = "<?php echo $cart_catalog['image'];?>" alt = ""> </div> <div class = "productnamestr"><?php echo $cart_catalog['name'];?></div> <div class = "available">Есть в наличии</div> <div class = "available">Есть в наличии</div> <div class = "pricedigits"><?php echo $cart_catalog['prod_price'];?><span class = "pricedigitsrub">руб.</span></div> <div class = "divforminus"><label for = "subminus" class = "insideforminus">-</label></div> <input type = "submit" name = "subminus" id = "subminus"> <div class = "verticallayer"></div> <div class = "fordigits"><div class = "insidefordigits"><?php if($_POST['subplus']){ echo $var_prod_count;} else{echo $cart_catalog['prod_count'];} ?> </div> </div> <div class = "verticallayer"></div> <div class= "divforplus"><label for = "subplus" class = "insideforplus">+</label></div> <input type = "submit" name = "subplus" id = "subplus"> <input type = "hidden" name = "send_prodid" value = "<?php echo $prod_id;?>"> <div class = "totalpricedigits"><?php if($_POST['subplus']){echo $cart_catalog['prod_price']*$var_prod_count;} else{echo $cart_catalog['prod_price'];} ?><span class = "totalpricedigitsrub">руб.</span></div> <label for = "delitem" class = "deletemark"><img src = "./pics/deletemark.png" alt = "deletemark"></label> <input type = "submit" name = "delitem" id = "delitem"> </div> </form> <?php } ?>
0
|
|
| 18.07.2016, 12:19 | |
|
Ответы с готовыми решениями:
11
Интегрированный сброс счётчика, внутри или теле цикла
Изменение начального положения цикла внутри этого цикла |
|
2 / 2 / 1
Регистрация: 24.10.2014
Сообщений: 75
|
|
| 19.07.2016, 12:07 | |
|
Мдя. Я кляцаю на один товар, а цикл на всё + перезагрузка страницы, ни на одном магазе такого не видел), либо делай через аякс либо не делай вообще .
0
|
|
|
0 / 0 / 0
Регистрация: 18.12.2015
Сообщений: 9
|
|
| 19.07.2016, 12:20 [ТС] | |
|
Andrey07, во первых, это просто дипломная работа. Во вторых это сейчас очень актуально. В третьих, ajax что не ко всем элементам массива будет относиться? У меня все контейнеры по классам. Цена каждого товара в корзине лежит в одном контейнере, который "размножается". Я уже столько умников видел, которые мастера в сарказме, а на деле не могут кусок кода написать в помощь.
0
|
|
|
2 / 2 / 1
Регистрация: 24.10.2014
Сообщений: 75
|
|
| 19.07.2016, 12:56 | |
|
Так дело же не в куске кода, а в алгоритме, если правильный подход то и решение будет простым. Аякс относиться только
к тому что вы ему зададите. В аяксе нет ничего сложного, почитали мануал скопировали пример, подставили свои значения. Вы js и jquery используете?
0
|
|
|
0 / 0 / 0
Регистрация: 18.12.2015
Сообщений: 9
|
|
| 19.07.2016, 13:05 [ТС] | |
|
Andrey_07, использую jQuery совсем редко, когда нужно что-нибудь отстилить по наведению или по клику. JS основы изучали, кое-что делали. Но раз Вы советуете, я буду изучать конкретнее.
Спасибо за отклики на просьбу. А что, мой алгоритм, я так понимаю, негодный? Я давно это подозревал. Никто уже долгое время не может мне помочь, а сам я не мастер, надеюсь пока-).
0
|
|
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
|
||||||
| 19.07.2016, 13:54 | ||||||
|
Михаил13, просто в этом жутком коде сложно разобраться, проще заново написать.
Кстати, зачем корзину в БД хранить? И не вижу разграничение прав, корзина одна для всех юзеров? Добавлено через 5 минут Михаил13, и отступы для читабельности нужны. И подсветка синтаксиса (кнопка PHPHTML в редакторе).
0
|
||||||
|
0 / 0 / 0
Регистрация: 18.12.2015
Сообщений: 9
|
|
| 19.07.2016, 14:19 [ТС] | |
|
Jodah, не совсем понимаю про разграничение прав. У меня корзина показывается по сессии.
Спасибо за редактирование и подсветку)
0
|
|
|
2 / 2 / 1
Регистрация: 24.10.2014
Сообщений: 75
|
|
| 19.07.2016, 15:04 | |
|
Согласен с Jodah в БД хранить корзину не разумно, или в пхп сессию или в куки, но не в БД так как пользователь может создать корзину на 100 продуктов и тупо закрыть браузер, а если таких пользователей 1к? БД будет бесконечно расти, но для дипломной думаю это не важно, хотя если б это делал я, то сделал бы норм магаз и продал бы). Ваш алгоритм годный но не производителен, зачем пересчитывать всю продукцию если я сделал только увеличение одного конкретного.
Добавлено через 9 минут это что, ели в корзине 10 товаров то у вас будет 10 форм?
0
|
|
|
0 / 0 / 0
Регистрация: 18.12.2015
Сообщений: 9
|
|
| 19.07.2016, 15:14 [ТС] | |
|
Я и хочу увеличивать только один товар, но слаб еще в программировании. Нет опыта, как реализовать. С БД решил работать потому, что пример такой увидел. Наверное можно будет реализовать удаление заказа из БД если он не закрыт. Надо подумать, поискать как.
Добавлено через 7 минут Andrey_07, получается, что так. Сколько цикл выведет, столько и будет. Ведь мой способ (как я теперь понимаю, не лучший-))таков. Вообще, это специально заморочили для диплома. Я уже один сайт делал по своему усмотрению, так там было все разумнее , поменьше плохого кода.
0
|
|
|
2 / 2 / 1
Регистрация: 24.10.2014
Сообщений: 75
|
|
| 19.07.2016, 15:48 | |
|
рассказываю как нужно, хотя признаюсь что ниразу не писал магазинов)
базу можно оставить но форма должна быть одна, все товары в одной форме, то есть тебе нужно цикл внутри формы делать, кнопка плюс у тебя будет не сабмит а баттон и с минусом так же. Дальше на кнопку пишеш onclick="ajax_function(unique_id)", unique_id - уникальный идентификатор товара. В функции пиши аякс который отправляет этот unique_id на пхп скрипт. В пхп скрипте ты смотриш на unique_id и ищешь по нему товар и увеличиваеш на 1, и возвращаешь нужные данные. В аяксе есть атрибут success куда приходит ответ от пхп скрипта с данными которые ты вернул, данные приходят в виде объекта. Эту инфу ты обрабатываешь с помощью jquery(вставляешь в нужные места). Вот и всё. Хотя пока писал пришла одна гениальная идея)). Вместо того чтоб считать на пхп, можна написать js но jsy нужны параметры цена и количество и их можна задать в атрибуты или извлечь из хтмля(там они заданы как текст). То есть надо такую же кнопку плюс с атрибутом онклик где вызывать фунцию которая делает селект цена-количество, умножает и вставляет в totalpricedigits. И да сорян за мой Русский.
1
|
|
|
3899 / 3237 / 1353
Регистрация: 01.08.2012
Сообщений: 10,909
|
|||||||
| 19.07.2016, 15:54 | |||||||
|
Набросал на скорую руку управление корзиной. Надеюсь, это вам поможет.
1
|
|||||||
|
0 / 0 / 0
Регистрация: 18.12.2015
Сообщений: 9
|
|
| 19.07.2016, 16:21 [ТС] | |
|
Блин, Andrey_07 и Jodah, Вы оба красавцы. Я поставил по плюсу обоим. Дальше внимательно изучу, что Вы написали, так как нужно реально задуматься над изучением JS. Я имею ввиду, что нужно будет асинхронно это все делать. Мне кажется это пока лучшие ответы со всех форумов, где побывал. И мне кажется, что я разберусь.
0
|
|
| 19.07.2016, 16:21 | |
|
Помогаю со студенческими работами здесь
12
Изменение переменной внутри цикла Изменение переменной внутри цикла Изменение свойств элемента внутри цикла
Ошибка: Нельзя изменять значение переменной цикла внутри этого цикла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма).
На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
|
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes.
А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения
развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
|
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ *
Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам
Кирхгофа, решает её и находит:
токи, напряжения и их 1 и 2 производные при t = 0;. . .
|
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым.
Но восстановить их можно так.
Для этого понадобится консольная утилита. . .
|
|
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
|
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
|
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11
— это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
|
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11
Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
|