Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 19 
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Junior
Статус: Не в сети
Регистрация: 08.07.2009
Код:
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.Как то вернуться на страницу с которого был отправлен запрос и что бы она обновилась.

Не могу понять как мне сделать 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
Статус: Не в сети
Регистрация: 07.01.2010
ещё можно хранить информацию в сессии пхп, имхо, лучше, чем в мускуль пихать. а в мускуль отправлять уже в момент подтверждения заказа.


 

Junior
Статус: Не в сети
Регистрация: 08.07.2009
ToSHiC писал(а):
ещё можно хранить информацию в сессии пхп, имхо, лучше, чем в мускуль пихать. а в мускуль отправлять уже в момент подтверждения заказа.

Да видимо так и придётся делать :(

Char88
Спасибо за советы :beer:


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
а что тебе не нравится то? проще же ведь :)


 

Junior
Статус: Не в сети
Регистрация: 08.07.2009
Не нравится что придётся переделывать :D а так конечно же будет надежнее, быстрее и красивее )))


 

member+
Статус: Не в сети
Регистрация: 16.01.2004
Откуда: Estonia,Tallinn
Char88 писал(а):
Лучше придерживаться ОО стиля программирования

В простых вещах это избыточно, а
Char88 писал(а):
разнести работу с базой, логику и вывод

можно и "процедурно", главное знать что это и зачем оно надо.

Добавлено спустя 2 минуты 57 секунд:
Вообще поддержваю ToSHiC и даже предлагаю пойти дальше, весь механизм писать на JS (средств для этого более чем достаточно)
ToSHiC писал(а):
а в мускуль отправлять уже в момент подтверждения заказа

_________________
X99-TF/E5-2678v3+Evo212/2x16Gb-DDR4-Gloway-TYPE-a@2133-12-13-13-26/GTX1070TI/KINGSTON-SNV2S1000G


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
если аякса больше нигде нету - фтопку JS, слишком много головняков из-за одной корзины будет


 

Member
Статус: Не в сети
Регистрация: 08.07.2006
Откуда: СПБ
Vladson писал(а):
можно и "процедурно", главное знать что это и зачем оно надо.

Можно и процедурно если очень хочется, но в данном виде все в куче и через месяц у автора самого волосы дыбом встанут при взгляде на этот код.

Добавлено спустя 2 минуты 28 секунд:
ToSHiC писал(а):
фтопку JS, слишком много головняков из-за одной корзины будет

Главный "головняк" заключается в необходимости знать как работает JS. В остальном ничего сложного, за то на выходе потенциально удобный и шустрый интерфейс.


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
а что, в разных браузерах уже всё стало работать одинаково?:)

а JS сам по себе язык интересный


 

Member
Статус: Не в сети
Регистрация: 08.07.2006
Откуда: СПБ
ToSHiC писал(а):
а что, в разных браузерах уже всё стало работать одинаково?:)

Если включать мозг то да. А чтоб не парится о браузерах можно использовать фреймворк типа jquery, там уже за нас подумали


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
Char88 писал(а):
ToSHiC писал(а):
а что, в разных браузерах уже всё стало работать одинаково?:)

Если включать мозг то да. А чтоб не парится о браузерах можно использовать фреймворк типа jquery, там уже за нас подумали

стоит ли поддерживать jQuery/prototype/mootools, отслеживать версии и получать проблемы после апдейтов браузеров или от юзеров с непонятными браузерами ради одной корзины, да если ещё и нигде больше ajax не используется? в том же jQuery официально поддерживаются только ие, фф, сафари, опера, хром.


 

member+
Статус: Не в сети
Регистрация: 16.01.2004
Откуда: Estonia,Tallinn
ToSHiC писал(а):
стоит ли поддерживать jQuery/prototype/mootools, отслеживать версии и получать проблемы после апдейтов

Если писать изначально не усложняя то что не требует усложнений, то можно написать (без доп-библиотек) чтоб всё работало на всех браузерах начиная с IE5.
Сама по себе корзина механизм не сильно сложнее "Hello, World!"

_________________
X99-TF/E5-2678v3+Evo212/2x16Gb-DDR4-Gloway-TYPE-a@2133-12-13-13-26/GTX1070TI/KINGSTON-SNV2S1000G


 

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. Но есть вещи где он будет "пушкой по комарам"

_________________
X99-TF/E5-2678v3+Evo212/2x16Gb-DDR4-Gloway-TYPE-a@2133-12-13-13-26/GTX1070TI/KINGSTON-SNV2S1000G


 

Member
Статус: Не в сети
Регистрация: 08.07.2006
Откуда: СПБ
Vladson писал(а):
Так полагают только люди которые не знают ни JS, ни умеют использовать jQuery.

Вообще, это высказывание Бретта Маклафлина, достаточно известного эксперта в AJAX и JS. Я его тоже не понимаю, но вот факт


 

member+
Статус: Не в сети
Регистрация: 16.01.2004
Откуда: Estonia,Tallinn
Char88 писал(а):
Я его тоже не понимаю

Может быть и так что цитата просто выдрана из контекста, и в оригинале означает вовсе не это... ("казнить нельзя помиловать")

_________________
X99-TF/E5-2678v3+Evo212/2x16Gb-DDR4-Gloway-TYPE-a@2133-12-13-13-26/GTX1070TI/KINGSTON-SNV2S1000G


 

Junior
Статус: Не в сети
Регистрация: 08.07.2009
Переделал но почему то не работает =(
В корзину ничего не добавляется =(
Код:
session_start();
$arr = unserialize($_SESSION['bask']);
if (count($arr)>0)
{
for ($i = 0; $i < count($arr); $i++) {
$col=$col + $arr[$i][2];
$rub=$rub + $arr[$i][3];
}
} else {
$col=0;
$rub=0;
}
echo "В вашей корзине <b>$col</b> товаров на сумму <b>$rub</b> рублей.  <p><a href=''>Оформить заказ</a>\n";

А вот код добавления товара в корзину!
Код:
<?
if ( isset($_GET["id"])){
$hostname = "";
$usern = "";
$pass = "";
$dbName = "";
mysql_connect($hostname,$usern,$pass) OR DIE("Не могу создать соединение ");
mysql_select_db($dbName) or die("Не могу подключиться к базе");
$query = "SELECT * FROM tbl_products WHERE id =".$_GET["id"];
$res = mysql_query($query) or die(mysql_error());
$row=mysql_fetch_array($res);
$arr = unserialize($_SESSION['bask']);
$i=count($arr);
$arr[$i][0]=$row[0];
$arr[$i][1]=$row[3]."-".$row[4];
$arr[$i][2]=1;
$arr[$i][3]=$row[6];
$_SESSION['bask'] = serialize($arr);
header('location:'.$_SERVER['HTTP_REFERER']);
} else
{
echo "error";
}
?>


 

Member
Статус: Не в сети
Регистрация: 07.01.2010
ты делаешь session_start перед вторым участком кода?


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 19 
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan