Інтернет-магазин комп’ютерної техніки Shop.ua 'ІО.Electrical'
Національний технічний
університет України
Київський політехнічний
інститут
Кафедра автоматизованих
систем обробки інформації і управління
КУРСОВА РОБОТА
З дисципліни
Організація баз даних та
знань
Тема:
Інтернет-магазин комп’ютерної
техніки Shop.ua "ІО.Electrical"
Виконав: Чабанов О.Р.
Група: ІС-03
Керівник: к.т.н., ст. викл.
Попенко В.Д.
Київ 2012
ЗАВДАННЯ
На курсову роботу по дисципліні "Організація баз даних
та знань"
Фахове спрямування - "Інформаційні управляючі системи та
технології"
Напрям 6.050101 "Комп'ютерні науки" Група ІС-03
Чабанов Олег Руслановіч
Тема курсової роботи: Інтернет магазин комп’ютерної техніки
Shop.ua «ІО.Electrical»
ЗМІСТ
Постановка задачі
Вступ
Анотація
. Структура об’єктів
і зв’язків предметної області
. Опис структури
проекту
. Керівництво
користувача
.1 Основна інформація
.2 Головна сторінка
.3 Сторінка з
таблицею менеджерів
.4 Сторінка з
таблицею товарів
.5 Сторінка з
таблицею складу
.6 Сторінка
користувачів сайту
.7 Сторінка покупців
.8 Сторінка
попередніх замовлень
.9 Сторінка замовлень
.10 Сторінка зі
списком товарів для покупки
.11 Сторінка з
інформацією про товар
. Код MySQL
. Створення резервної
копії бази даних
Висновок
Використана
література
Додаток: Сторінки рhp
програми де використовуються SQL запити
ПОСТАНОВКА
ЗАДАЧІ
Є інтернет-магазин зі своїм складом товару. В
інтернет-магазині користувачі мережі “Інтернет” можуть вибрати товар, отримати
про нього необхідну інформацію та замовити, менеджер магазину належним чином
обробити замовлення, а адміністратор сайту обновлювати та доповнювати дані про
товари.
Замовлення відбувається в такій послідовності:
Користувач заповнює необхідну інформацію для заказу
товару (ПІБ, номер телефону, адресу доставки), дані обробляються як
передзамовлення
- Менеджер сайту по введеній інформації зв’язується з
клієнтом (для утвердження покупки та оплати) після цього оформлює замовлення
При скасування замовлення менеджер видаляє
передзамовлення.
Товар відправляється зі складу по вказаній адресі
клієнта.
ВСТУП
Мета
створення
Метою створення є розробка движку сайту, за допомогою якого
користувачі мережі “Інтернет” можуть вибрати товар, отримати про нього
необхідну інформацію та замовити, менеджер магазину належним чином обробити
замовлення, а адміністратор сайту обновлювати та доповнювати дані про товари.
Дана програма може використовуватись на фірмі для реалізації товарів через
мережу.
Призначення
системи
Система призначена для:
- Надання можливості зручного пошуку, отримання інформації
та замовлення товарів за допомогою мережі “Інтернет”;
- Автоматизації роботи менеджера по обробці замовлень.
Надання адміністратору зручної можливості оперування
даними товарів.
Вимоги
до програми
· Інтуїтивно зрозумілий інтерфейс користувача
· Використання запитів.
· Використання виключних ситуацій з
боку сервера (також власних)
· Використання процедур (тригерів)
Програмне забезпечення має працювати з наступними таблицями:
· Покупці
· Менеджери
· Товари
· Склад
· Попередні замовлення
· Замовлення
· Користувачі сайту
Необхідно реалізувати наступні функції:
· Додавання інформації
· Коригування даних
· Видалення даних
· Автоматичного оброблення та зміни
даних
· Виведення даних в різноманітних
формах
· Інші функції для покращення роботи.
Для розробки програмного забезпечення необхідно
використовувати наступні засоби:
· Гіпертекстовий процесор php версії 5.3 та вище.
· HTTP сервер Apache або аналогічний
сервер.
· Веб браузер (напр. Google Chrome).
· СУБД mysql версії 5.5.
· IDE для взаємодії з mysql (напр.
phpMyAdmin).
Програмно-технічні
засоби
Вимоги до апаратного забезпечення:
· Процесор з частотою не менше 1 GHz
· Оперативна пам’ять 512 Мб
· Клавіатура
Для функціонування даної програми необхідна наявність зі
сторони клієнта наступного:
· ОС.
· Веб браузер (напр. Google Chrome).
Зі сторони сервера:
· ОС лінійки Windows або Linux.
· Гіпертекстовий процесор php версії 5.3 та вище.
· HTTP сервер Apache або аналогічний
сервер.
· СУБД mysql.
АНОТАЦІЯ
Розглянутий програмний продукт призначений для реалізації
покупок через мережу “Інтернет” Він має ряд можливостей для досягнення цієї
цілі.
Можна відмітити наступний ряд особливостей:
· Наявність зручного та зрозумілого інтерфейсу
· Дизайнерське оформлення сайту
· Реалізована можливість реєстрації та
входу під своїм обліковим записом
· Надання різних можливостей різним
групам користувачів
· Наявність пошуку товарів по частині
назви
· Зручна навігація по сайту
· Перегляд даних про товар у зручному
форматі
· Автоматизація редагування даних
· Вивід повідомлень про некоректність
введених даних
· Весь інтерфейс українською
мовою(включаючи повідомлення про помилки)
Програма містить ряд тригерів для автоматичної зміни даних.
Наприклад, підрахунок кількості вдалих та невдалих угод менеджера, який
відбувається після зміни статусу оплати за товар у таблиці замовлень.
Наявні процедури для автоматичного підрахунку рейтингу
менеджера та обнуління його статистики успішності продаж.
В свою чергу присутній інтерфейс для ручної зміни даних для
всіх таблиць.
1. Структура
об’єктів і зв’язків предметної області
Структура бази даних представлена на схемі 1.1. Представлена
у вигляді ER-діаграми.
Схема 1.1 На представленій схемі ER діаграма
2. Опис
структури проекту
Структура проекту зображена на рисунку 2.1
Рисунок 2.1
Для зберігання графічних об’єктів використовується база
даних. Також деякі логотипи зберігаються в окремій папці.
Бізнес логіка розділена на 3 частини: клієнтська,
менеджерська та адміністраторська взаємодія з програмою. Клієнт може
реєструватись, логінитись, шукати товар за частиною його назви, переглядати
інформацію про товар, його ціну і наявність на складі та замовляти товар.
Менеджер може в явному вигляді редагувати такі таблиці як: покупці, предзамовлення,
замовлення, всі інші таблиці він може лише переглядати. Адміністратор може
редагувати наступні таблиці: менеджерів, продуктів, складу, користувачів сайту,
всі інші лише переглядати.
3. Керівництво
користувача
3.1 Основна інформація
Реалізований програмний продукт назначений для замовлення
товарів через Інтернет та обробку замовлень. В зв’язку з цим реалізований
зручний користувацький інтерфейс та наступні можливості:
Для користувача:
· Вивід необхідної інформації про товар у зручному
вигляді.
· Шукати товар за частиною назви. Якщо
знайдено декілька відповідних товарів - то всі вони виводяться на вибір
покупця.
· Реєстрація та вхід в систему для
того, щоб при кожному замовлені повторно не вводити особисту інформацію.
Для менеджерів:
· По натиску на кнопку додати особисту інформацію
користувача з таблиці передзамовлень до таблиці користувачів.
· По натиску на кнопку редагувати
інформацію користувача відповідно до інформація в таблиці передзамовлень.
· По натиску на кнопку перенести запис
із таблиці передзамовлень до таблиці замовлень, причому код менеджера, який
натисніть на кнопку буде автоматично додано в таблицю.
· Автоматично збільшити кількість
вдалих або невдалих угод менеджера при оплаті або відмові від оплати товару
відповідно.
Для адміністратора сайту:
· По натиску на кнопку розрахувати рейтинг менеджера
відповідно до його вдалих та невдалих угод.
· По натиску на кнопку обнулити
статистику угод менеджера.
Також реалізовані перевірки логічних виключних ситуацій
(логін вже зайнятий, відсутній вказаний батьківський ключ в ієрархічній таблиці
і т.д.) і вивід відповідних повідомлень українською мовою.
3.2 Головна сторінка
Зовнішній вид головної сторінки для користувача, який не
увійшов в систему, представлений на рис. 3.2.1.
Рисунок 3.2.1
Дана сторінка містить назву магазину, його логотип форму для
пошуку, форму для логіну, посилання на сторінку реєстрації та список класів і
видів товарів у вигляді гіперпосилань на сторінку з відповідними товарами .
Якщо увійшов адміністратор сайту то головна сторінка прийме
вигляд представлений на рис. 3.2.2
Рисунок 3.2.2
Після натискання на кнопку “Сторінка адміністратора”
відбудеться перехід на сторінку вибору таблиці представленої на рис 3.2.3.
Рисунок 3.2.3
3.3 Сторінка
з таблицею менеджерів
Дана сторінка назначена для перегляду та редагуванню
інформації про менеджерів.
Зовнішній вид сторінки представлений на рис 3.3.1.
Рисунок 3.3.1
Для додавання нового менеджера достатньо натиснути на кнопку
“Додати рядок” після чого з’явиться форма в яку необхідно ввести логін, пароль,
та прізвище менеджера. Логін та пароль будуть зберігатись у таблиці
користувачів, а фамілія попаде в таблицю менеджерів. При натиску на кнопку
“Редагувати” значення в полях відповідного рядка можна буде змінювати. Після
натиску на кнопку “Підтвердити” інформація в базі буде оновлена. Для видалення
відповідного рядку достатньо натиснути на кнопку “Видалити”. Для розрахунку
рейтингу усіх менеджерів треба натиснути на кнопку “Розрахувати рейтинг”. Для
обнуління статистики вдалих та невдалих угод натиснути на кнопку “Обнулити
рейтинг”.
3.4 Сторінка
з таблицею товарів
Дана сторінка представлена на рис. 3.4.1. Вона містить поле з
картинкою товару та поля з прокруткою для перегляду значних за об’ємом
текстових даних.
Рисунок 3.4.1
Присутня кнопка “Додати на склад”, після натиску на яку товар
буде автоматично занесений в таблицю складу. При додаванні нового рядка
адміністратору відкривається форма представлена на рис. 3.4.2.
Рисунок 3.4.2
На цій формі присутнє поле по натиску на яке відкривається
діалогове вікно для вибору файлу - картинки на диску, яка буде завантажена на
сервер.
3.5 Сторінка
з таблицею складу
Дана сторінка представлена на рис. 3.5.1 Вона містить кнопки
редагування та видалення. Кнопка додавання записів відсутня, оскільки воно
відбувається автоматично з таблиці товарів.
Рисунок 3.5.1
3.6 Сторінка
користувачів сайту
Дана сторінка представлена на рис. 3.6.1. Вона не відображає
паролі користувачів, для запобігання несанкціонованого доступу до облікового
запису. Кнопки редагування та додавання записів також відсутні, так як ці
процеси відбуваються автоматично при реєстрації. Адміністратор сайту має
можливість лише видалити обліковий запис користувача.
Рисунок 3.6.1
3.7 Сторінка
покупців
Зовнішній вигляд сторінки представлений на рис. 3.7.1.
Менеджер має можливість додавати, редагувати та видаляти записи.
3.8 Сторінка
попередніх замовлень
Вигляд сторінки представлений на рис. 3.8.1 Вона містить крім
стандартних кнопок редагування, ще кнопки “Додати до покупців”,“Редагувати
покупця” та “Додати до замовлень”.
Рисунок 3.7.1
Рисунок 3.8.1
Кнопка “Додати до покупців” доступна, якщо відсутній код
покупця, тобто інформації про покупця немає у відповідній таблиці. Після
натиску на неї особисті дані будуть передані в таблицю покупців, де створиться
новий запис.
Кнопка “Редагувати покупця” служить для того щоб редагувати
дані покупця у відповідній таблиці, опираючись на інформацію з попереднього
замовлення.
Кнопка “Додати до замовлень” переносить необхідну інформацію
у таблицю замовлень, включаючи код менеджера, який натиснув на кнопку та
видаляє запис із попередніх замовлень.
3.9 Сторінка
замовлень
Дана сторінка містить інформацію про замовлення та кнопки
редагування і видалення записів. Вона представлена на рис 3.9.1
Рисунок 3.9.1
В цій таблиці також відображається ціна замовлення, яка
розраховується як ціна товару помножена на замовлену кількість. Перед тим як
змінити статус оплати, необхідно вказати, що товар відправлений, ввівши у
відповідне поле 1. Статус оплати може бути або “credit”, або “cash”, або
“canceled”. При введенні одного з двох перших значень, кількість успішних угод
менеджера автоматично збільшується, а останнього - кількість невдалих угод.
3.10 Сторінка
зі списком товарів для покупки
Дана сторінка представлена на рис. 3.10.1.
Рисунок 3.10.1
Вона містить список товарів у зручній для покупця формі, де
вказані код товару, назва, картинка, короткий опис, наявність на складі та
ціна. У лівій частині відображений список фірм, по натиску на якусь із них
відбудеться фільтрований по цій фірмі вивід товарів. Також присутня кнопка
купити, після натиску на яку відкривається сторінка з формою для введення
особистих даних користувача, яка представлена на рис. 3.10.2.
Рисунок 3.10.2
Якщо користувач був залогінений в систему - то його дані
автоматично будуть занесені в цю форму і він може при бажанні редагувати їх чи
просто підтвердити. Після чого виведеться відповідне повідомлення про успішну
покупку товару. Якщо ж покупець натиснув не на кнопку купити, а на
гіперпосилання у вигляді назви товару - то йому відкриється сторінка з
детальною інформацією про товар.
3.11 Сторінка
з інформацією про товар
Дана сторінка представлена на рис. 3.11.1. Вона додатково
містить блок для виводу додаткових даних про товар, таку як повний опис або
характеристику товару, та кнопки для вибору яку саме інформацію виводити.
Рисунок 3.11.1
4.
Код MySQL
//#Створення бази даних інтернет магазину.
//#Створення бази даних інтернет магазину.DATABASE
internet_shop DEFAULT CHARACTER SET utf8 utf8_general_ci;
//#Створення користувачів різних типів магазину.USER
'shop_admin'@'%' IDENTIFIED BY 'administrator';USER 'guest'@'%' IDENTIFIED BY
'g';USER 'user'@'%' IDENTIFIED BY 'u';USER 'maneger'@'%' IDENTIFIED BY 'm';
//#Надання користувачам прав на базу даних інтернет
магазину.ALL PRIVILEGES ON internet_shop.* TO 'shop_admin'@'%' GRANT
OPTION;INSERT,SELECT ON internet_shop.user TO 'guest'@'%';INSERT,SELECT ON
internet_shop.customer TO 'guest'@'%';SELECT ON internet_shop.product TO
'guest'@'%';SELECT ON internet_shop.storage_item TO 'guest'@'%';INSERT ON
internet_shop.preorder TO 'guest'@'%';SELECT ON internet_shop.user TO 'user'@'%';INSERT
ON internet_shop.preorder TO 'user'@'%';SELECT ON internet_shop.customer TO
'user'@'%';SELECT ON internet_shop.storage_item TO 'user'@'%';SELECT ON
internet_shop.product TO 'user'@'%';SELECT ON internet_shop.product TO
'maneger'@'%';SELECT ON internet_shop.storage_item TO 'maneger'@'%';SELECT ON
internet_shop.maneger TO 'maneger'@'%';SELECT,INSERT,UPDATE,DELETE ON
internet_shop.customer 'maneger'@'%';SELECT,INSERT,UPDATE,DELETE ON
internet_shop.order TO
'maneger'@'%';SELECT,INSERT,UPDATE,DELETE ON
internet_shop.preorder 'maneger'@'%';EXECUTE ON *.* TO 'maneger'@'%';
//#Створення таблиці покупцівTABLE internet_shop.customer
(_id INT(5) AUTO_INCREMENT,VARCHAR(50) CHARACTER SET utf8 COLLATE _general_ci
NOT NULL,
`name` VARCHAR(50) CHARACTER SET utf8 COLLATE _general_ci NOT
NULL,_phone VARCHAR(20) CHARACTER SET utf8 COLLATE _general_ci NOT
NULL,VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci
NULL,KEY(customer_id)
) ENGINE = INNODB CHARACTER SET utf8 COLLATE _general_ci;
//#Створення індексу для таблиці покупців на поле прізвище
покупця.INDEX cus_fullname_index ON _shop.customer(lastname,`name`);
//#Створення таблиці менеджерівTABLE internet_shop.maneger
(_id INT(5) AUTO_INCREMENT,VARCHAR(50) CHARACTER SET utf8 COLLATE _general_ci
NOT NULL,_orders INT(5) DEFAULT 0,_orders INT(5) DEFAULT 0,INT(3) DEFAULT
0,KEY(maneger_id)
) ENGINE = INNODB CHARACTER SET utf8 COLLATE _general_ci;
//#Створення таблиці товарів. Ієрархічна таблиця, де
первинний батько
клас товару, далі вид товару, фірма виробник і кінцевий
нащодок -
назва самого товару.
//#Наприклад: Комп'ютери - ноутбуки - Asus - Eee PC
1011PX-W.TABLE internet_shop.product(_id INT(5) AUTO_INCREMENT,_id
INT(5),VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci
NULL,BLOB,_description TINYTEXT CHARACTER SET utf8 COLLATE
_general_ci,_description TEXT CHARACTER SET utf8 COLLATE _general_ci,TEXT
CHARACTER SET utf8 COLLATE utf8_general_ci,KEY(product_id)
) ENGINE = INNODB CHARACTER SET utf8 COLLATE _general_ci;
//#Створення індексу для таблиці товарів на поле назву
товару.INDEX product_title_index ON internet_shop.product(title);
//#Створення таблиці складу для збереження товарів на складі
та їх
кількостіTABLE internet_shop.storage_item(_item_id INT(5)
AUTO_INCREMENT,_id INT(5),_date DATE,_number
int(3),FLOAT,KEY(storage_item_id),KEY (product_id) REFERENCES
_shop.product(product_id)
) ENGINE = INNODB CHARACTER SET utf8 COLLATE _general_ci;
//#Таблиця попередніх замовленьTABLE
internet_shop.preorder(_id INT(5) AUTO_INCREMENT,_id INT(5),VARCHAR(50)
CHARACTER SET utf8 COLLATE _general_ci NOT NULL,
`name` VARCHAR(50) CHARACTER SET utf8 COLLATE _general_ci NOT
NULL,_phone VARCHAR(20) CHARACTER SET utf8 COLLATE _general_ci NOT
NULL,VARCHAR(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL,_item_id
INT(5),_number INT(5) DEFAULT 1,KEY(preorder_id),KEY (storage_item_id)
REFERENCES _shop.storage_item(storage_item_id)
) ENGINE = INNODB CHARACTER SET utf8 COLLATE _general_ci;
//#Таблиця замовлень.TABLE internet_shop.order(_id INT(5)
AUTO_INCREMENT,_item_id INT(5),_id INT(5),_id INT(5),TINYINT(1) DEFAULT
0,_number INT(5) DEFAULT 1,VARCHAR(8) CHARACTER SET utf8 COLLATE
_general_ci,FLOAT,KEY(order_id),KEY (storage_item_id) REFERENCES
_shop.storage_item(storage_item_id),KEY (maneger_id) REFERENCES
_shop.maneger(maneger_id),KEY (customer_id) REFERENCES
_shop.customer(customer_id)
) ENGINE = INNODB CHARACTER SET utf8 COLLATE _general_ci;
//#Таблиця логінів та паролей користувачівTABLE
internet_shop.user(_id INT(5),VARCHAR(50) CHARACTER SET utf8 COLLATE
utf8_general_ci NULL,VARCHAR(50) CHARACTER SET utf8 COLLATE _general_ci NOT
NULL,VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_general_ci NULL
) ENGINE = INNODB CHARACTER SET utf8 COLLATE _general_ci;
#Процедура для наступної функції (динамічні твердження не
дозволяються у функціях та триггерах).PROCEDURE(IN login_var
VARCHAR(50), OUT )
#Функція для перевірки наявності запису з вказаним логіном в
таблиці
користувачів//FUNCTION internet_shop.check_login(login_var
(50)) RETURNS TINYINT(1)existence TINYINT(1);@login_var = login_var;@s =
'SELECT customer_id INTO ? WHERE EXIST(SELECT user_id internet_shop.user WHERE
login=?)';stmt FROM @s;stmt USING @existence,@login_var;existence =
@existence;existence;//;
//#Процедура додавання нового менеджера з обробкою виключення
щодо пустого поля іменіPROCEDURE
internet_shop.add_maneger;//PROCEDURE internet_shop.add_maneger(IN name
(50))EXIT HANDLER FOR SQLEXCEPTION@message = 'Пусте поле імені!';;INTO
internet_shop.maneger(fullname) VALUES (name);@message = 'Процедура виконалась
успішно.';//;
internet_shop.add_maneger(NULL);@message;
//#Процедура для реалізації наступного тригеру для INSERT та
.PROCEDURE internet_shop.father_field_procedure;//PROCEDURE
internet_shop.father_field_procedure(IN _father_id INT(5))some_product_number
INT(5);no_parrent CONDITION FOR SQLSTATE '23000';existence TINYINT(1) DEFAULT
0;id INT(5);done INT DEFAULT 0;ids CURSOR FOR SELECT product_id FROM
_shop.product;CONTINUE HANDLER FOR SQLSTATE '02000' SET done =
;EXIT HANDLER FOR no_parrentSQLSTATE '42000' SET MESSAGE_TEXT
= 'Відсутній клас
товару з вказаним кодом!';
;new_father_id != 0 THENids;ids INTO id;id = new_father_id
THENexistence = 1;IF;done END REPEAT;ids;existence = 1;IF;existence = 0
THENno_parrent;IF;//;
#//Тринер для перевірки батьківського поля у таблиці товарів,
при
додаванні чи зміні записуTRIGGER
internet_shop.father_field_trigger;
DELIMITER //TRIGGER internet_shop.father_field_trigger_ins
BEFORE ON internet_shop.productEACH ROWinternet_shop.father_field_procedure(new.father_id);//;//TRIGGER
internet_shop.father_field_trigger_upd BEFORE UPDATE ON
internet_shop.productEACH
ROWinternet_shop.father_field_procedure(new.father_id);//;
INTO internet_shop.product(father_id,title)
values(15,'asdfg');* FROM log;
#Тригер для перевірки правильного встановлення віх значень в
полях таблиці замовлень до оновлення
#ISNULL(var) ~ var IS NULLINTO
internet_shop.orders(storage_item_id,maneger_id,customer_id,sent,price)
VALUES(1,1,1,1,30);INTO
internet_shop.orders(storage_item_id,customer_id,sent,price)
VALUES(2,2,2,10);internet_shop.orders SET payment = 'cash' WHERE order_id =
1;internet_shop.orders SET payment = 'canceled' WHERE order_id =
2;internet_shop.orders SET price = 40, maneger_id = 2 WHERE order_id =
2;TRIGGER internet_shop.check_order_trigger;
//TRIGGER internet_shop.check_order_trigger BEFORE UPDATE ON
internet_shop.orderEACH ROWcorrect INT(2) DEFAULT
0;STRCMP(new.payment,old.payment) != 0 THENISNULL(old.order_id) THENcorrect = 1;ISNULL(old.storage_item_id)
THENcorrect = 2;ISNULL(old.maneger_id) THENcorrect = 3;ISNULL(old.customer_id)
THENcorrect = 4;ISNULL(old.sent) AND old.sent=0 THENcorrect =
5;ISNULL(old.product_number) AND old.product_number<1 THENcorrect =
6;ISNULL(old.price) AND old.price<1 THENcorrect = 7;IF;correct1 THEN SIGNAL
SQLSTATE '42000' SET MESSAGE_TEXT = 'Введіть дані в поле коду корзини
покупця!';2 THEN SIGNAL SQLSTATE '42000' SET MESSAGE_TEXT = 'Введіть дані в
поле коду товару!';3 THEN SIGNAL SQLSTATE '42000' SET MESSAGE_TEXT = 'Введіть
дані в поле коду менеджера!';4 THEN SIGNAL SQLSTATE '42000' SET MESSAGE_TEXT =
'Введіть дані в поле коду покупця!';5 THEN SIGNAL SQLSTATE '42000' SET
MESSAGE_TEXT = 'Для встановлення оплати товар має дути надісланим!';6 THEN SIGNAL
SQLSTATE '42000' SET MESSAGE_TEXT = 'Введіть кількість товарів, яка має бути
більшою за 1!';7 THEN SIGNAL SQLSTATE '42000' SET MESSAGE_TEXT = 'Введіть
коректну ціну!';SET @message="Оновлення інформації виконалось
успішно.";CASE;IF;//;
#Тригер для підвищення кількості вдалих або ні угод менеджера
та зменшення кількості товарів на складі після покупкиTRIGGER
internet_shop.maneger_deals_trigger;
//TRIGGER internet_shop.maneger_deals_trigger AFTER UPDATE ON
internet_shop.orderEACH ROWcorrect TINYINT(1) DEFAULT 0;new.payment IS NOT NULL
THENSTRCMP(new.payment,'cash') = 0 OR STRCMP(new.payment,'credit') = 0
THENinternet_shop.maneger SET succes_orders = succes_orders + 1 WHERE
maneger_id=new.maneger_id;internet_shop.storage_item SET
product_number=new.product_number WHERE
storage_item_id=new.storage_item_id;STRCMP(new.payment,'canceled') = 0
THENinternet_shop.maneger SET canceled_orders = canceled_orders + 1 WHERE
maneger_id=new.maneger_id;correct = 1;IF;IF;correct = 1 THEN@message = 'Введене
значення в поле платні некоректне!';IF;//;
#Тригер для розрахування вартості товаруTRIGGER
internet_shop.price_count;
//TRIGGER internet_shop.price_count BEFORE INSERT ON
internet_shop.orderEACH ROWprice_var INT(5);product_number_var INT(5);price,
product_number INTO price_var, product_number_var FROM
internet_shop.storage_item WHERE storage_item_id =
new.storage_item_id;new.price = price_var*product_number_var;
//;
#Процедура для автоматичного додавання користувача.PROCEDURE
internet_shop.auto_add_customer;
//PROCEDURE internet_shop.auto_add_customer(IN lastname_var
VARCHAR(50), IN name_var VARCHAR(50), IN contact_phone_var INT(10), adress_var
VARCHAR(50))@s = 'INSERT INTO
internet_shop.customer(lastname,`name`,contact_phone,adress)
values(?,?,?,?)';stmt FROM @s;@lastname_var = lastname_var;@name_var =
name_var;@contact_phone_var = contact_phone_var;@adress_var = adress_var;stmt
USING @lastname_var,@name_var,@contact_phone_var,@adress_var;//;
internet_shop.auto_add_customer('Івічук','Семен','вул. Артема
7 кв.15',0445456784);
#Процедура для автоматичного оновлення даних
користувача.PROCEDURE internet_shop.auto_update_customer;
//PROCEDURE internet_shop.auto_update_customer(IN
customer_id_var INT(5),IN lastname_var VARCHAR(50), IN name_var VARCHAR(50), IN
contact_phone_var INT(10), adress_var VARCHAR(50))@s = 'UPDATE
internet_shop.customer SET lastname = ?,`name`=?,contact_phone = ?,adress = ?
WHERE customer_id = ?';stmt FROM @s;@lastname_var = lastname_var;@name_var =
name_var;@contact_phone_var = contact_phone_var;@adress_var =
adress_var;@customer_id_var = customer_id_var;stmt USING
@lastname_var,@name_var,@contact_phone_var,@adress_var,@customer_id_var;//;
internet_shop.auto_update_customer(2,'Smith','John',888888,'work');
#Процедура для автоматичного додавання замовлень.PROCEDURE
internet_shop.auto_add_order;
DELIMITER //PROCEDURE internet_shop.auto_add_order(IN
maneger_id_var INT(5),IN customer_id_var INT(5), IN storage_item_id_var INT(5),
IN product_number_var INT(5))@s = 'INSERT INTO
internet_shop.order(maneger_id,customer_id, storage_item_id,product_number)
values(?,?,?,?)';stmt FROM @s;@maneger_id_var = maneger_id_var;@customer_id_var
= customer_id_var;@storage_item_id_var =
storage_item_id_var;@product_number_var = product_number_var;stmt USING
@maneger_id_var,@customer_id_var,@storage_item_id_var,@product_number_var;//;
#Функція для підрахунку рейтингу за кількістю вдалих та
невдалих угод.//FUNCTION count_rate(succes INT(5),canceled INT(5),avg_succes
INT(5),avg_canceled INT(5))INT(5)rate INT(5);rate = succes - avg_succes -
canceled + avg_canceled;rate;//;
#Процедура для автоматичного розрахунку рейтингу
менеджера.PROCEDURE internet_shop.auto_maneger_rate;
//PROCEDURE internet_shop.auto_maneger_rate()rate
INT(5);avg_succes INT(5);avg_canceled INT(5);id INT(5);succes INT(5);canceled
INT(5);done INT DEFAULT 0;meneg CURSOR FOR SELECT
maneger_id,2*succes_orders,2*canceled_orders FROM
internet_shop.maneger;CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;@s =
'UPDATE internet_shop.maneger SET rate = ? WHERE maneger_id = ?';stmt FROM
@s;AVG(succes_orders) INTO avg_succes FROM
internet_shop.maneger;AVG(canceled_orders) INTO avg_canceled FROM
internet_shop.maneger;meneg;meneg INTO
id,succes,canceled;count_rate(succes,canceled,avg_succes,avg_canceled) INTO
rate;@rate = rate;@id = id;stmt USING @rate,@id;
done END REPEAT;meneg;//;
internet_shop.auto_maneger_rate();
#Процедура обнулення вдалих та невдалиг угод
менеджера//PROCEDURE internet_shop.auto_null_deals()internet_shop.maneger SET
succes_orders = 0, canceled_orders = 0;//;
internet_shop.auto_null_deals();
5.
Створення резервної копії бази даних
5.1 За допомогою phpmyadmin
Входимо в phpMyAdmin. У вікні, ви побачите свої бази даних.
Натискаємо кнопку «експорт».
У наступному вікні внизу сторінки вибираємо вид архіву,
натискаємо ОК, і вказуємо, куди зберегти архів.
.2 Резервне копіювання бази даних за допомогою плагіна
WordPress Database Backup
Після установки та активації плагіна, в адмінці сайту
відкрийте:
Інструменти - Архівація бази даних і налаштуйте заплановану
архівацію. Резервні копії бази даних будуть приходити на зазначений e-mail.
ВИСНОВОК
Розглянувши можливості створеної програмної одиниці можна
сказати, що вона задовольняє поставленій задачі. В розробленій програмі
присутні наступні можливості:
· Перегляд інформації про товари у зручній формі та
використання пошуку і фільтрів
· Автоматизована обробка запитів від
покупців
· Автоматизоване адміністрування сайту
· Розрахунок рейтингу менеджерів
В програмі присутні тригери, процедури та функції для
автоматизації роботи. Також наявні динамічні SQL і різноманітні виключні
ситуації і їх обробники. Хоча MySQL не містить ієрархічних запитів, проте
присутня ієрархічна таблиця та функції і вибірки, які можуть реалізувати роботу
з даною таблицею в необхідній мірі. Також наявна робота з транзакціями.
Відповідно можна стверджувати, що дана програма в достатній мірі реалізує
можливість замовлення товарів та обробку замовлень через мережу “Інтернет”.
база даний інтернет магазин
ВИКОРИСТАНА
ЛІТЕРАТУРА
1. MySQL.
Просто и понятно
2. Все
о PHP, MySQL и не только
. Работа
с БД на PHP
. Базы
данных: MySQL
. Все
прo SQL базы данных
ДОДАТОК
Сторінки
рhp програми де використовуються SQL запити
login.php
<?php_once 'users.php';_start();
$user = $_SESSION['user'];
$user->db_connect();
$login = $_POST['login'];
$password = $_POST['password'];(!strlen($login))
$head = "location:
Index.php?log_err=empty_login";if(!strlen($password))
$head = "location: Index.php?log_err=empty_password";
{
$sql = "SELECT user_id,status FROM user WHERE
login='".$login."' AND password='".$password."'";
$result = mysql_query($sql);(!@mysql_num_rows($result))
$head = "location:
Index.php?log_err=user_not_exist";
{
$user_data =
mysql_fetch_array($result);(!strcmp($user_data['status'],'user'))
$user = new
defined_user($login,$password,$user_data['user_id']);if(!strcmp($user_data['status'],'maneger'))
$user = new
maneger($login,$password,$user_data['user_id']);if(!strcmp($user_data['status'],'admin'))
$user = new admin($login,$password,$user_data['user_id']);
$_SESSION['user'] = $user;
$_SESSION['status'] = $user_data['status'];
$head = "location: Index.php";
}
}_close();($head);
?>.php
<?php
$firm_id; #Глобальна змінна - код фірми
#Абстрактний клас від якого начлідуються всі види
користувачівclass users
{function db_connect(); #Функція для під'єднання до субд
mysqlfunction greeting($log_err); #Функція яка виводить привітання або форму
для залогінення
#Визначає назву та код усіх класів і видів
товарівproduct_types(&$product_classes_id,&$product_classes_num,&$product_classes,&$product_types_num)
{
$this->db_connect();
$sql_class = "select product_id,title from product where
father_id=0";
$res_class = mysql_query($sql_class);
$product_classes_num =
mysql_num_rows($res_class);($i=0;$i<$product_classes_num;$i++)
{
$j = 0;
$fetch = mysql_fetch_array($res_class);
$product_classes[$i][$j] = $fetch['title'];
$product_classes_id[$i][$j] = $fetch['product_id'];
$sql_types = "select product_id,title from product where
father_id=".$product_classes_id[$i][$j];
$res_types = mysql_query($sql_types);
$product_types_num[$i] = mysql_num_rows($res_types);($j <
$product_types_num[$i])
{
$j++;
$fetch = mysql_fetch_array($res_types);
$product_classes[$i][$j] = $fetch['title'];
$product_classes_id[$i][$j] = $fetch['product_id'];
}
}
}
#Виводить класи і види товарівout_product_types()
{
$this->product_types($product_classes_id,$product_classes_num,$product_classes,$product_types_num);"<tr>";($i=0;$i<$product_classes_num;$i++)
{(($i+1 % 4) ==
0)"</tr><tr>";"<td valign='top'
align='left'>";"<b><u>".$product_classes[$i][0]."</u></b>";($j=1;$j<=$product_types_num[$i];$j++)
{"<br><a>
}"</td>";
}"</tr>";
}
#Визначає назви і коди фірм певного виду
товарівfirms($product_type_id,&$firm_title,&$firm_id)
{
$this->db_connect();
$sql = "SELECT title,product_id FROM product WHERE father_id=".$product_type_id;
$result = mysql_query($sql);($i =
0;$i<mysql_num_rows($result);$i++)
{
$firm_inf = mysql_fetch_array($result);
$firm_title[$i] = $firm_inf['title'];
$firm_id[$i] = $firm_inf['product_id'];
}
}
#Виводить назви фірм як гіперпосилання з їх
кодамиout_firms($product_type_id)
{$firm_id;
$this->firms($product_type_id,$firm_title,$firm_id);
$number_of_firms =
count($firm_id);($i=0;$i<$number_of_firms;$i++)
{"<a>
}
}
#Виводить список продуктів у зручному для користувача
вигляді(Назва, код, картинка, короткий опис, ціна, наявність на
складі)out_product_list($product_type_id,$firm_id)
{($_GET['firm_id'])
$firm_id = array($_GET['firm_id']);$firm_id;
$this->db_connect();
$number_of_firms =
count($firm_id);($i=0;$i<$number_of_firms;$i++)
{
$sql = "SELECT product_id,title,small_description FROM
product WHERE father_id=".$firm_id[$i];
$result = mysql_query($sql);($j=0;$j<mysql_num_rows($result);$j++)
{
$product = mysql_fetch_array($result);
$product_id = $product['product_id'];
$title = $product['title'];
$result1 = mysql_query("SELECT price FROM storage_item
WHERE product_id=".$product_id);(@mysql_num_rows($result1))
{
$storage_item = mysql_fetch_array($result1);
$price = $storage_item['price'];
$availability = "Є в наявності";
}
$availability = "Немає в наявності";"<tr><td
rowspan='6' valign='top'><img heigth='256'
src=image.php?product_id=".$product_id."></td>";"<td><a>
{"<tr><td>
}"<tr><td><br><br></td></tr><tr><td><br><br></td></tr>";
}
}
}
#Функція для знаходження та виводу товарів по слову
пошукуfind($find_str)
{
$this->db_connect();
$sql = "SELECT product_id,title,small_description FROM
product WHERE title LIKE '%".$find_str."%' AND small_description IS
NOT NULL";
$result = mysql_query($sql);(@mysql_num_rows($result))
{($j=0;$j<mysql_num_rows($result);$j++)
{
$product = mysql_fetch_array($result);
$product_id = $product['product_id'];
$title = $product['title'];
$small_description = $product['small_description'];
$result1 = mysql_query("SELECT price FROM storage_item
WHERE product_id=".$product_id);(@mysql_num_rows($result1))
{
$storage_item = mysql_fetch_array($result1);
$price = $storage_item['price'];
$availability = "Є в наявності";
}
$availability = "Немає в
наявності";"<tr><td rowspan='6' valign='top'><img
heigth='256'
src=image.php?product_id=".$product_id."></td>";"<td><a>
{"<tr><td>
}"<tr><td><br><br></td></tr><tr><td><br><br></td></tr>";
}
}"<p>
}
}
#Незалогінений користувачguest extends users
{db_connect()
{_connect('localhost','guest','g');_select_db('internet_shop');_query("SET
NAMES 'utf8'");
}
#Блок для логіну та реєстрації і вивід повідомлень про
некоректність введених данихgreeting($log_err)
{_once
'login_block.txt';(!strcmp($log_err,'empty_login'))"<font>
}
}
#Користувач залогінений як покупецьdefined_user extends users
{$login;$password;$id;db_connect()
{_connect('localhost','user','u');_select_db('internet_shop');_query("SET
NAMES 'utf8'");
}defined_user($login,$password,$id)
{
$this->login = $login;
$this->password = $password;
$this->id = $id;
}greeting($log_err)
{"<div>
}
}
#Користувач залогінений як менеджерmaneger extends users
{$login;$password;$id;db_connect()
{_connect('localhost','maneger','m');_select_db('internet_shop');_query("SET
NAMES 'utf8'");
}maneger($login,$password,$id)
{
$this->login = $login;
$this->password = $password;
$this->id = $id;
}greeting($log_err)
{"<div>
}
}
#Користувач залогінений як адміністраторadmin extends users
{$login;$password;$id;db_connect()
{_connect('localhost','shop_admin','administrator');_select_db('internet_shop');_query("SET
NAMES 'utf8'");
}admin($login,$password,$id)
{
$this->login = $login;
$this->password = $password;
$this->id = $id;
}greeting($log_err)
{"<div>
}
}
#Клас для перевірки коректності введених данихcheck
{
#Перевірка введених даних для таблиці
покупцівcustomer_check($lastname,$name,$contact_phone,$adress)
{(!strlen($lastname))"Введіть фамілію";if(!strlen($name))"Введіть
ім'я";if(strlen($contact_phone) != 10
||!is_numeric($contact_phone))"Невірно вказаний номер телефону(10
цифр)";if(!strlen($adress))"Введіть адресу";"";
}
#Перевірка введених даних для таблиці
менеджерівmaneger_check($fullname,$succes_orders,$canceled_orders)
{(!strlen($fullname))"Введіть повне
ім'я";if(!strlen($succes_orders) ||
!is_numeric($succes_orders))"Некоректно вказана або не вказана кількість
вдалих угод";if(!strlen($canceled_orders) ||
!is_numeric($canceled_orders))"Некоректно вказана або не вказана кількість
невдалих угод";
}
#Перевірка введених даних для таблиці
продуктівproduct_check($title)
{(!strlen($title))"Введыть назву";
}
#Перевірка введених даних для таблиці
складуstorage_item_check($product_id,$arrival_date,$product_number,$price)
{(!strlen($product_id) ||
!is_numeric($product_id))"Введіть коректний номер
продукту";if(!strlen($arrival_date))"Введіть
дату";if(!strlen($product_number) ||
!is_numeric($product_number))"Невірно вказана кількість товарів";if(!strlen($price)
|| !is_numeric($price))"Невірно вказана ціна";"";
}
#Перевірка введених даних для таблиці
передзамовленьpreorder_check($lastname,$name,$contact_phone,$adress,$storage_item_id,$product_number)
{(!strlen($lastname))"Введіть
прізвище";if(!strlen($name))"Введіть
ім'я";if(strlen($contact_phone) != 10 ||
!is_numeric($contact_phone))"Введіть коректний номер телефону(10
цифр)";if(!strlen($adress))"Введіть
адресу";if(!strlen($storage_item_id) ||
!is_numeric($storage_item_id))"Введіть коректний код товару на складі";if(!strlen($product_number)
|| !is_numeric($product_number))"Введіть коректну кількість замовленої
продукції";"";
}
}
?>.php
<?php_once
'users.php';_start();($_GET['auto_maneger_rate'] == 1)
{
$user = $_SESSION['user'];
$user->db_connect();
$sql = "CALL
internet_shop.auto_maneger_rate();";_query($sql);("location:
maneger.php");
}if($_GET['auto_maneger_rate'] == 2)
{
$user = $_SESSION['user'];
$user->db_connect();
$sql = "CALL
internet_shop.auto_null_deals();";_query($sql);
$sql = "CALL internet_shop.auto_maneger_rate();";_query($sql);("location:
maneger.php");
}
?>
<script language="javascript">cancel_edit()
{table =
document.getElementById("table");.innerHTML = "";
}addRowForm()
{add_table = document.getElementById("table");head
= "<tr><td>Логін</td><td>Пароль</td><td>Повне
ім'я</td></tr>";data_input = "<form
action='add_row.php' method='post'><tr>";_input = data_input +
"<td><input type='text' name='login'></td>";_input
= data_input + "<td><input type='password'
name='password'></td>";_input = data_input +
"<td><input type='text'
name='fullname'></td>";_input = data_input +
"</tr>";_input = data_input +
"<tr><td><input type = 'submit'>
}submit_editing(i)
{cur_element;_element =
document.getElementsByName("maneger_id"+i);maneger_id =
cur_element[0].value;_element = document.getElementsByName("fullname"+i);fullname
= cur_element[0].value;_element =
document.getElementsByName("succes_orders"+i);succes_orders =
cur_element[0].value;_element =
document.getElementsByName("canceled_orders"+i);canceled_orders =
cur_element[0].value;.location.href =
"edit_table.php?maneger_id="+maneger_id+"&fullname="+fullname+"&succes_orders="+succes_orders+"&canceled_orders="+canceled_orders;
}edit(i)
{cur_element;_element =
document.getElementsByName("fullname"+i);_element[0].removeAttribute("readonly");_element
=
document.getElementsByName("succes_orders"+i);_element[0].removeAttribute("readonly");_element
=
document.getElementsByName("canceled_orders"+i);_element[0].removeAttribute("readonly");commit_button;_button
= document.createElement("input");_button.setAttribute("type",
"button");_button.setAttribute("class", "button_color
button_text");_button.setAttribute("name","maneger_edit");_button.setAttribute("value","Підтвердити");_button.setAttribute("onClick","submit_editing("+i+");");edit_button
=
document.getElementsByName("edit"+i)[0];_button.parentNode.replaceChild(commit_button,edit_button);cancel_button
=
document.createElement("input");_button.setAttribute("type",
"button");_button.setAttribute("class", "button_color
button_text");_button.setAttribute("value","Відміна");_button.setAttribute("onClick","window.location.href='maneger.php'");delete_button
= edit_button =
document.getElementsByName("delete"+i)[0];_button.parentNode.replaceChild(cancel_button,delete_button);
}deleting(i)
{cur_element;_element =
document.getElementsByName("maneger_id"+i);maneger_id =
cur_element[0].value;.location.href =
"delete_row.php?maneger_id="+maneger_id;
}
</script>
<?php_once 'site_top.txt';
$_SESSION['user']->greeting($_GET['log_err']);($_GET['error'])"<u><p
align=center><font>
?>
<html>
<head>
</head>
<body>
<meta content="text/html"
charset="utf-8">
<link rel="stylesheet"
href="styles.css" type="text/css">
<div>
<div>
<div>
<table border="1">
<tr
align="center"><td>Код</td><td>Повне
ім'я</td><td>Успішні угоди</td><td>Скасовіні
угоди</td><td>Рейтинг</td></tr>
<?php
$user = $_SESSION['user'];
$user->db_connect();
$sql = "SELECT * FROM maneger";
$result =
mysql_query($sql);($i=1;$i<=mysql_num_rows($result);$i++)
{
$row =
mysql_fetch_array($result);"<tr><td>";"<input
type='text' readonly name='maneger_id".$i."'
value='".$row['maneger_id']."'>";"</td><td>";"<input
type='text' readonly name='fullname".$i."'
value='".$row['fullname']."'>";"</td><td>";"<input
type='text' readonly name='succes_orders".$i."' value='".$row['succes_orders']."'>";"</td><td>";"<input
type='text' readonly name='canceled_orders".$i."'
value='".$row['canceled_orders']."'>";"</td><td>";"<input
type='text' readonly name='rates".$i."'
value='".$row['rate']."'>";(!strcmp($_SESSION['status'],'admin'))
{"</td><td>";"<input
type=button>
}"</td></tr>";
}_close();
?>
</table>
<?php(!strcmp($_SESSION['status'],'admin'))
{"<br>";"<table><tr>";"<td><input
type='button'>
}
?>
</div>
<?php_once 'site_bottom.txt';
?>
</div>
</body>
</html>_item.php
<?php_once 'users.php';_start();($_GET['product_id'])
{
$user = $_SESSION['user'];
$user->db_connect();
$sql = "INSERT INTO storage_item(product_id)
VALUES(".$_GET['product_id'].")";_query($sql);("location:
storage_item.php");
}
?>
<script language="javascript">cancel_edit()
{table =
document.getElementById("table");.innerHTML = "";
}submit_editing(i)
{cur_element;_element =
document.getElementsByName("storage_item_id"+i);storage_item_id =
cur_element[0].value;_element =
document.getElementsByName("product_id"+i);product_id =
cur_element[0].value;_element = document.getElementsByName("arrival_date"+i);arrival_date
= cur_element[0].value;_element =
document.getElementsByName("product_number"+i);product_number =
cur_element[0].value;_element =
document.getElementsByName("price"+i);price =
cur_element[0].value;.location.href = "edit_table.php?storage_item_id="+storage_item_id+"&product_id="+product_id+"&arrival_date="+arrival_date+"&product_number="+product_number+"&price="+price;
}edit(i)
{cur_element;_element =
document.getElementsByName("product_id"+i);_element[0].removeAttribute("readonly");_element
= document.getElementsByName("arrival_date"+i);_element[0].removeAttribute("readonly");_element
=
document.getElementsByName("product_number"+i);_element[0].removeAttribute("readonly");_element
= document.getElementsByName("price"+i);_element[0].removeAttribute("readonly");commit_button;_button
=
document.createElement("input");_button.setAttribute("type",
"button");_button.setAttribute("class", "button_color
button_text");_button.setAttribute("name","storage_item_edit");_button.setAttribute("value","Підтвердити");_button.setAttribute("onClick","submit_editing("+i+");");edit_button
=
document.getElementsByName("edit"+i)[0];_button.parentNode.replaceChild(commit_button,edit_button);cancel_button
= document.createElement("input");_button.setAttribute("type",
"button");_button.setAttribute("class", "button_color
button_text");_button.setAttribute("value","Відміна");_button.setAttribute("onClick","window.location.href='storage_item.php'");delete_button
= edit_button = document.getElementsByName("delete"+i)[0];_button.parentNode.replaceChild(cancel_button,delete_button);
}deleting(i)
{cur_element;_element =
document.getElementsByName("storage_item_id"+i);customer_id =
cur_element[0].value;.location.href =
"delete_row.php?storage_item_id="+customer_id;
}
</script>
<?php_once 'site_top.txt';
$_SESSION['user']->greeting($_GET['log_err']);
?>
<html>
<head>
</head>
<body>
<meta content="text/html"
charset="utf-8">
<link rel="stylesheet"
href="styles.css" type="text/css">
<link rel="stylesheet"
href="css/ui-lightness/jquery.ui.datepicker.css"
type="text/css">
<script type='text/javascript'
src='js/jquery.js'></script>
<script type='text/javascript'
src='js/jquery-ui-1.8.16.custom.min.js'></script>
<script type='text/javascript'
src='js/jquery.ui.datepicker-uk.js'></script>
<div>
<div>
<?php($_GET['error'])"<u><p
align=center><font>
?>
<div>
<table border="1">
<tr align="center"><td>Код товару
складу</td><td>Код товару</td><td>Дата
прибуття</td><td>Кількість
товарів</td><td>Ціна</td></tr>
<?php
$user = $_SESSION['user'];
$user->db_connect();
$sql = "SELECT * FROM storage_item";
$result =
mysql_query($sql);($i=1;$i<=mysql_num_rows($result);$i++)
{
$row =
mysql_fetch_array($result);"<tr><td>";"<input
type='text' readonly name='storage_item_id".$i."'
value='".$row['storage_item_id']."'>";"</td><td>";"<input
type='text' readonly name='product_id".$i."'
value='".$row['product_id']."'>";"</td><td>";"<input
id='datepicker' type='text' readonly name='arrival_date".$i."'
value='".$row['arrival_date']."'>";"</td><td>";"<input
type='text' readonly name='product_number".$i."' value='".$row['product_number']."'>";"</td><td>";"<input
type='text' readonly name='price".$i."'
value='".$row['price']."'>";(!strcmp($_SESSION['status'],'admin'))
{"</td><td>";"<input
type=button>
}"</td></tr>";
}_close();
?>
</table>
</div>
<script>
$("#datepicker").datepicker({dateFormat:
'yy-mm-dd'});
</script>
<?php_once 'site_bottom.txt';
?>
</div>
</body>
</html>.php
<?php_once 'users.php';_start();
?>
<script language="javascript">cancel_edit()
{table =
document.getElementById("table");.innerHTML = "";
}addRowForm()
{add_table = document.getElementById("table");head
= "<tr align='center'><td>Код класу
товарів</td><td>Назва</td><td>Картинки</td><td>Короткий
опис</td><td>Повний опис</td><td>Характеристика</td></tr>";data_input
= "<form action='add_row.php' method='post' enctype='multipart/form-data'><tr>";_input
= data_input + "<td><input size='5' type='text'
name='father_id'></td>";_input = data_input +
"<td><input type='text' name='title'></td>";_input
= data_input + "<td><input type='file'
name='picture'></td>";_input = data_input +
"<td><textarea cols='10' rows='10' type='text'
name='small_description'></textarea></td>";_input =
data_input + "<td><textarea cols='15' rows='30' type='text'
name='full_description'></textarea></td>";_input =
data_input + "<td><textarea cols='15' rows='30' type='text'
name='characteristic'></textarea></td>";_input = data_input
+ "</tr>";_input = data_input +
"<tr><td><input type = 'submit'>
}add_to_storage(i)
{cur_element;_element =
document.getElementsByName("product_id"+i);product_id =
cur_element[0].value;.location.href =
"storage_item.php?product_id="+product_id;
}deleting(i)
{cur_element;_element =
document.getElementsByName("product_id"+i);product_id =
cur_element[0].value;.location.href =
"delete_row.php?product_id="+product_id;
}
</script>
<?php_once 'site_top.txt';
$_SESSION['user']->greeting($_GET['log_err']);($_GET['error'])"<u><p
align=center><font>
?>
<html>
<head>
</head>
<body>
<meta content="text/html"
charset="utf-8">
<link rel="stylesheet" href="styles.css"
type="text/css">
<div>
<div>
<div>
<table border="1">
<tr
align="center"><td>Код</td><td>Код класу товару</td><td>Назва</td><td>Картинка</td><td>Короткий
опис</td><td>Повний
опис</td><td>Характеристика</td></tr>
<?php
$user = $_SESSION['user'];
$user->db_connect();
$sql = "SELECT * FROM product";
$result = mysql_query($sql);($i=1;$i<=mysql_num_rows($result);$i++)
{
$row =
mysql_fetch_array($result);"<tr><td>";"<input
type='text' size='5' readonly name='product_id".$i."'
value='".$row['product_id']."'>";"</td><td>";"<input
type='text' size='5' readonly name='father_id".$i."' value='".$row['father_id']."'>";"</td><td>";"<input
type='text' readonly name='title".$i."'
value='".$row['title']."'>";"</td><td>";"<img
src=image.php?product_id=".$row['product_id'].">";"</td><td>";"<textarea
cols='10' rows='5' readonly name='small_description".$i."'>".$row['small_description']."</textarea>";"</td><td>";"<textarea
cols='10' rows='5' readonly
name='full_description".$i."'>".$row['full_description']."</textarea>";"</td><td>";"<textarea
cols='10' rows='5' readonly name='characteristic".$i."'>".$row['characteristic']."</textarea>";(!strcmp($_SESSION['status'],'admin'))
{"</td><td>";"<input
type=button>
}"</td></tr>";
}_close();
?>
</table>
<?php(!strcmp($_SESSION['status'],'admin'))
{"<br>";"<table><tr>";"<td><input
type='button'>
}
?>
</div>
<?php_once 'site_bottom.txt';
?>
</div>
</body>
</html>.php
<?php_once
'users.php';_start();(!isset($_SESSION['status']))
{
$user = new guest;
$_SESSION['user'] = $user;
$_SESSION['status'] = "guest";
}
$user = $_SESSION['user'];
?>
<html>
<head>
</head>
<body>
<meta content="text/html"
charset="utf-8">
<link rel="stylesheet"
href="styles.css" type="text/css">
<div>
<?php_once 'site_top.txt';
$_SESSION['user']->greeting($_GET['log_err']);_once
'menu.txt';
?>
<br>
<table style="padding-left: 10%">
<?php
$id = $_GET['product_id'];
$_SESSION['user']->db_connect();
$sql = "SELECT
title,small_description,full_description,characteristic FROM product WHERE
product_id=".$id;
$result = mysql_query($sql);
$product = mysql_fetch_array($result);
$title = $product['title'];
$small_description = $product['small_description'];
$result1 = mysql_query("SELECT price FROM storage_item
WHERE product_id=".$id);(@mysql_num_rows($result1))
{
$storage_item = mysql_fetch_array($result1);
$price = $storage_item['price'];
$availability = "Є в наявності";
}
$availability = "Немає в
наявності";"<tr><td rowspan='5' valign='top'><img
heigth='256'
src=image.php?product_id=".$id."></td>";"<td><a>
{"<tr><td>
}
?>
</table>
<div>
<?php(isset($_GET['error']))
{"<i><font face='arial' size=+1
color='red'>";($_GET['error'])
{'empty_name':"Введіть ім'я";
break;'empty_lastname':"Введіть прізвище";
break;'empty_phone_number':"Введіть номер телефону";
break;'empty_adress':"Введіть адрес";
break;'incorrect_phone':"Телефонний номер має містити лише 10 цийр";
break;'er':"Покупка не може бути здійснена"; break;0:
$correct = 1; break;:
$correct = 0;
}"</font></i>";
}"<br>";
?>
<form action="reg.php"
method="post">
<font size="4" face="arial">
<?php(!$correct)
{(strcmp($_SESSION['status'], "guest"))
{
$sql ="SELECT lastname,`name`,contact_phone,adress FROM
customer WHERE customer_id=".$user->id;
$result = mysql_query($sql);
$customer = mysql_fetch_array($result);
}"<br>Код товару:<br><input type='text'
readonly value='".$_GET['product_id']."'>
}
{"<p>
}
?>
</font>
</form>
</div>
<?php_once 'site_bottom.txt';
?>
</div>
</body>
</html>_row.php
<?php_once 'users.php';_start();
$user = $_SESSION['user'];
$user->db_connect();($_GET['customer_id'])
{
$sql = "DELETE FROM customer WHERE
customer_id=".$_GET['customer_id'];
$head = "location: customer.php";
}if($_GET['maneger_id'])
{
$sql = "DELETE FROM maneger WHERE
maneger_id=".$_GET['maneger_id'];
$head = "location: maneger.php";
}if($_GET['product_id'])
{
$sql = "DELETE FROM product WHERE
product_id=".$_GET['product_id'];
$head = "location: product.php";
}if($_GET['storage_item_id'])
$sql = "DELETE FROM storage_item WHERE
storage_item_id=".$_GET['storage_item_id'];
$head = "location: storage_item.php";
}if($_GET['preorder_id'])
{
$sql = "DELETE FROM preorder WHERE
preorder_id=".$_GET['preorder_id'];
$head = "location: preorder.php";
}if($_GET['order_id'])
{
$sql = "DELETE FROM internet_shop.order WHERE
order_id=".$_GET['order_id'];
$head = "location: order.php";
}if($_GET['user_id'])
{
$sql = "DELETE FROM internet_shop.user WHERE
user_id=".$_GET['user_id'];
$head = "location: user.php";
}
$result = mysql_query($sql);($head);
?>
_row.php
<?php(isset($_POST['storage_item_id']) &&
isset($_POST['contact_phone']))
{_once 'users.php';
$preorder_id = $_POST['preorder_id'];
$customer_id = $_POST['customer_id'];(!$customer_id)
$customer_id = "NULL";
$lastname = $_POST['lastname'];
$name = $_POST['name'];
$contact_phone = $_POST['contact_phone'];
$adress = $_POST['adress'];
$storage_item_id = $_POST['storage_item_id'];
$product_number = $_POST['product_number'];
$ch = new check();
$error = $ch->preorder_check($lastname, $name,
$contact_phone, $adress, $storage_item_id, $product_number);(strlen($error))
$head = "location:
preorder.php?error=".$error."";
{_start();
$user = $_SESSION['user'];
$user->db_connect();
$sql = "INSERT INTO preorder(customer_id, lastname,
`name`, contact_phone, adress, storage_item_id, product_number)
VALUES(".$customer_id.",'".$lastname."','".$name."','".$contact_phone."','".$adress."',".$storage_item_id.",".$product_number.")";
$result = mysql_query($sql);
$error = mysql_error();(strlen($error))
$head = "location:
preorder.php?error=Товар%20або%20покупець%20з%20вказаним%20кодом%20не%20існують";
$head = "location: preorder.php";
}
}if($_POST['lastname'])
{_once 'users.php';
$lastname = $_POST['lastname'];
$name = $_POST['name'];
$contact_phone = $_POST['contact_phone'];
$adress = $_POST['adress'];
$ch = new check();
$error = $ch->customer_check($lastname, $name,
$contact_phone, $adress);(strlen($error))
{
$head = "location: customer.php?error=".$error;
}
{_start();
$user = $_SESSION['user'];
$user->db_connect();
$sql = "INSERT INTO
customer(lastname,`name`,contact_phone,adress) VALUES
('".$lastname."','".$name."','".$contact_phone."','".$adress."')";
$result = mysql_query($sql);
$head = "location: customer.php";_close();
}
}if($_POST['title'])
{_once 'users.php';_start();
$user = $_SESSION['user'];
$user->db_connect();
$father_id = $_POST['father_id'];(!$father_id)
$father_id = 0;
$title = $_POST['title'];
$small_description = $_POST['small_description'];
$full_description = $_POST['full_description'];
$characteristic = $_POST['characteristic'];(strlen($error))
{
$head = "location: product.php?error=".$error;
}
{(is_uploaded_file($_FILES['picture']['tmp_name']))
{
$f = fopen($_FILES['picture']['tmp_name'], "rb");
$picture = fread($f,
filesize($_FILES['picture']['tmp_name']));($f);
$picture = addslashes($picture);
}
$sql = "INSERT INTO
product(father_id,title,picture,small_description,full_description,characteristic)
VALUES (".$father_id.",'".$title."','$picture','".$small_description."','".$full_description."','".$characteristic."')";
$result = mysql_query($sql);
$error = mysql_error();(strlen($error))
$head = "location: product.php?error=".$error;
$head = "location: product.php";
}_close();
}
{_once 'users.php';
$fullname = $_POST['fullname'];(!strlen($fullname))
$fullname = "NULL";_start();
$user = $_SESSION['user'];
$user->db_connect();
$sql = "CALL
add_maneger(".$fullname.")";_query($sql);
$sql = "SELECT @message AS message";
$result = mysql_query($sql);
$message = mysql_fetch_array($result);(!$message['message'])
{
$sql = "INSERT INTO maneger(fullname) VALUES
('".$fullname."')";
$result = mysql_query($sql);
$sql = "SELECT maneger_id FROM maneger ORDER BY
maneger_id DESC LIMIT 1";
$result = mysql_query($sql);
$id = mysql_fetch_array($result);
$id = $id['maneger_id'];
$sql = "INSERT INTO user(user_id,login,password,status)
VALUES(".$id.",'".$_POST['login']."','".$_POST['password']."','maneger')";_query($sql);
$head = "location: maneger.php";
}
$head = "location:
maneger.php?error=".$message['message'];_close();
}($head)($head);("location: admin_room.php");
?>
_table.php
<?php(isset($_GET['order_id']))
{_once 'users.php';
$order_id = $_GET['order_id'];
$storage_item_id = $_GET['storage_item_id'];
$customer_id = $_GET['customer_id'];
$sent = $_GET['sent'];
$product_number = $_GET['product_number'];
$payment = $_GET['payment'];(strlen($error))
$head = "location:
order.php?error=".$error."";
{_start();
$user = $_SESSION['user'];
$user->db_connect();
$sql = "UPDATE internet_shop.order SET storage_item_id =
".$storage_item_id.", customer_id=".$customer_id.",
sent=".$sent.", product_number=".$product_number.",
payment='".$payment."' WHERE order_id=".$order_id;
$result = mysql_query($sql);(mysql_error())
$head = "location: order.php?error=".mysql_error();
{
$result = mysql_query("SELECT @message AS
message");
$message = mysql_fetch_array($result);
$message = $message['message'];(strlen($message))
$head = "location: order.php?error=".$message;
$head = "location: order.php";
}
}
}if(isset($_GET['preorder_id']))
{_once 'users.php';
$preorder_id = $_GET['preorder_id'];
$customer_id = $_GET['customer_id'];
$lastname = $_GET['lastname'];
$name = $_GET['name'];
$contact_phone = $_GET['contact_phone'];
$adress = $_GET['adress'];
$storage_item_id = $_GET['storage_item_id'];
$product_number = $_GET['product_number'];
$ch = new check();
$error = $ch->preorder_check($lastname, $name,
$contact_phone, $adress, $storage_item_id, $product_number);(strlen($error))
$head = "location:
preorder.php?error=".$error."";
{_start();
$user = $_SESSION['user'];
$user->db_connect();
$sql = "UPDATE preorder SET
customer_id=".$customer_id.", lastname='".$lastname."',
`name`='".$name."', contact_phone='".$contact_phone."',
adress='".$adress."', storage_item_id =
".$storage_item_id.", product_number=".$product_number."
WHERE preorder_id=".$preorder_id;
$result = mysql_query($sql);(mysql_error())
$head = "location:
preorder.php?error=Відсутній%20товар%20або%20покупець%20із%20вказаним
кодом";
$head = "location: preorder.php";
}
}if(isset($_GET['customer_id']))
{_once 'users.php';
$customer_id = $_GET['customer_id'];
$lastname = $_GET['lastname'];
$name = $_GET['name'];
$contact_phone = $_GET['contact_phone'];
$adress = $_GET['adress'];
$ch = new check();
$error = $ch->customer_check($lastname, $name,
$contact_phone, $adress);(strlen($error))
$head = "location:
customer.php?error=".$error."";
{_start();
$user = $_SESSION['user'];
$user->db_connect();
$sql = "UPDATE customer SET
lastname='".$lastname."', `name`='".$name."',
contact_phone='".$contact_phone."', adress='".$adress."'
WHERE customer_id=".$customer_id;
$result = mysql_query($sql);
$head = "location: customer.php";
}
}if($_GET['storage_item_id'])
{_once 'users.php';
$storage_item_id = $_GET['storage_item_id'];
$product_id = $_GET['product_id'];
$arrival_date = $_GET['arrival_date'];
$product_number = $_GET['product_number'];
$price = $_GET['price'];
$ch = new check();
$error = $ch->storage_item_check($product_id,$arrival_date,$product_number,$price);(strlen($error))
{
$head = "location: storage_item.php?error=".$error;
}
{_start();
$user = $_SESSION['user'];
$user->db_connect();
$sql = "UPDATE storage_item SET
product_id=".$product_id.", arrival_date='".$arrival_date."',
product_number=".$product_number.", price=".$price." WHERE
storage_item_id=".$storage_item_id;
$result = mysql_query($sql);
$error = mysql_error();(strlen($error))
$head = "location:
storage_item.php?error=Відсутній%20товар%20з%20вказаним%20кодом";
$head = "location: storage_item.php";_close();
}
}if($_GET['maneger_id'])
{_once 'users.php';
$maneger_id = $_GET['maneger_id'];
$fullname = $_GET['fullname'];
$succes_orders = $_GET['succes_orders'];
$canceled_orders = $_GET['canceled_orders'];
$ch = new check();
$error = $ch->maneger_check($fullname, $succes_orders,
$canceled_orders);(strlen($error))
$head = "location:
maneger.php?error=".$error."";
{_start();
$user = $_SESSION['user'];
$user->db_connect();
$sql = "UPDATE maneger SET
fullname='".$fullname."', succes_orders=".$succes_orders.",
canceled_orders=".$canceled_orders." WHERE
maneger_id=".$maneger_id;
$result = mysql_query($sql);
$head = "location: maneger.php";
}
}($head);
?>