Каталог продукции (MySQL). Каталог продукции (MySQL) Заботливый catalog php

Каталог продукции (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 (имя не принципиально), код программы приведен ниже.

Текст программы

". "". // передаем сесиию "". // рисуем заголовок таблицы с корзиной: "". ""; // проходим массив $t по списку его ключей $k=@array_keys($t); for ($i=0; $i". "". "". ""; } // внизу таблицы две кнопки: // Измениения - сохранить изменение числа товаров и обновить страницу // Заказ - сорх. изм. + перейти на страницу оформления заказа echo "
$ogl$oglкол-вокоманды
{$t[$id]}{$t[$id]}удалить
". ""; } /* Выводит на экран таблицу с товарами. В таблице автоматом генериться новая колонка с checkbox"асами, отметив которые и нажав "добавив", можно занести товары в корзину. */ function price() { global $t, $PHP_SELF,$SID; $f=file("./shop.txt") or die("файл не найден"); // читаем файл $ogl=explode("\\",$f); // из него берем огравление $x=count($ogl); // вычисляем число колонок $y=count($f); // и число строк // форма (не забываем вписать $SID) + начало таблицы: echo "
". ""; // рисуем заголовок таблицы, названия колонок - первая строка файла shop.txt echo ""; for ($j=0; $j<$x; $j++) { if (strlen($ogl[$j])==0) echo ""; else echo ""; } // рисуем последнюю колонку, где будут checkbox"ы echo ""; // основной цикл вывода прайса for ($i=1; $i<$y; $i++) { $a=explode("\\",$f[$i]); // читаем очередную строку файла if (count($a)<2) continue; // если она пустая (глюки), пропускаем echo ""; // цикл вывода всех колонок текущей строки таблицы for ($j=0; $j<$x; $j++) { // если ячейка пустая, там надо поместить " "; if (strlen($a[$j])==0) echo ""; else echo ""; } // рисуем тот самый checkbox в последней колонке текущей строки echo ""; } echo "
$ogl[$j]x
$a[$j]

"; } /* Выводит на экран несколько чисел (написано). Подсчет значений происходит при каджом вызове. */ function summa() { global $t; // традиционный проход массива товаров из корзины $k=@array_keys($t); for ($i=0; $i",$summ); } /* Объявление переменной post, которая содержит поля для заполнения посетителем при оформление заказа. Т.к. этот список используется 2 раза, то описано это именно тут, а не ниже. */ $post=array("название организации", "Ф.И.О. должностного лица", "должность", "ИНН организации", "местонахождение организации", "контактный телефон", "e-mail"); /*****************************************************************************/ // основной код программы // $c - основная переменная, указывающая на нужное действие if (!isset($c)) $c=""; switch($c) { case "": // без параметров - рисуем прайс-лист summa(); // статистика по корзине price(); // прайс // ссылка для перехода на корзину echo "
  • Корзина покупок"; break; case "korzina": // вывод корзины summa(); // см. выше korzina(); // рисуем таблицу корзины // пишем 2 ссылки echo "
  • Каталог товаров"; echo "
  • Очистить корзину (осторожно!)"; break; case "add": // добавление из формы прайса всех товаров // в массиве $v скоплены номера строк товаров, которые функция... $k=@array_keys($v); for ($i=0; $i". "". ""; for ($i=0; $i"; } echo "
    $post[$i]
    "; break; case "post": // генерим и отправляем анкету посетителя, где указаны данные посетителя // и список товаров из корзины $msg="Анкета посетителя:\n\n"; for ($i=0; $i

    Ваш заказ отправлен!
    Спасибо за покупку!



    ">страница сервера

    ?">прайс-лист
    В переменной $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 "
    "; 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 ""; // Создать строку таблицы для каждой книги foreach ($book_array as $row) { $url = "show_book.php?isbn=".($row["isbn"]); echo ""; } 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 "
    "; } 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-приложения.