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

Интерфейс "интернет каталога" товаров

06.09.2012, 22:29. Показов 1592. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте.
Пишу такое задание, данное в учебном заведении.
Необходимо сделать ( в гораздо более упрощенном виде, без парсинга, дизайна, графиков ) интернет-каталог, похожий на этот:
http://hotline.ua/computer/
http://hotline.ua/computer/processory/
Задание с акцентом на работу с БД в первую очередь.

Что я уже реализовал?
0. Структура БД: Таблица категорий, 5 таблиц с товарами, 5 таблиц с фильтрами для товаров.
1. На главной странице динамически выводятся ссылки на категории ( "компьютеры, процессоры, видеокарты"...). Категории берутся из одноименной таблицы в БД.
2. При переходе по ссылке на одну из категорий, отображается страница, на которой
а) Отображается таблица всех товаров данной категории ( банальная построчная обработка запроса "select * from ...".
б) Слева отображаются "фильтры", которые представляют из собой ссылки, динамически создающиеся с помощью _отдельной_ таблицы из бд.
Стоит отметить, что одна страница у меня отвечает за формирование таблицы для любой категории товаров.
3. При нажатии на "ссылку" фильтра, например цена "> 200" происходит переход на _отдельную_ страницу, заточенную под обработку фильтров. Сама страница "внешне" не отличается от предыдущей, за тем исключением, что на ней отображаются не все товары, а только те, что попадают под условие фильтра.

В чем же собственно моя проблема и вопрос?
Дело в том, что фильтры я реализовал криво и неправильно.
На странице их обработки вначале вытаскиваются переменные, передаваемые по ссылкам:
PHP
1
2
$price=($_GET["price"]);
...
А потом, для формирования таблицы используется следующий sql запрос:
PHP
1
2
3
$result=mysql_query("SELECT * FROM $cat where year='$year' or type='$type' or speed between $speed1 and $speed2 or 
     price between $price1 and $price2 or
     cores='$cores';",$db);
Это все накладывает одно очень неприятное ограничение: я не могу использовать одновременно более 1го фильтра. А очень хочется сделать, чтобы работало. Причем чтобы можно было выбрать и несколько фильтров одного типа ( например 2 разных модельных ряда процессоров ), так и несколько фильтров разных типов.

Буду очень благодарен за идеи, как можно исправить ситуацию с фильтрами.

_________________

p.s. Кроме этого, желательно реализовать поиск по всей БД, так, чтобы человек мог в окошко поиска ввести слово ( ограничимся названием модели, или частью названия модели ), и по этому слову человеку выдало таблицу товаров, соответствующих запросу. Например если человек вводит i5, то ему выдает все процессоры i5, если вводит "i5-2", то выводит все, в названии модели которых есть такие символы, и т.д.
Честно говоря, я пока не знаю, как это буду делать, так что буду рад любому совету.

p.s.s. Если это поможет, вкладываю архив с php файлами. Если нужно - могу и бд вложить.
Вложения
Тип файла: rar shop.rar (13.0 Кб, 12 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
06.09.2012, 22:29
Ответы с готовыми решениями:

Вывод каталога товаров
Требуется вывести каталог товаров, нужно чтобы было по 3-4 товара в строку и дальше следовал перенос строки. Товары берутся из базы в...

Как сделать автообновление каталога товаров (одежды) при каждом новом выборе пункта в фильтре параметров
Как сделать автообновление каталога товаров (одежды) при каждом новом выборе пункта в фильтре параметров Аналогично как в яндекс...

как сделать фильтрацию товаров в интернет магазине
Подскажите как сделать фильтрацию товаров в интернет магазине при помощи флажков..

1
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
06.09.2012, 22:51
ничего сложного.
Самое главное - что
Цитата Сообщение от Arimand Посмотреть сообщение
PHP
1
$price=($_GET["price"]);
вот это нужно очищать и проверять по любому. Никогда нельзя доверять данным от пользователя (введите в строку после адреса страницы такую строчку к примеру ?price='+or+1=1+--+f)
фильтры можно делать так если по простому
PHP
1
2
3
4
5
6
7
8
9
10
$z = ''; #инициализация переменной
#далее проверяем фильтры, если не пустой критерий - добавляем в поиск
$z .= !empty($first) ? "AND `first`='$first' " : '';
$z .= !empty($second) ? "AND `second`='$second' " : '';
$z .= !empty($third) ? "AND `third`='$third' " : '';
$z .= ....
#если не пустой фильтр - удаляем первый AND и добавляем WHERE
if(!empty($z)) $z = 'WHERE '.(ltrim($z, 'AND'));
$query = "SELECT .... ".$z;
#выполняешь запрос
Так же можно добавить и текстовое поле, только запрос при верном условии делать через LIKE
PHP
1
"AND `text` LIKE '%{$text}%' ";
и при очистке полученного текста если используйте плэйсхолдеры ( mysql_real_escape_string() ) нужно будет помимо всего прописать замены символов % и _
PHP
1
2
$text = str_replace('%','\%',$text);
$text = str_replace('_','\_',$text);
потому что mysql_real_escape_string() не экранирует служебные символы (перечисленные выше)

По поводу отдельной страницы. Спрашивается, зачем? Я так понимаю, у Вас там обычная форма с методом гет, так? Если да, то просто проверяете, нажимали ли на клавишу формы или нет
PHP
1
2
3
4
5
6
if(!empty($_GET['кнопка_формы'])) {
#нажимали, ищем с критериями
}
else {
#не нажимали, выводим все категории
}
Добавлено через 3 минуты
P.S. в критерии фильтров можно заменить AND на OR если вам нужно не по всем сразу, а по одному из перечисленных

Добавлено через 2 минуты

Не по теме:

Цитата Сообщение от Arimand Посмотреть сообщение
p.s.s. Если это поможет, вкладываю архив с php файлами
мне влом его скачивать)

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.09.2012, 22:51
Помогаю со студенческими работами здесь

Автоматический перенос товаров с сайта-аукциона в интернет-магазин
Здравствуйте, уважаемые участники форума. Посоветовали Ваш подфорум PHP. Вопрос такой: есть интернет-аукцион Мешок.ру, есть собственный...

Логика работы каталога товаров
Всем привет. Не знаю в каком разделе нужно было создать тему, решил здесь так как проект на php. Есть каталог с товарами. Пользователи...

Создание каталога в интернет магазине
где создавать записи: в таблице базы данных в phpmyadmine а потом считать их на страницу с каталогом или писать запросы с помощью php?

Создание фильтра товаров в интернет-магазине
Подскажите, как создать аналогичный фильтр, как на яндекс маркете (см.скрин)? Со связкой-зависимостью от выбора или до или после страны...

Сделать сравнение товаров для интернет-магазина
Ребят помогите осуществить функцию сравнения 2 товаров Допустим есть смартфон 1 и смартфон 2 Они выносятся на отдельную страницу и...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru