Создание интернет-магазина с форумом и административной частью
Оглавление
Введение
Глава 1. Техническое задание
Глава 2. Технический проект
2.1 Описание схемы данных
2.2 Клиентская часть
2.3 Описание классов и файлов программы
Приложение A. Исходный код
Приложение Б. Снимки страниц
Введение
Заданием курсовой работы является разработка и написание
программного обеспечения для интернет-магазина по продаже свежих овощей.
Интернет-магазин - это сайт, на котором пользователи имеют
возможность приобретать товары в режиме online. При регистрации на
сайте, пользователь получает возможность просматривать каталоги товаров,
использовать корзину товаров, обсуждать товары на форуме и другое.
Глава 1.
Техническое задание
1.1. Задача: разработать интернет-магазин по продаже
свежих овощей, который предоставит возможность посетителям совершать покупки.
1.2. Функциональные требования:
1. Возможность просмотра каталога товаров.
2. Наличие наименования товара в каталоге товаров.
. Наличие описания товара в каталоге товаров.
. Наличие стоимости товара в каталоге товаров.
. Возможность регистрации новых пользователей.
. Возможность добавить адрес пользователя.
. Возможность указать способ оплаты.
. Наличие корзины товаров.
. Наличие наименования товара в корзине товаров.
. Наличие цены выбранного товара в корзине товаров.
. Возможность просматривать общую стоимость выбранных
товаров.
. Возможность добавлять товары в корзину товаров.
. Возможность удалять товары в корзину товаров.
1.3. Нефункциональные требования:
1. Одинаково быстрая работа на разного рода устройствах
(ПК, телефоны, смартфоны, планшетные компьютеры).
2. Работа в современных браузерах Internet Explorer 5.5 и выше, Mozilla Firefox 7.01 и выше, Safari 5.1.7 и выше, Google Chrome 13.0.772.0 (быстрая
загрузка страниц).
. Проект должен быть написан на языке программирования
PHP.
. Использовать базы данных MySQL версии 5.0 и выше.
. Работать на веб-сервере Apache.
. Веб-сайт должен иметь пользовательскую часть.
. В случае с административной частью должна быть
предусмотрена авторизация для входа в панель управления сайтом для его изменения.
. Не хранить пароли в БД в открытом виде.
. Клиентские требования для Windows: Windows XP с пакетом
обновления 2 или более поздней версии; Windows Vista; Windows 7; Windows 8.
. Клиентские требования для Mac: Mac OS X 10.6 или более
поздняя версия.
. Клиентские требования для Linux: Ubuntu 10.04+; Debian 6+; OpenSUSE 11.3+; Fedora Linux 14.
. Наличие процессора для Windows: Intel Pentium 4 или более
поздней версии.
. Наличие процессора для Mac: Intel.
. Наличие процессора для Linux: Intel Pentium 3/Athlon
64 или более поздней версии.
. Свободное место на диске для Windows: 100 МБ.
. Свободное место на диске для Mac: 100 МБ.
. Свободное место на диске для Linux: 100 МБ.
. Клиентские требования к ОЗУ для Windows: 128 МБ.
. Клиентские требования к ОЗУ для Mac: 128 МБ.
. Клиентские требования к ОЗУ для Linux: 128 МБ.
интернет магазин пользователь программа
Глава 2.
Технический проект
2.1 Описание
схемы данных
2.1.1 Таблица Client
В таблице содержится информация о клиентах. Таблица имеет
поля:
id - первичный ключ, name - имя клиента, password - пароль, fname - имя, sname - фамилия, email - адрес email, address - адрес, phone_number - номер телефона.
.1.2 Таблица Staff
В таблице содержится информация о сотруднике. Таблица имеет
поля:
id - первичный ключ, name - имя клиента, password - пароль, type - тип, fname - имя, sname - фамилия.
.1.3 Таблица Items
В таблице содержится информация о товарах. Таблица имеет
поля:
id - первичны ключ, name - имя, price - цена, description - описание.
.1.4 Таблица Cart
В таблице содержится информация о корзине товаров. Таблица
имеет поля:
id - первичный ключ, client - внешний ключ, current - является ли корзина
текущей.
.1.5 Таблица Items_on_cart
В таблице содержится информация о товарах содержащихся в
корзине товаров. Таблица имеет поля:
id - первичный ключ, items_id - внешний ключ - товар, cart_id - внешний ключ -
корзина.
2.2
Клиентская часть
.2.1 Главная страница
На главной странице находятся название магазина, поля ввода
информации для входа на сайт (логин и пароль), приветствие и ссылка на
регистрацию. Также на этой странице представлен каталог товаров в виде таблицы,
где представлены рисунок товара, его наименование, описание и цена, а также
есть возможность добавить понравившийся товар в корзину, поставив галочку возле
товара и нажав на кнопку addItem.
.2.2 Корзина
В корзине находится информация о выбранном товаре,
наименование, цена и описание товара, а также отображается общая стоимость
выбранных. Также там есть кнопки Buy и Delete дающие возможность купить и удалить товар из
корзины. После нажатия на кнопку Buy корзина товаров очищается.
.2.3 Регистрация пользователя
В окне регистрации имеется возможность добавлять личную
информацию пользователя. Имеются поля для ввода логина, пароля, адреса
электронной почты, адреса, имени, фамилии и телефонного номера. При нажатии на
кнопку registration пользователь получает возможность заходить на сайт под выбранным
им логином.
Класс для установки подключения к базе данных и выполнения
запросов SQL
Класс имеет 1 статическое поле для хранения подключения к БД.
Класс реализует следующие методы:
.3.1.1 setDataBaseConnect - Метод для установки нового
пдключения к базе данных, путем содания нового объекта класса PDO
.3.1.2 select - Метод для выполнения запросов на выборку
данных из БД. Если подключение не было установленно ранее устанавливает его.
Метод принимает два параметра: строку SQL-запроса и не обязательный массив
неименованных параметров запроса. Метод возвращает выбранные строки в виде
массива объектов. В случае ошибки возвращается значение false.
2.3.1.3 insertOrUpdate - Метод для выполнения запросов на
вставку или обновление данных в БД. Если подключение не было установленно ранее
устанавливает его.
Метод принимает два параметра: строку SQL запроса и массив
неименованных параметров запроса.
.3.1.4 delete - Метод для удаления данных в БД. Если
подключение не было установленно ранее устанавливает его. Метод принимает два
параметра: строку SQL запроса и не обязательный массив неименованных
параметров.
.3.1.5 getLastId - Метод получения значения первичного ключа
из вставленных объектов.
.3.2 Класс Cart
Класс для организации работы корзины.
Класс реализует следующие методы:
.3.2.1 addNewCart - Метод создания новой корзины для покупок.
Возвращает идентификатор созданной корзины.
.3.2.2 addNewItem - метод добавления товара в текущую корзину
покупок. Возвращает идентификатор созданного товара.
.3.2.3 loadCurrentCart - Метод получения из базы данных
текущей корзины. Возвращает объект - данные о текущей корзине.
.3.2.4 cartItemsCount - Метод получения числа элементов в
корзине. Возвращает число элементов в корзине.
.3.2.5 removeCart - Метод удаления корзины из БД. Принимает
идентификатор корзины.
.3.2.6 loadItemsFromCart - Делает корзину неактивной после
совершения покупки.
.3.2.7 deleteItemsFromCart - Метод удаления товаров из
корзины. Принимает массив идентификаторов товаров.
.3.2.8 addItemsOnCart - Метод добавления товаров в корзину.
Если текущей корзины нет, создает новую корзину. Принимает массив с
идентификаторами товаров.
.3.2.9.commitCart - Метод подтверждения заказа корзины.
.3.3 Класс Registration
Класс реализует возможность регистрироваться на сайте.
В классе реализованы следующие методы:
.3.3.1 userRegistration - Метод добавления нового
пользователя. Прежде чем добавить, проверяет, не занято-ли введенное имя.
Возвращает будевы значения в случае успеха или неудачи.
.3.3.2 managerRegistration - Метод добавления нового
менеджера. Прежде чем добавить, проверяет, не занято-ли введенное имя.
Возвращает будевы значения в случае успеха или неудачи.
.3.3.3 supervisorRegistration - Метод добавления
супервизоров. Прежде чем добавить, проверяет, не занято-ли введенное имя.
Возвращает будевы значения в случае успеха или неудачи.
.3.3.4 deleteManager - Метод удаления менеджера из БД. Принимает
идентификатор менеджера.
.3.3.5 selectManagers - Метод получения прокси списка
менеджеров. В случае ошибки возвращается значение false.
.3.3.6 selectManager - Метод выбора менеджера. Принимает
идентификатор менеджера. В случае ошибки возвращается значение false.
2.3.3.7 updateManagerWithPassword - Метод обновления
данных менеджера.
.3.4 Класс Auth
Класс для реализации аутентификации пользователей.
В классе реализованы следующие методы:
.3.4.1 isAuth - Проверяет наличие пользователя с заданным
логином, если информация совпадает, то сессия возвращает true, если не совпадает, то
возвращает false.
.3.4.2 authentification - Обрабатывает POST и GET запросы на
вход и выход из системы. Обрабатывает запрос на вход и выход из системы (логин
пользователя). Если запрос верен, то возвращается true, если не верен, то
возвращается false.
.3.4.3 isAuthStaff - Проверяет наличие персонала с заданным
логином, если информация совпадает, то сессия возвращает true, если не совпадает,
возвращается false.
.3.4.4 authentificationStaff - Обрабатывает POST и GET
запросы на вход и выход из системы администратора. Обрабатывает запрос на вход
и выход из системы (логин персонала). Если запрос верен, то возвращается true, если не верен, то
возвращается false.
.3.5 Описание файлов:
.3.5.1 Папка pattern
В данной папке содержатся файлы шаблонов.
.3.5.2 index. php - Основные точки входа в систему. В части
магазина сначала проводится авторизация, а затем обрабатываются GET запросы с
подстановкой необходимых шаблонов. В административной части по идентичной схеме
работает admin. php. Форум же после проверки авторизации использует
автоматический вызов контроллеров у Классов-сущностей.
.3.5.3 finder. js - При нажатии на кнопку с идентификатором finder, у блока идентификатором
new_message CSS свойству display присваивается значение block. При щелчке на кнопку с
идентификатором finder_close, у блока с идентификатором new_message CSS свойству display присваивается значение none. Таким образом
реализован показ окна нового сообщения.
Приложение A.
Исходный код
А.1. Класс DataBaseConnect
<? phpDataBaseConnect {public $dbc;DATA_BASE_TYPE =
"mysql";USER = "lesha";PASSWORD = "password";HOST
= "localhost";DATA_BASE = "s_shop";public function
setDataBaseConnect ($user, $password, $host, $dataBase) {:: $dbc=newPDO (self::
DATA_BASE_TYPE. ": host=$host; dbname=$dataBase;=utf8",$user,
$password);
}public function select ($sqlString, $params = array ()) {(!
isset (self:: $dbc)) {:: setDataBaseConnect (self:: USER,self:: PASSWORD,self::
HOST,self:: DATA_BASE);
}{
$statment = self:: $dbc->prepare ($sqlString);
$statment->execute ($params);
$statment->setFetchMode (PDO:: FETCH_OBJ);
$resultObjArray = array ();($obj = $statment->fetch ()) {
$resultObjArray [] = $obj;
}$resultObjArray;
} catch (PDOException $exc) {false;
// throw new Exception ('SELECT ERROR');
}
}public function insertOrUpdate ($sqlString, $params) {(!
isset (self:: $dbc)) {:: setDataBaseConnect (self:: USER,self:: PASSWORD,elf::
HOST,self:: DATA_BASE);
}{
$statment = self:: $dbc->prepare ($sqlString);
$statment->execute ($params);true;
} catch (PDOException $exc) {false;
// throw new Exception ('INSERT OR UPDATE ERROR');
}
}public function delete ($sqlString, $paramsArray) {(! isset
(self:: $dbc)) {:: setDataBaseConnect (self:: USER,self:: PASSWORD,self::
HOST,self:: DATA_BASE);
}{
$statment = self:: $dbc->prepare ($sqlString);
$statment->execute ($paramsArray);true;
}(PDOException $exc) {false;
// throw new Exception ('DELETE ERROR');
}
}
}
? >? >.2. Класс Auth.
<? phpAuth{$user;$password;SELECT_USER =
"SELECT id, name, password FROM clients WHERE name =? AND password
=?";SELECT_MANAGER = "SELECT id, name, password, type FROM staff
WHERE name =? AND password =?";public function isAuth ($user, $password) {
$password = md5 ($password);
$result = DataBaseConnect:: select (self::
SELECT_USER, array ($user, $password));(count ($result) == 1) {
$_SESSION ['user'] = $result [0] - >name;
$_SESSION ['id'] = $result [0] - >id;
$_SESSION ['auth'] = true;true;
}return false;
}public function authentification () {(isset
($_GET ["logout"])) {($_SESSION ["user"], $_SESSION ["id"],
$_SESSION ["auth"]);
}(isset ($_POST ["auth"])) {($_POST
["auth"] == true) {:: isAuth ($_POST ["login"], $_POST
["password"]);($_POST ["auth"], $_POST ["login"],
$_POST ["password"]);
}
}
}public function isAuthStaff ($user, $password) {
$password = md5 ($password);
$result = DataBaseConnect:: select (self::
SELECT_MANAGER, array ($user, $password));(count ($result) == 1) {
$_SESSION ['userM'] = $result [0] - >name;
$_SESSION ['idM'] = $result [0] - >id;
$_SESSION ['typeM'] = $result [0] - >type;
$_SESSION ['authM'] = true;true;
}return false;
}public function authentificationStaff () {(isset
($_GET ["logoutM"])) {($_SESSION ["userM"],$_SESSION
["idM"],$_SESSION ["authM"],$_SESSION ["typeM"]);
}(isset ($_POST ["authM"])) {($_POST
["authM"] == true) {:: isAuthStaff ($_POST ["loginM"],
$_POST ["passwordM"]);($_POST ["authM"], $_POST
["loginM"], $_POST ["passwordM"]);
}
}
}
}
? >
A.3. Класс Cart.
<? phpCart {$currantCart;NEW_CART = "INSERT INTO
`s_shop`. `cart` (`id`, `client`, `current`) VALUES (NULL,?,
'1')";LOAD_CURRENT_CART = "SELECT id FROM cart WHERE client =? AND
current = 1";DISABLE_CART = "UPDATE `s_shop`. `cart` SET current =
'0' WHERE id =?";LOAD_ITEMS_FROM_CART = "SELECT items_on_cart. id AS
id, name, price, description, img_url FROM items, items_on_cart WHERE cart_id
=? AND item_id = items. id";ADD_ITEM_ON_CART = "INSERT INTO `s_shop`.
`items_on_cart` (`item_id`, `cart_id`, `id`) VALUES (?,?,
NULL)";REMOVE_CART_ITEMS = "DELETE FROM items_on_cart WHERE cart_id
=?";REMOVE_CART = "DELETE FROM cart WHERE id
=?";REMOVE_ITEM_FROM_CART = "DELETE FROM items_on_cart WHERE id
=?";CART_TO_COMMIT = "INSERT INTO commits (client, address, date,
commit, cart, total_cost) VALUES (?,?,?, 0,?,?)";function addNewCart ()
{:: insertOrUpdate (self:: NEW_CART, array ($_SESSION
['id']));DataBaseConnect:: getLastId ();
}static function addToCart ($item_id) {
$currentCart = self:: loadCurrentCart ();($currentCart ==
false) {
$currentCart = self:: addNewCart ();
}:: insertOrUpdate (self:: ADD_ITEM_ON_CART, array ($item_id,
$currentCart));
}static function loadCurrentCart () {
$result = DataBaseConnect:: select (self:: LOAD_CURRENT_CART,
array ($_SESSION ['id']));(count ($result)! = 0) {$result [0] - >id;
}false;
}static function cartItemsCount () {
$cart = self:: loadCurrentCart ();($cart! = false) {
$result = DataBaseConnect:: select (self::
LOAD_ITEMS_FROM_CART, array ($cart));
$count = count ($result);($count! = 0) {$count;
}false;
}false;
}static function removeCart ($cart_id) {:: delete (self::
REMOVE_CART_ITEMS, array ($cart_id));:: delete (self:: REMOVE_CART, array
($cart_id));
}static function disabledCart ($cart_id) {:: insertOrUpdate
(self:: DISABLE_CART, array ($cart_id));
}static function loadItemsFromCart () {
$cart = self:: loadCurrentCart ();($cart! = false) {
$result = DataBaseConnect:: select (self::
LOAD_ITEMS_FROM_CART, array ($cart));
$count = count ($result);($count! = 0) {$result;
}false;
}false;
}static function deleteItemsFromCart ($items_id_array)
{($items_id_array as $temp) {:: delete (self:: REMOVE_ITEM_FROM_CART, array
($temp));
}
}static function addItemsOnCart ($items_id_array) {
$currentCart = self:: loadCurrentCart ();($currentCart ==
false) {
$currentCart = self:: addNewCart ();
}($items_id_array as $temp) {:: insertOrUpdate (self::
ADD_ITEM_ON_CART, array ($temp, $currentCart));
}
}static function commitCart ($address, $totalCoast) {
$currentCart = self:: loadCurrentCart ();($currentCart! =
false) {
$date = date ("Y-m-d H: i: s");:: insertOrUpdate
(self:: CART_TO_COMMIT, array ($_SESSION ['id'], $address, $date, $currentCart,
$totalCoast));:: disabledCart ($currentCart);
}
}
}
? >.4. Класс Items.
<? phpItems {SET_ITEM = "INSERT INTO items (name,
price, description, img_url) VALUES (?,?,?,?)";SELECT_EDITABLE_ITEM =
"SELECT * FROM items WHERE id =?";SELECT_ALL_ITEMS = "SELECT *
FROM items";UPDATE_ITEM = "UPDATE items SET name =?, price =?,
description =?, img_url =? WHERE id =?";
// const NEW_ITEM = "INSERT INTO items (name, price,
description, img_url) VALUES (?,?,?,?)";static function setItem ($name,
$price, $description, $img_url) {:: insertOrUpdate (self:: SET_ITEM, array
($name, $price, $description, $img_url));
}static function selectEditableItem ($id) {
$proxy = DataBaseConnect:: select (self::
SELECT_EDITABLE_ITEM, array ($id));(count ($proxy) > 0) {$proxy [0];
}static function selectItems () {
$proxy = DataBaseConnect:: select (self::
SELECT_ALL_ITEMS);$proxy;
}static function updateItem ($id, $name, $price,
$description, $img_url) {:: insertOrUpdate (self:: UPDATE_ITEM, array ($name,
$price, $description, $img_url, $id));
}
}
? >.5. Класс Registration.
<? phpRegistration {NEW_USER = "INSERT INTO clients
(name, password, fname, sname, email, address, phone_number) VALUES
(?,?,?,?,?,?,?)";SELECT_USER_NAMES = "SELECT name FROM clients WHERE
name =?";NEW_MANAGER = "INSERT INTO staff (name, password, type,
fname, sname) VALUES (?,?, 'manager',?,?)";NEW_SUPERVISER = "INSERT
INTO staff (name, password, type, fname, sname) VALUES (?,?, 'superviser',?,?)";SELECT_STAFF_NAMES
= "SELECT name FROM staff WHERE name =?";DELETE_MANAGER =
"DELETE FROM staff WHERE id =? AND type = 'manager'";SELECT_MANAGERS
= "SELECT * FROM staff WHERE type = 'manager'";SELECT_MANAGER =
"SELECT * FROM staff WHERE type = 'manager' AND id
=?";UPDATE_MANAGER_WITOUT_PASSWORD = "UPDATE staff SET name =?,
fname=?, sname =? WHERE id =? AND type =
'manager'";UPDATE_MANAGER_WITH_PASSWORD = "UPDATE staff SET name =?,
password =?, fname=?, sname =? WHERE id =? AND type = 'manager'";public
function userRegistration ($name, $password, $fname, $sname, $email, $address,
$phone_number) {
$result = DataBaseConnect:: select (self:: SELECT_USER_NAMES,
array ($name));(count ($result) > 0) {false;
}:: insertOrUpdate (self:: NEW_USER, array ($name, md5
($password), $fname, $sname, $email, $address, $phone_number));true;
}public function managerRegistration ($name, $password,
$fname, $sname) {
$result = DataBaseConnect:: select (self::
SELECT_STAFF_NAMES, array ($name));(count ($result) > 0) {false;
}:: insertOrUpdate (self:: NEW_MANAGER, array ($name, md5
($password), $fname, $sname));true;
}public function supervisorRegistration ($name, $password,
$fname, $sname) {
$result = DataBaseConnect:: select (self::
SELECT_STAFF_NAMES, array ($name));(count ($result) > 0) {false;
}:: insertOrUpdate (self:: NEW_SUPERVISER, array ($name, md5
($password), $fname, $sname));true;
}public function deleteManager ($id) {:: delete (self::
DELETE_MANAGER, array ($id));
}public function selectManagers () {DataBaseConnect:: select
(self:: SELECT_MANAGERS);
}public function selectManager ($id) {
$result = DataBaseConnect:: select (self:: SELECT_MANAGER,
array ($id));$result [0];
}public function updateManagerWithoutPassword ($id, $name,
$fname, $sname) {:: insertOrUpdate (self:: UPDATE_MANAGER_WITOUT_PASSWORD,
array ($name, $fname, $sname, $id));
}public function updateManagerWithPassword ($id, $name,
$password, $fname, $sname) {:: insertOrUpdate (self::
UPDATE_MANAGER_WITH_PASSWORD, array ($name, $password, $fname, $sname, $id));
}
}
? >.6. Файл index.
<? php_start ();_autoload_register ();:: authentification
();_start ();_once ("pattern/authBlock. php");
$authContent = ob_get_clean ();
// Блок корзины($_POST ['delete_cart_items']) {(count ($_POST
['cheked_items']) > 0) {:: deleteItemsFromCart ($_POST ['cheked_items']);
}
}($_POST ['add_to_cart']) {(count ($_POST ['cheked_items'])
> 0) {:: addItemsOnCart ($_POST ['cheked_items']);
}
}($_POST ['bye_cart_items']) {:: commitCart ($_POST
['address'], $_POST ['total']);
}
// Конец блока корзины
// Начало блока регистрации
$regres = "";(! $_SESSION ['auth']) {($_POST
['new_user']) {
$reg=Registration:: userRegistration ($_POST ['name'],$_POST
['password'],$_POST ['fname'], $_POST ['sname'], $_POST ['email'], $_POST
['address'], $_POST ['phone_number']);($reg) {
$regres = "Registration SUCESFULL";
}{
$regres = "This USERNAME is not available";
}
}
}
// Конец блока регистрации(isset ($_GET ['cart'])) {_start
();(! $_SESSION ['auth']) {
$items = SShop:: getItems ();_once ("pattern/items.
php");
}{
$items = Cart:: loadItemsFromCart ();_once
("pattern/cart. php");
}
$content = ob_get_clean ();
} else if (isset ($_GET ['registration'])) {_start ();(!
$_SESSION ['auth']) {_once ("pattern/registration. php");
}{
$items = SShop:: getItems ();_once ("pattern/items.
php");
}
$content = ob_get_clean ();
}{
$items = SShop:: getItems ();_start ();_once
("pattern/items. php");
$content = ob_get_clean ();
}_once ("pattern/pattern. php");
? >.7. Файл auth Block/Pattern.
<form action="index. php"
method="post">
<? php if ($_SESSION ['auth']! = true) {? >: <input
name="login" type="text" />: <input
name="password" type="text" />
<button type="submit" name="auth"
value="true" >Send</button><br />
<br />: <strong>GUEST! </strong><br
/>have account? <a href=". /?
registration=true">registration</a>
<? php echo $regres;? >
<? php } else {? >
<a href=". /? logout=true">log out</a>
<br />: <strong><? php echo $_SESSION
['user'];? ></strong>
<? php }? >
</form>.8. Файл cart/Pattern.
<form method="POST" action=". /?
cart=true">
<table>
<td
id="img">Picture</td><td>Name</td><td>Description</td><td>Price</td><?
php if ($_SESSION ['auth']) {? ><td></td><? php }? >
</tr>
<? php
$total = 0;($items! = false) {($items as $item) {
? >
<tr>
<td><img width="128"
height="128" src="<? php echo $item->img_url;? >"
/></td><td><? php echo $item->name;?
></td><td><? php echo $item->description;? ></td><td>$<?
php echo $item->price;? ></td><td><input
type="checkbox" name="cheked_items [] " value="<?
php echo $item->id;? >" /></td>
</tr>
<? php
$total = $total + (int) $item->price;
}
}
? >
<? php
? >
</table>
<input type="hidden" name="total"
value="<? php echo $total;? >" />
<? php echo "Total coast: $". $total;? >
<br />Payment info: <input style="width: 100%;
" type="text" placeholder="Your address"
name="address" />
<button name="delete_cart_items"
type="submit" value="true">Delete</button>
<button name="bye_cart_items"
type="submit" value="true">Buy</button>
</form>.9. Файл items/Pattern.
<form method="POST" action=". /">
<? php if ($_SESSION ['auth']) {? ><button
type="submit" value="true"
name="add_to_cart">add to cart</button><? php }? >
<table>
<tr>
<td
id="img">Picture</td><td>Name</td><td>Description</td><td>Price</td><?
php if ($_SESSION ['auth']) {? ><td></td><? php }? >
</tr>
<? php($items as $item) {
? >
<tr>
<td><img width="128"
height="128" src="<? php echo $item->img_url;? >"
/></td><td><? php echo $item->name;?
></td><td><? php echo $item->description;?
></td><td>$<? php echo $item->price;? ></td><?
php if ($_SESSION ['auth']) {? ><td><input
type="checkbox" name="cheked_items [] " value="<?
php echo $item->id;? >" /></td><? php }? >
</tr>
<? php
}
? >
<? php
? >
</table>
</form>.10. Файл patters/Pattern.
<! DOCTYPE HTML>
<html>
<head>
<link href="pattern/style. css"
rel="stylesheet" type="text/css" />
<title>'s
</title>
</head>
<body>
<div id="header">
<a href=". /"><h1>Tolbin's
MMMMMSHOP</h1></a>
<h2>Your paradise, my problem. </h2>
<? php$authContent;
? >
</div>
<div id="central">
<div id="menu">
<ul>
<li>
<a href=". /"><span>Main
Stock</span></a>
</li>
<? php if ($_SESSION ['auth'] == true) {? >
<li>
<a href=". /? cart=true"><span>Shop
Cart (<? php
$count = Cart:: cartItemsCount ();($count == false) {
$count = 0;
}$count;
? >)
</span>
</a>
</li>
<? php if ($_SESSION ['authM'] == true) {? >
<li>
<a href=". /admin.
php"><span>Admin</span></a>
</li>
<li>
<a href=". /admin. php?
commits=true"><span>Commits</span></a>
</li>
<li>
<a href=". /admin. php?
commitsold=true"><span>CommitSold</span></a>
</li>
<? php if (strcasecmp ($_SESSION ['typeM'], 'supervisor')
== 0) {? >
<li>
<a href=". /admin. php?
itemsList=true"><span>Items List</span></a>
</li>
<li>
<a href=". /admin. php? newItem=true"><span>New
Item</span></a>
</li>
<li>
<a href=". /admin. php?
managerList=true"><span>Manager List</span></a>
</li>
<li>
<a href=". /admin. php?
managerNew=true"><span>New Manager</span></a>
</li>
<? php }? >
<? php }? >
</ul>
</div>
<div id="content">
<? php echo $content;? >
</div>
</div>
</body>
</html>.11. Файл registration/Pattern.
<form>
<style>
. reg input [type=text] {: 100%;
}
</style>
<input type="text" placeholder="Your
login" name="name" />
<input type="text" placeholder="Your
password" name="password" />
<input type="text" placeholder="Your
e-mail" name="email" />
<input type="text" placeholder="Your
firstname" name="fname" />
<input type="text" placeholder="Your
secondname" name="sname" />
<input type="text" placeholder="Your
address" name="address" />
<input type="text" placeholder="Your phone
number" name="phone_number" />
<button type="submit" name="new_user"
value="true">registration</button>
</form>.12. Файл style/Pattern.{: 0;: 0;: #333;
}
#central {: 1024px;color: #fff;: 50px auto;: relative;
}
#central #menu {: absolute;: - 50px;: 1024px;color: #333;:
50px;
}
#central #menu ul{: inline-block;: 0;: 0;
}
#central #menu ul li {: block;: left;: 10px;
}
#central #menu ul li: hover{color: #fff;
}
#central #menu ul li span {: block;: 100%;: 10px;
}
#central #menu ul li a {decoration: none;weight: bold;: #fff;
}
#central #menu ul li a: hover {: #a00;
}
#header {color: #fff;: 100%;: relative;bottom: 25px;
}
#header h1 {: 10px;: #a00;decoration: none;
}
#header a h1 {decoration: none;: #a00;
}
}
#content table {: 2px solid #333;: 100%;
}
#content table td {: 1px solid #333;align: middle;
}
#content table #img {: 128px;
}
#content table tr. header{align: center;
}
#content button {: 100%;: #000;: #fff;
}
Приложение Б.
Снимки страниц
Рисунок 1 - Главная страница
Рисунок 2 - Страница регистрации