Каталог продукции (MySQL). Каталог продукции (MySQL) Заботливый catalog php
Читайте также
Что это?
Это так называемый виртуальный магазин, т.е. прайс лист некой организации с наименовнием товаров, часть из которых можно ПОМЕТИТЬ и занести в корзину, чтобы в дальнейшем можно было заполнить анкету (ФИО, адрес и т.д.) для покупки этих товаров. Все проще простого. Дизана нет никакого, только "скелет".
Требования: где ЭТО будет работать?
На win/unix в PHP версии не ниже 4.0 с поддержкой сессий. Включенных cookies от поcетителей не требуется. Надо лишь правильно настроить некоторые опции PHP, чтобы программа получила доступ к сессиям (будет написано ниже).
А почему размер файла 10Кб, а не 5Кб?
Если выкинуть все комментарии, вот и будет 5 кб:-) Программа (без комментариев) была написана за 3 часа в присутствии человека, изучающего ПХП. Комментарии, на самом деле были, но только устные:-)
Подготовка сервера
1. Возможный глюк: у вас не настроен временный каталог на сервере для размещения временных файлов.
2. Программа подразумевает, что PHP поместит в переменную $SID номер сесии. По умолчанию, возможно, этого не произойдет.
Для решения проблемы 1) и 2) пунктов надо изменить опции PHP. Это можно сделать в php.ini или файлах httpd.conf/.htaccess.
Вариант 1 - php.ini
-
Если править php.ini, то в нем уже есть те переменные, что надо изменить
- ищем строку session.save_path и пишем путь к своему временному каталогу. В этот каталог Apache/PHP будут писать свои файлы, след. для них там должен быть доступ. Если у вас Unix, то пишем /tmp , если Windows, то \temp (не забудьте создать C:\TEMP или X:\TEMP, смотря где находится Апач)
- ищем строку session.name и заменяем на SID (большими буквами)
Вариант 2 - .htaccess или httpd.conf
- вариант для unix: php_value session.save_path /tmp и для windows: php_value session.save_path \temp
- и имя сессии: php_value session.name SID
Если вносить те же измения в указанные файлы, то надо написать так:
Итак, нам надо для 1) и 2) пунктов подправить переменные PHP-процессора: session.save_path (временный каталог) и session.name (присвоить знаначение "SID").
Настройка каталога
- создать файл shop.txt . Если вы захотите добавить новые колонки, то не забудьте, что первой кононкой должны идти ID товаров (например числа от 1 до..), а последней - цена товара. Разделитель товаров - слеш (\ ).
- создать файл shop.phtml (имя не принципиально), код программы приведен ниже.
Текст программы
". "". // передаем сесиию "". // рисуем заголовок таблицы с корзиной: "$ogl | $ogl | ". "кол-во | команды | {$t[$id]} | ". "{$t[$id]} | ". "". " | удалить | "; } // внизу таблицы две кнопки: // Измениения - сохранить изменение числа товаров и обновить страницу // Заказ - сорх. изм. + перейти на страницу оформления заказа echo "
$post[$i] | "; } echo " |
Ваш заказ отправлен!
|
echo $msg; ?>} ?>
Реальные проекты на PHP и MySQL. Основа интернет-торговли - реализация покупательской тележки
Часть 2. Онлайн-каталог товаров с разбивкой по категориям
Серия контента:
Этот контент является частью # из серии # статей: Реальные проекты на PHP и MySQL. Основа интернет-торговли - реализация покупательской тележки
https://www.?series_title_by=**auto**
Следите за выходом новых статей этой серии.
При выборе пользователем одной из категорий, открывается соответствующая страница, которая генерируется следующим кодом:
Сценарий начинается с включения файла book_sc_fns.php, содержащего все библиотеки функций данного приложения. Для начала работы требуется запустить сеанс, который должен работать для нормального функционирования покупательской тележки. При этом, сеанс используется каждой страницей сайта.
Функция get_categories() и display_categories()возвращают массив категорий, существующих в системе, который затем передается в функцию display_categories($cat_array) . Описание всех функций выходит за рамки данной статьи, но код самых важных функций представлен ниже по тексту вместе с описанием их работы. Остальные функции хорошо прокомментированы и понятны при ближайшем рассмотрении.
function get_categories() { // Эапросить в базе данных список категорий $conn = db_connect(); $query = "select catid, catname from categories"; $result = @$conn->query($query); if (!$result) return false; $num_cats = $result->num_rows; if ($num_cats == 0) return false; $result = db_result_to_array($result); return $result; }Функция get_categories() подключается к базе данных и затем извлекает оттуда список состоящий из идентификаторов и имен категорий. Функция db_result_to_array($result) принимает идентификатор результата из MySQL и возвращает массив строк с числовой индексацией, где каждая строка представляет собой ассоциативный массив.
function db_result_to_array($result) { $res_array = array(); for ($count = 0; $row = $result->fetch_assoc(); $count++) $res_array[$count] = $row; return $res_array; }Затем этот массив возвращается в сценарий index.php где передается в функцию display_categories($cat_array) .
function display_categories($cat_array) { if (!is_array($cat_array)) { echo "В настоящий момент нет доступных категорий"; return; } echo "
- ";
foreach ($cat_array as $row)
{
$url = "show_cat.php?catid=".($row["catid"]);
$title = $row["catname"];
echo "
- "; do_html_url($url, $title); echo " "; } echo "
"; }
Функция display_categories($cat_array) отображает массив категорий в виде списка ссылок на категории. При этом она преобразует каждую категорию базы данных в ссылку. Причем, все ссылки передаются в следующий сценарий show.cat.php, при этом каждая из них имеет свой собственный параметр – идентификатор catid (это уникальное число, которое сгенерировано MySQL и служащее для такой идентификации). Этот параметр и определяет, какая категория должна отображаться в конечном итоге.
Вывод списка книг для заданной категории
Данный сценарий, в общем, аналогичен по логике тем процессам, которые были описаны выше. Вывод списка осуществляет код, представленный ниже:
Сначала запускается сеанс с помощью функции session_start(), затем с помощью функции get_category_name($catid) передаваемый идентификатор категории преобразуется в имя категории.
unction get_category_name($catid) { // Запросить в базе данных имя категории для данного идентификатора категории $catid = intval($catid); $conn = db_connect(); $query = "select catname from categories where catid = $catid"; $result = $conn->query($query); if (!$result) return false; $num_cats = $result->num_rows; if ($num_cats == 0) return false; $row = $result->fetch_object(); return $row->catname; }Библиотека функций, отвечающая за обработку логики хранения и извлечения данных о книгах, приведена ниже. Здесь же представлена описываемая функция function get_books($catid) .
query($query); if (!$result) return false; $num_cats = $result->num_rows; if ($num_cats == 0) return false; $result = db_result_to_array($result); return $result; } function get_category_name($catid) { // Запросить в базе данных имя категории для данного идентификатора категории $catid = intval($catid); $conn = db_connect(); $query = "select catname from categories where catid = $catid"; $result = $conn->query($query); if (!$result) return false; $num_cats = $result->num_rows; if ($num_cats == 0) return false; $row = $result->fetch_object(); return $row->catname; } function get_books($catid) { // Выполняет запрос в базу данных книг определенной категории if (!$catid || $catid=="") return false; $conn = db_connect(); $query = "select * from books where catid="$catid""; $result = @$conn->query($query); if (!$result) return false; $num_books = @$result->num_rows; if ($num_books ==0) return false; $result = db_result_to_array($result); return $result; } function get_book_details($isbn) { // Выполняет запрос в базу данных детальной информации о книге if (!$isbn || $isbn=="") return false; $conn = db_connect(); $query = "select * from books where isbn="$isbn""; $result = @$conn->query($query); if (!$result) return false; $result = @$result->fetch_assoc(); return $result; } function calculate_price($cart) { // Вычисляет общую стоимость всех элементов тележки $price = 0.0; if(is_array($cart)) { $conn = db_connect(); foreach($cart as $isbn => $qty) { $query = "select price from books where isbn="$isbn""; $result = $conn->query($query); if ($result) { $item = $result->fetch_object(); $item_price = $item->price; $price +=$item_price*$qty; } } } return $price; } function calculate_items($cart) { // Подсчитывает общее количество элементов в тележке $items = 0; if(is_array($cart)) { $items=array_sum($cart); } return $items; } ?>Обе функции get_books() и display_books() похожи на их практические аналоги get_categories() и display_categories(). Основное отличие между ними заключается в том, что в случае использования этих функций информация извлекается из таблиц книг, а не категорий. Функция display_books() создает ссылку на каждую книгу данной категории, используя при этом сценарий, отображающий книги определенных категорий (был рассмотрен выше). При этом, как и прежде, каждая ссылка сопровождается параметром в виде суффикса. Этот суффикс в этот раз представляет собой номер ISBN конкретной книги. В конце фрагмента этого сценария содержится код для отображения дополнительных функциональных возможностей. Они появляются на странице в том случае, если в систему входит администратор и представляют собой инструменты администрирования – добавления и удаления книг, категорий и тд.
Функция display_books($book_array) имеет вид:
function display_books($book_array) { // Выводит все книги, переданные в массиве if (!is_array($book_array)) { echo "В настоящий момент нет доступных книг в этой категории
"; } else { // Создать таблицу echo "
"; if (@file_exists("images/".$row["isbn"].".jpg")) { $title = ""; do_html_url($url, $title); } else { echo " "; } echo " | "; $title = $row["title"]." by ".$row["author"]; do_html_url($url, $title); echo " |
"; }
Сценарий, показывающий информацию о конкретной книге
Сценарий, приведенный ниже, в качестве параметра принимает номер ISBN, после чего извлекает и отображает детальные сведения о выбранной книге. Он тоже очень похож на приводимые ранее сценарии, что облегчает сопровождение и поддержку кода в целом.
С самого начала, как и в других сценариях, запускается сеанс, а затем с помощью строки:
$book = get_book_details($book);из базы данных извлекается информация о конкретной книге. Для вывода данных в HTML формате используется следующая форма вызова:
display_book_details($book);Функция display_book_details($book) выполняет поиск файла изображения для книги, имя которого выглядит как images/$isbn.jpg. Если при этом такого файла нет, то изображение не выводится вообще. Остальная часть сценария устанавливает средства навигации по имеющемуся функционалу. Простому пользователю предлагается использовать кнопку “Continue Shopping” (продолжить покупки), которая возвращает его на исходную страницу категорий. Кроме этого, предлагается кнопка “Add to Cart” (добавить в тележку) для добавления книг в покупательскую тележку. В том случае, когда вошедший в систему пользователь обладает правами администратора, ему предлагается несколько иные, расширенные опции для администрирования.
Выводы
В статье на реальных примерах рассмотрены вопросы реализации онлайн-каталога товаров под проект интернет-магазина средствами PHP, MySQL и веб-сервера Apache. Подробно рассмотрен макет единой торговой системы, позволяющей обслуживать клиентов в режиме онлайн.
Последовательно изложены механизмы работы скриптов, генерирующих стартовую страницу интернет – магазина с категориями и книгами, отсортированными по категориям. Показана работа функций, поддерживающих описанную логику работы скриптов. При этом все функции собраны в соответствующие библиотеки, и их работа наглядно представлена в IDE EasyEclipse для LAMP на приведенных рисунках. Четкая организация кода и пояснения к нему дают возможность легко поддерживать работающие программы, видоизменять их и при необходимости, переносить на любые другие платформы.
Все скрипты снабжены комментариями и имеют описательную часть, достаточную для быстрого усвоения и дальнейшей адаптации к существующим конкретным задачам.
Данное Web-приложение разработано Выскорко М.С. ([email protected]). Web-приложение является универсальным каталогом продукции. Позволяющим разделить товарные позиции на разделы и подразделы. Каждую товарную позициию характеризует описание и цена. Удобная система администрирования и замечательный дизайн данного каталога не оставит равнодушным никого. Каталог создан с использованием PHP и требует для своей работы наличие базы данных MySQL.
Текущя версия каталога 1.0.0
Инсталляция:
Для успешного функционирования каталога, необходимо создать базу данных, в которой нужно разместить таблицы Web-приложения. Дамп базы данных находится в файлах sql.txt и sql+dump.txt. Первый файл содержит только таблицы, второй - демонстрационную базу данных товарных позиций, на примере которой вы можете протестировать работу Web-приложения, перед тем как размещать его на реальном сайте. После развёртывания базы данных необходимо настроить конфигурационный файл admin/config.php, в котором размещены параметры соединения с базой данных.
В файле admin/config.php необходимо выставить адрес сервера MySQL ($dhost), имя базы данных ($dname), имя пользователя ($duser) и пароль ($dpass). Все четыре переменные вам должен предоставить хостинг, при условии, что для вашего тарифного плана предусмотрено выделение таблиц MySQL.
Особенности:
- Каталог распространяется с полноценным дизайном.
- Имеется возможность создавать как разделы, так и подразделы.
- Имеется возможность создавать собственную базу изображений, и назначать изображения отдельным разделам.
- Товарные позиции характеризуются описанием и ценой.
- Существует сервис импорта товарных позиций.
Администрирование:
Система администрирования находится в директории admin, т.е. если вы установили каталог по адресу http://localhost/cat/, то система администрирования будет доступна по адресу http://localhost/cat/admin/, сам каталог будет доступен по адресу http://localhost/cat/catalog/. Система администрирования позволяет создавать, удалять и редактировать разделы и подразделы, загружать и назначать разделам изображения, добавлять и удалять товарные позиции. Важно отметить, что при использовании каталога на реальном сервере, необходимо защитить систему администрирования от злоумышленников. Для этого её необходимо переименовать и защитить паролем. Инструкцию о том, как защитить директорию паролем средствами Web-сервера Apache можно почитать по ссылке
Обратная связь
Загрузить новые версии каталога, а так же ряда других полезных Web-приложений можно по адресу На форуме IT-студии SoftTime, по адресу вы всегда можете найти поддержку по установке и сопровождению данного Web-приложения.