session_start(); ... ... ... echo "<table class='newstable' cellspacing='5'>\n"; echo "<tr>\n"; echo "<td class='newsitem'>\n"; echo "<h2 class='hdr2'>Корзина</h2>\n"; $col=0; $rub=0; $bask = "SELECT * FROM tbl_users WHERE session ='".session_id()."'"; $res_b = mysql_query($bask) or die(mysql_error()); $number = mysql_num_rows($res_b); if ($number == 0) { echo "INSERT INTO tbl_users (id, session) VALUES (NULL, '".session_id()."')"; $into = "INSERT INTO tbl_users (id, session) VALUES (NULL, '".session_id()."')"; mysql_query($into) or die(mysql_error()); } else { $into = "Select pr.name, pr.kolvo, pr.price, ses.count from tbl_users us, ses_prod ses, tbl_products pr WHERE us.id = ses.user_id AND ses.prod_id = pr.id AND us.session = '".session_id()."'"; $into_b = mysql_query($into) or die(mysql_error()); $num = mysql_num_rows($into_b); if ($num != 0) { while ($row=mysql_fetch_array($into_b)) { $col=$col+$row[3]; $rub=$rub+$row[2]; } } } echo "В вашей корзине <b>$col</b> товаров на сумму <b>$rub</b> рублей. <p><a href=''>Оформить заказ</a>\n"; echo "</td>\n"; echo "</tr>\n"; echo "</table>\n";
Но, что то мне подсказывает что получилось как то коряво. Не будет ли этот алгоритм сильно увеличивать загрузку страниц ? На вид вроде работает нормально но плохое предчувствие не покидает меня =) И ещё хотел спросить про алгоритм добавления товара в корзину! Как лучше его реализовать ? Пока на ум приходит: 1.Отправлять id товара в скрипт который будет присваивать этот товар к id сессии 2.Как то вернуться на страницу с которого был отправлен запрос и что бы она обновилась.
Member
Статус: Не в сети Регистрация: 08.07.2006 Откуда: СПБ
Первое что бросается в глаза - вывод html с помощью echo. Так делать не надо, это усложняет читабельность кода, влечет ошибки связанные с кавычками и потенциально снижает производительность.
Лучше придерживаться ОО стиля программирования,это опят же увеличивает понятность кода, дает возможность отделить логику от отображения, что позволяет использовать код повторно. Неплохо бы вообще, придерживаться MVC модели и разнести работу с базой, логику и вывод, хотябы по разным объектам.
Oleg Kondratskiy писал(а):
Пока на ум приходит:1.Отправлять id товара в скрипт который будет присваивать этот товар к id сессии2.Как то вернуться на страницу с которого был отправлен запрос и что бы она обновилась.
Вам нужен отдельный гейт, он будет принимать пост запросы на добавление товара. Хранить это предпочтительно в cookies.
Запросы к гейту можно отправлять ajax`ом, и по результатам запроса обновлять код корзины.
PS Ну и код комментировать, хотя бы если вы его выкладываете. Желания мало разбираться в вашем потоке мысли.
Добавлено спустя 5 минут 48 секунд:
Oleg Kondratskiy писал(а):
or die(mysql_error());
Выводить юзеру текст ошибки базы совсем не нужно, это брешь в безопасности вашего скрипта
Добавлено спустя 9 минут 54 секунды:
Oleg Kondratskiy писал(а):
mysql_query($bask)
А тут лучше передавать явно ссылку на соединение. Если у вас в дальнейшем появится больше соединений будет очень печально искать багу.
member+
Статус: Не в сети Регистрация: 16.01.2004 Откуда: Estonia,Tallinn
Char88 писал(а):
Лучше придерживаться ОО стиля программирования
В простых вещах это избыточно, а
Char88 писал(а):
разнести работу с базой, логику и вывод
можно и "процедурно", главное знать что это и зачем оно надо.
Добавлено спустя 2 минуты 57 секунд: Вообще поддержваю ToSHiC и даже предлагаю пойти дальше, весь механизм писать на JS (средств для этого более чем достаточно)
ToSHiC писал(а):
а в мускуль отправлять уже в момент подтверждения заказа
Member
Статус: Не в сети Регистрация: 08.07.2006 Откуда: СПБ
Vladson писал(а):
можно и "процедурно", главное знать что это и зачем оно надо.
Можно и процедурно если очень хочется, но в данном виде все в куче и через месяц у автора самого волосы дыбом встанут при взгляде на этот код.
Добавлено спустя 2 минуты 28 секунд:
ToSHiC писал(а):
фтопку JS, слишком много головняков из-за одной корзины будет
Главный "головняк" заключается в необходимости знать как работает JS. В остальном ничего сложного, за то на выходе потенциально удобный и шустрый интерфейс.
а что, в разных браузерах уже всё стало работать одинаково?:)
Если включать мозг то да. А чтоб не парится о браузерах можно использовать фреймворк типа jquery, там уже за нас подумали
стоит ли поддерживать jQuery/prototype/mootools, отслеживать версии и получать проблемы после апдейтов браузеров или от юзеров с непонятными браузерами ради одной корзины, да если ещё и нигде больше ajax не используется? в том же jQuery официально поддерживаются только ие, фф, сафари, опера, хром.
member+
Статус: Не в сети Регистрация: 16.01.2004 Откуда: Estonia,Tallinn
ToSHiC писал(а):
стоит ли поддерживать jQuery/prototype/mootools, отслеживать версии и получать проблемы после апдейтов
Если писать изначально не усложняя то что не требует усложнений, то можно написать (без доп-библиотек) чтоб всё работало на всех браузерах начиная с IE5. Сама по себе корзина механизм не сильно сложнее "Hello, World!"
Member
Статус: Не в сети Регистрация: 08.07.2006 Откуда: СПБ
ToSHiC писал(а):
стоит ли поддерживать jQuery/prototype/mootools, отслеживать версии и получать проблемы после апдейтов браузеров или от юзеров с непонятными браузерами ради одной корзины, да если ещё и нигде больше ajax не используется? в том же jQuery официально поддерживаются только ие, фф, сафари, опера, хром.
Во первых jquery можно подключать с гугла, там она последняя лежит, ну а во вторых, обновить библиотеку не в пример легче чем переделывать код по случаю выхода нового браузера.
PS Некоторые полагают, что jQuery используют те, кто не знает JS, но я еще не достиг дзена чтобы понять это.
member+
Статус: Не в сети Регистрация: 16.01.2004 Откуда: Estonia,Tallinn
Char88 писал(а):
полагают, что jQuery используют те, кто не знает JS
Так полагают только люди которые не знают ни JS, ни умеют использовать jQuery. Только постигнув JS на должном уровне, можно понять всю прелесть jQuery. Но есть вещи где он будет "пушкой по комарам"
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения