МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ ФЕДЕРАЦИИ федеральное государственное бюджетное образовательное учреждение высшего образования «Казанский национальный исследовательский технический университет им. А.Н. Туполева-КАИ» (КНИТУ-КАИ) СПО ИКТЗИ Колледж информационных технологий Расчетно-пояснительная записка к курсовой работе по дисциплине «Технология разработки и защиты баз данных» тема «Магазин спорттоваров» Выполнил: обучающийся группы 4233 Гильфанов Э.Р. Проверила : Касимова А.Р. Курсовая работа зачтена с оценкой _________________________________ (подпись, дата) Казань 2023г. ВВЕДЕНИЕ Современная эра цифровых технологий ускоряет время и если не использовать различные технологические достижения и разнообразные цифровые устройства, то очень сложно представить нормальное и постоянное развитие, как отдельно взятого человека, так и общества в целом. В наши дни автоматизация различных процессов необходима для стабильности и роста экономики. В курсовой работе будет показан процесс создания базы данных для магазина спорттоваров. Цель работы – разработать автоматизированную базу данных и удобный пользовательский интерфейс по теме «Магазин спорттоваров». В ней должны храниться данные о спортивных товарах, пользователях, сотрудниках и историях покупок. А также должна быть возможность редактировать эти данные, так как многие работники могут некорректно ввести информацию. Были выделены конкретные задачи, выполнение которых приведет к поставленной цели. Задачи, которые необходимо выполнить: 1. Создать ER-диаграмму (все три уровня) по заданному варианту. 2. Создать базу данных через phpmyadmin (проставить все связи, первичные ключи). 3. Заполнить не менее 15 строк для каждой таблицы. 4. Создать пользователя через phpmyadmin и дать ему права для редактирования 5. Создать формы для вывода, изменения и удаления базы данных. 6. Создать форму для добавления новых пользователей 7. Создать 2 триггера. Следует заметить, что интерфейс взаимодействия с БД должен быть максимально прост и понятен работникам. ГЛАВА 1. ПРОГРАММНЫЕ СРЕДСТВА В главе 1 будут описаны программные средства, которые необходимы при создании БД и средств взаимодействия. XAMPP — кроссплатформенная сборка веб-сервера, содержащая Apache, MySQL, интерпретатор скриптов PHP, язык программирования Perl и большое количество дополнительных библиотек, позволяющих запустить полноценный веб-сервер. XAMPP работает со всеми 32-х разрядными ОС Microsoft а также с Linux, Mac OS X и Solaris. Программа свободно распространяется согласно лицензии GNU General Public License и является бесплатным, удобным в работе web-сервером, способным обслуживать динамические страницы. На сегодняшний день Xampp является одной из лучших сборок веб-сервера, с помощью этой сборки можно быстро развернуть на своем компьютере полноценный и быстрый веб-сервер. Необходим, чтобы начать работу с базой данных. Visual Studio Code (VS Code) — текстовый редактор, разработанный Microsoft для Windows, Linux и macOS. Позиционируется как «лёгкий» редактор кода для кроссплатформенной разработки веб- и облачных приложений. Включает в себя отладчик, инструменты для работы с Git, подсветку синтаксиса, IntelliSense и средства для рефакторинга. Имеет широкие возможности для кастомизации: пользовательские темы, сочетания клавиш и файлы конфигурации. Распространяется бесплатно, разрабатывается как программное обеспечение с открытым исходным кодом, но готовые сборки распространяются под проприетарной лицензией. MySQL - реляционная система управления базами данных с открытым исходным кодом. MySQL является решением для малых и средних приложений. Входит в состав серверов WAMP, AppServ, LAMP и в портативные сборки серверов Денвер, XAMPP, VertrigoServ. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы. Гибкость СУБД MySQL обеспечивается поддержкой большого количества типов таблиц: пользователи могут выбрать как таблицы типа MyISAM, поддерживающие полнотекстовый поиск, так и таблицы InnoDB, поддерживающие транзакции на уровне отдельных записей. PhpMyAdmin — веб-приложение с открытым кодом, написанное на языке PHP и представляющее собой веб-интерфейс для администрирования СУБД MySQL. PhpMyAdmin позволяет через браузер и не только осуществлять администрирование сервера MySQL, запускать команды SQL и просматривать содержимое таблиц и баз данных. Приложение пользуется большой популярностью у веб-разработчиков, так как позволяет управлять СУБД MySQL без непосредственного ввода SQL команд. Приложение распространяется под лицензией GNU General Public License и поэтому многие другие разработчики интегрируют его в свои разработки, например XAMPP, Denwer, AppServ, Open Server. Проект локализован на более чем 62 языках. PHP — скриптовый язык общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков, применяющихся для создания динамических веб-сайтов. HTML — стандартизированный язык гипертекстовой разметки документов для просмотра веб-страниц в браузере. Веб-браузеры получают HTML документ от сервера по протоколам HTTP/HTTPS или открывают с локального диска, далее интерпретируют код в интерфейс, который будет отображаться на экране монитора. Язык HTML интерпретируется браузерами; полученный в результате интерпретации форматированный текст отображается на экране монитора компьютера или мобильного устройства. В главе 1 были рассмотрены программные средства, необходимые для разработки БД. ГЛАВА 2. ER-ДИАГРАММЫ ER-модель — модель данных, позволяющая описывать концептуальные схемы предметной области. ER-модель используется при высокоуровневом проектировании баз данных. С её помощью можно выделить ключевые сущности и обозначить связи, которые могут устанавливаться между этими сущностями. Необходима для облегчения разработки БД и предотвращает совершение ошибок. Модель данных — это абстрактное, самодостаточное, логическое определение объектов, операторов и прочих элементов, в совокупности составляющих абстрактную машину доступа к данным, с которой взаимодействует пользователь. В классической теории баз данных, модель данных есть формальная теория представления и обработки данных в системе управления базами данных. Определение сущностей БД и их атрибуты. Описание будет в формате: «сущность»: «атрибуты». Сущность «Товары»: «Код товара», «Название товара», «Цена товара», «Количество товара», «Категория товара». Сущность «Продажи»: «Код продажи», «Код продукта», «Код пользователя», «Дата продажи», «Прибыль». Сущность «Сотрудники»: «Код сотрудника», «Имя сотрудника», «Фамилия сотрудника», «Отчество сотрудника», «Статус», «Логин сотрудника», «Пароль сотрудника». Сущность «Пользователи»: «Код пользователя», «Имя пользователя», «Фамилия пользователя», «Отчество пользователя», «Email пользователя», «Адрес пользователя», «Баланс», «Логин пользователя», «Пароль пользователя». Сущность «Категория товара»: «Код категории», «Название категории». Выделяют три вида моделей данных: концептуальную, логическую и физическая. Концептуальная минимальным модель количеством данных — подробностей. схема наивысшего Достоинство этого уровня с подхода заключается в возможности отобразить общую структуру модели и всю архитектуру системы. Менее масштабные системы могут обойтись и без этой модели. Эта модель, представленная множеством понятий и связей между ними, определяющих смысловую структуру рассматриваемой предметной области или её конкретного объекта. На этом этапе выделены сущности и обобщенные связи между сущностями. На рисунке 1 представлена концептуальная модель базы данных «Магазин спорттоваров». Рисунок 1 – Концептуальная модель базы данных «Магазин спорттоваров». Логическая модель данных - описание объектов предметной области, их атрибутов и взаимосвязей между ними в том объеме, в котором они подлежат непосредственному хранению в базе данных системы. Строится на основе концептуальной модели данных. Логическая модель данных является визуальным представлением структур данных, их атрибутов и бизнес-правил. Логическая модель представляет данные таким образом, чтобы они легко воспринимались бизнес-пользователями. Проектирование логической модели должно быть свободная от требований платформы и языка реализации или способа дальнейшего использования данных. На этом этапе выделены атрибуты у сущностей и связи между сущностями. На рисунке 2 представлена логическая модель базы данных «Магазин спорттоваров». Рисунок 2 – Логическая модель базы данных «Магазин спорттоваров». Физическая модель данных - способ хранения данных в конкретной СУБД. Строится на основе логической модели данных. Физические модели содержат информацию, необходимую системным разработчикам для понимания механизма реализации логической модели в СУБД. На этапе проектирования физическая модель данных определяет сущности, атрибуты, связку, ограничение целостности в терминах конкретной СУБД. На этапе проектирования физической модели складывается описание реляционных таблиц, которые дальше должны быть реализованы в среде конкретной СУБД. На этом этапе выделены первичные, внешние ключи и типы данных атрибутов. На рисунке 3 представлена физическая модель базы данных «Магазин спорттоваров». Рисунок 3 – Физическая модель базы данных «Магазин спорттоваров». Между таблицами в базе данных по стандарту выделяют следующие связи: 1:1 (один-к-одному) – эта связь реализуется, когда одному объекту первой сущности может соответствовать только один объект из второй сущности. 1:M (один-ко-многим) – данная связь означает, что одному объекту первой сущности могут соответствовать несколько объектов из второй сущности. М:М (многие-ко-многим) – значение этой связи заключается в том, что нескольким объектам из первой сущности могут соответствовать несколько объектов из второй сущности. Связь 1:М применялась между атрибутами: «Код категории»(таблица «Категория товара») и «Категория товара»(таблица «Товары»); «Код товара»(таблица «Товары») и «Код продукта»(таблица «Продажи»); «Код пользователя»(таблица «Пользователи») и «Код пользователя»(таблица «Продажи»). В главе 2 были рассмотрены уровни моделей баз данных и были построены диаграммы для каждого уровня. А также были рассмотрены связи между таблицами и установлены между таблицами. ГЛАВА 3. БАЗА ДАННЫХ После определения атрибутов и связей между таблицами, можно переходить к непосредственному созданию базы данных. Необходимо определить типы данных, применяемые в рассматриваемой БД. Так как без их определения увеличится риск совершения ошибок и потери целостности данных. INT - целочисленный тип данных. представляет целые числа от 2147483648 до 2147483647, занимает 4 байта VARCHAR хранит строки переменной длины до 65 535 символов. Причем в памяти хранится именно та длина, которая была указана при создании. VARCHAR занимает меньше места, чем CHAR, но подвержен фрагментации и из-за этого может проигрывать в скорости обработки данных. DATE - используется для величин с информацией только о дате в формате 'YYYY-MM-DD'. Поддерживается диапазон величин от '1000-01-01' до '9999-1231'. После определения с типами данных, можно переходить к созданию БД. На этом этапе была создана таблица «Категория товара». В ней хранится информация о категориях товарах. Ключевым является атрибут «Код категории». Атрибуты представлены на рисунке 4. Рисунок 4 – Таблица «Категория товара». Далее была создана таблица «Сотрудники». В ней хранится информация о сотрудниках. Атрибут «Код сотрудника» является ключевым. Атрибуты таблицы «Сотрудники» представлены на рисунке 5. Рисунок 5 – Таблица «Сотрудники». Далее была создана таблица «Пользователи». В ней хранится информация о клиентах. Атрибут «Код пользователя» является ключевым. Атрибуты таблицы «Пользователи» представлены на рисунке 6. Рисунок 6 – Таблица «Пользователи». Далее была создана таблица «Товары». В ней хранится информация о товарах. Атрибут «Код товара» является ключевым. Атрибуты таблицы «Товары» представлены на рисунке 7. Рисунок 7 – Таблица «Товары». Далее была создана таблица «Продажи». В ней хранится информация о совершенных продажах. Атрибут «Код продажи» является ключевым. Атрибуты таблицы «Продажи» представлены на рисунке 8. Рисунок 8 – Таблица «Продажи». На рисунке 9 представлена модель базы данных, отражающая индексы и связи таблиц БД. Рисунок 9 – Схема базы данных в дизайнере phpMyAdmin. Далее был добавлен новый пользователь в панели управления phpMyAdmin и ему были присвоены права на редактирование. Это понадобится для защиты БД от злоумышленников и утечки информации. В первую очередь необходимо на домашней странице phpMyAdmin кликнуть на «Учетные записи пользователей» как показано на рисунке 10. Рисунок 10 – Домашняя страница phpMyAdmin. Затем был добавлен пользователь. Было указано имя, пароль и параметры доступа. Меню добавления нового пользователя показано на рисунке 11. Рисунок 11 – Меню добавления нового пользователя. Результат показан на рисунке 12. Рисунок 12 – Результат добавления нового пользователя. В главе 3 были рассмотрены типы данных, применимых в БД. А также был рассмотрен процесс создания таблиц базы данных и добавление нового пользователя в phpMyAdmin. ГЛАВА 4. Создание Web-форм Для взаимодействия с базой данных, необходимо создать HTML-формы, которые выполняют SQL запросы. Это формы на вывод, изменение и удаление данных в таблице. Для операций была выбрана таблица «Товары». Данные в таблице «Товары» в phpMyAdmin показаны на рисунке 13. Рисунок 13 – Данные в таблице «Товары». Сначала была создана форма на вывод данных таблицы «Товары». Была создана HTML-форма и PHP-скрипт. Был использован оператор SELECT. Форма имеет ссылки действия для удаления или изменения определенного товара. Код будет указан ниже. SELECT * FROM products_r Код формы представлен в Приложении А. Результат показан на рисунке 14. Рисунок 14 – Вывод таблицы «Товары» в форму. Далее была создана форма на изменение данных в таблице. Будет использоваться оператор UPDATE. Форма получает с помощью GET параметра id нужного товара. Данные в таблице «Товары» представлены на рисунке 15. Код представлен в приложении Б. Рисунок 15 – Данные в таблице «Товары». Ниже указан код запроса UPDATE для сущности «Товары». UPDATE products_r SET name_product='$name',price_product='$price',count_product='$count',category_prod uct='$id_category' WHERE id_product LIKE '$id' Для изменения данных товаров достаточно перейти по ссылке товара «Изменить» (через каждую ссылку передается идентификатор выбранного товара) и изменить данные, которые актуальны в данный момент. Изменение сохраняется при нажатии на кнопку в форме. Форма представлена на рисунке 16. Рисунок 16 – Форма изменения данных в таблице «Товары». Результат представлен на рисунке 17. Рисунок 17 – Результат изменения данных в таблице «Товары». Далее была создана форма на удаление данных в таблице. Код представлен в приложении В. Ниже указан код запроса DELETE. DELETE FROM products_r WHERE id_product LIKE '$id' Для удаления товара достаточно перейти по ссылке «Удалить» (через каждую ссылку передается идентификатор выбранного товара). Удаление выбранного происходит при нажатии соответствующей ссылки. Форма на удаление представлена на рисунке 18. Рисунок 18 – Форма удаления данных в таблице «Товары». Результат представлен на рисунке 19. Удален товар с идентификатором 15. Рисунок 19 – Результат удаления данных в таблице «Товары». Также была создана форма добавления новых пользователей (форма их регистрации). Для операции добавления была выбрана таблица «Пользователи». Данные в таблице «Пользователи» в phpMyAdmin показаны на рисунке 20. Рисунок 20 – Данные в таблице «Пользователи». Для добавления пользователей была использована форма регистрации. Пользователь вводит свои данные и при нажатии кнопки на форме он сохраняется в таблице «Пользователи». Код представлен в приложении Г. Ниже указан код запроса INSERT. INSERT INTO users_r(name_user,surname_user,otchestvo_user,email_user,address_user,balance_us er,login_user,passw_user) VALUES('$name','$surname','$otch','$email','$address',0,'$login','$passw') Форма на добавление представлена на рисунке 21. Рисунок 21 – Форма добавления пользователей в таблице «Пользователи». Результат представлен на рисунке 22. Добавлен пользователь. Рисунок 22 – Результат добавления пользователей в таблице «Пользователи». В главе 4 был рассмотрен процесс создания форм для взаимодействия с таблицами БД. ГЛАВА 5. Простейшие криптографические способы защиты базы данных Для обеспечения безопасности данных БД в данной работе пароли пользователей хранятся в хэше. Обычный текст переводится в хэш с помощью хэш-функций. Хэш-функция - функция, осуществляющая преобразование массива входных данных произвольной длины в выходную битовую строку установленной длины, выполняемое определённым алгоритмом. В данной работе был использован 128 битный алгоритм хеширования – MD5. Скрипт хранения паролей пользователей в хэше представлен ниже. $passw = md5($passw); Далее создадим таблицу «inlog», которая будет хранить добавление новых данных в основной таблице «Товары». Атрибуты таблицы «inlog» представлены на рисунке 23. Рисунок 23 – Таблица «inlog». Далее был создан триггер «insert_log», который выполняет добавление данных в таблицу «inlog». Создание триггера «insert_log» представлено на рисунке 24. Рисунок 24 – Создание триггера «insert_log». Далее был выполнен запрос на добавление товара для испытания триггера с помощью формы добавления товара. Форма добавления товара представлена на рисунке 25. Рисунок 25 – Форма добавления товара. Результат работы триггера «insert_log» представлен на рисунке 26. Рисунок 26 – Результат работы триггера «insert_log» (таблица «inlog»). Далее была создана таблица «backlog», которая будет хранить удаленные записи из основной таблицы «Товары». Атрибуты таблицы «backlog» представлены на рисунке 27. Рисунок 27 – Таблица «backlog». Далее был создан триггер «backlog_delete», который выполняет добавление данных в таблицу «inlog». Создание триггера «backlog_delete» представлено на рисунке 28. Рисунок 28 – Создание триггера «backlog_delete». Далее был выполнен запрос на удаление товара c id = 17 для испытания триггера с помощью формы удаления товара. Форма удаления товара представлена на рисунке 29. Рисунок 29 – Форма удаления товара. Результат работы триггера «backlog_delete» представлен на рисунке 30. Рисунок 30 – Результат работы триггера «backlog_delete» (таблица «backlog»). В главе 5 был рассмотрен процесс создания триггеров и их использование в БД. ГЛАВА 6. Транзакции Транзакция – это группа последовательных операций с базой данных, которая представляет собой логическую единицу работы с данными. Транзакция может быть выполнена либо целиком и успешно, соблюдая целостность данных и независимо от параллельно идущих других транзакций, либо не выполнена вообще, и тогда она не должна произвести никакого эффекта. В транзакции будет производиться несколько запросов, а именно: изменение количества товара, изменение баланса пользователя, создание записи в сущности «Продажи». Транзакция реализована с помощью PDO. Код предоставлен в приложении Д. Ниже указаны коды запросов UPDATE и INSERT. INSERT INTO transactions_r(product_id,user_id,date_transaction,profit) VALUES('$id','$id_user',NOW() ,'$profit'); UPDATE users_r SET balance_user = balance_user - $profit WHERE id_user LIKE '$id_user'; UPDATE products_r SET count_product = count_product - $kolvo WHERE id_product LIKE '$id' Для того, чтобы совершить покупку авторизованный в системе пользователь должен в личном кабинете должен нажать на кнопку «Совершить покупку», которая переведет его на страницу с карточками товаров. На данной странице он может выбрать товар и для дальнейшей покупки ему необходимо перейти по ссылке, указанной в карточке товара. Форма с карточками товаров представлена на рисунке 31. После перехода по ссылке, пользователь должен указать количество товаров, которое он хочет приобрести, и нажать на кнопку для совершения покупки. Форма с окончательным этапом оформления заказа представлена на рисунке 32. Рисунок 31 – Форма с карточками товаров. Рисунок 32 – Форма окончательного этапа оформления заказа. На рисунке 33 представлен результат выполнения транзакции. Рисунок 33 – Результат выполнения транзакции (таблица «Продажи»). В главе 6 были рассмотрены транзакции и использованы для осуществления продаж Магазина спорттоваров. ЗАКЛЮЧЕНИЕ. В данной работе был кратко описан процесс создания базы данных и создания средств взаимодействия с базой данных, рассмотрены функциональные возможности СУБД MySQL phpMyAdmin. В ходе выполнения курсовой работы была разработана база данных «Магазин спорттоваров». Благодаря данной БД работа персонала будет во много раз производительнее и продажи будут автоматизированные, что улучшит контакт потенциальных покупателей с продавцом. БД защищена, вероятность утечки информации уменьшилась. Также должно улучшиться положение с ведением учета товаров. С помощью данной БД можно легко выводить, изменять, удалять информацию. Формы имеют удобный пользовательский интерфейс, благодаря которому можно легко ориентироваться при работе с ними, что очень важно для неопытных пользователей. СПИСОК ЛИТЕРАТУРЫ. 1. URL: https://www.ficode.co.uk/blog/how-to-use-mysql-transation-with-php/ (дата обращения: 06.05.2023). 2. URL: https://studfile.net/preview/3675803/page:6/ (дата обращения: 06.05.2023). 3. URL: http://www.mysql.ru/docs/man/DATETIME.html (дата обращения: 06.05.2023). 4. URL: https://codernet.ru/articles/web/tranzakczii_v_php_mysql/ (дата обращения: 06.05.2023). 5. URL: https://www.youtube.com/watch?v=L5RpqspNAuc (дата обращения: 06.05.2023). ПРИЛОЖЕНИЯ. Приложение А <!DOCTYPE html> <html> <body> <table> <thead> <tr> <th>id товара</th> <th>Наименование</th> <th>Цена</th> <th>Количество</th> <th>Категория</th> </tr> </thead> <tbody> <?php $db_host='localhost'; // ваш хост $db_name='kursovaya'; // ваша бд $db_user='root'; // пользователь бд $db_pass='123456789'; // пароль к бд $link = mysqli_connect($db_host, $db_user, $db_pass, $db_name); // коннект с сервером бд $query = mysqli_query($link,"SELECT * FROM products_r"); while($result = mysqli_fetch_array($query)){ $id = $result['id_product']; $name = $result['name_product']; $price = $result['price_product']; $kolich = $result['count_product']; $category = $result['category_product']; $query2 = mysqli_query($link,"SELECT * FROM category_r WHERE id_category LIKE '$category'"); $mass = mysqli_fetch_assoc($query2); $name_ca = $mass['name_category']; echo '<tr> <td>'.$id.'</td> <td>'.$name.'</td> <td>'.$price.'</td> <td>'.$kolich.'</td> <td>'.$name_ca.'</td> <td><a href="edit.php?id='.$id.'">Изменить /</a></td> <td><a href="delete.php?id='.$id.'">Удалить</a></td> </tr>'; } ?> </tbody> </table> <a href="kabinet_worker.php" 30%">Назад</a> </body> </html> style="position:absolute; margin-top: Приложение Б <?php $db_host='localhost'; // ваш хост $db_name='kursovaya'; // ваша бд $db_user='root'; // пользователь бд $db_pass='123456789'; // пароль к бд $link = mysqli_connect($db_host, $db_user, $db_pass, $db_name); // коннект с сервером бд $id = $_GET['id']; $name = $_GET['name']; $price = $_GET['price']; $count = $_GET['count']; $category = $_GET['category']; $query = mysqli_query($link,"SELECT * FROM category_r WHERE name_category LIKE '$category'"); $proverka = $query->num_rows; if($proverka == 0){ echo "<script>alert('Такой категории не существует');location.href = 'updateproduct.php'</script>"; } else{ $d = mysqli_fetch_array($query); $id_category = $d['id_category']; $query2 = mysqli_query($link,"UPDATE products_r SET name_product='$name',price_product='$price',count_product='$count',category_prod uct='$id_category' WHERE id_product LIKE '$id' "); echo "<script>alert('Данные успешно изменены!!!');location.href='updateproduct.php'</script>"; } ?> Приложение В <?php $db_host='localhost'; // ваш хост $db_name='kursovaya'; // ваша бд $db_user='root'; // пользователь бд $db_pass='123456789'; // пароль к бд $link = mysqli_connect($db_host, $db_user, $db_pass, $db_name); // коннект с сервером бд $id = $_GET['id']; $query = mysqli_query($link,"DELETE FROM products_r WHERE id_product LIKE '$id'"); if($query){ echo "<script>alert('Данные успешно удалены');location.href='updateproduct.php'</script>"; } else{ echo "<script>alert('Возникли ошибки');location.href='updateproduct.php'</script>"; } ?> Приложение Г <!DOCTYPE html> <html> <head> <title>Регистрация</title> <meta charset="UTF-8"> </head> <body> <?php $db_host='localhost'; // ваш хост $db_name='kursovaya'; // ваша бд $db_user='root'; // пользователь бд $db_pass='123456789'; // пароль к бд $link = mysqli_connect($db_host, $db_user, $db_pass, $db_name); // коннект с сервером бд $name = $_GET['name']; $surname = $_GET['surname']; $otch = $_GET['otch']; $email = $_GET['email']; $address = $_GET['adress']; $login = $_GET['login']; $passw = $_GET['pass']; $passw = md5($passw); $proverka = mysqli_query($link,"SELECT * FROM users_r WHERE login_user LIKE '$login' AND passw_user LIKE '$passw'"); $numbers = $proverka->num_rows; if(!empty($name) && !empty($surname) && !empty($otch) && !empty($email) && !empty($address) && !empty($login) && !empty($_GET['pass'])){ if($numbers == 0){ $reg = mysqli_query($link,"INSERT INTO users_r(name_user,surname_user,otchestvo_user,email_user,address_user,balance_us er,login_user,passw_user) VALUES('$name','$surname','$otch','$email','$address',0,'$login','$passw')"); if($reg){ echo "<script>alert('Регистрация прошла успешно!'); location.href='vhod.html';</script>"; } else{ echo "<script>alert('Возникли проблемы!');location.href='registr.html';</script>"; } } else{ echo "<script>alert('Поменяйте пароль или логин!');location.href='registr.html';</script>"; } } else{ echo "<script>alert('Не все поля заполнены!');location.href='registr.html';</script>"; } ?> </body> </html> Приложение Д <?php session_start(); $id_user = $_SESSION['a']; $db_host='localhost'; // ваш хост $db_name='kursovaya'; // ваша бд $db_user='root'; // пользователь бд $db_pass='123456789'; // пароль к бд $link = mysqli_connect($db_host, $db_user, $db_pass, $db_name); // коннект с сервером бд $db = new PDO('mysql:host='.$db_host.';dbname='.$db_name,$db_user,$db_pass); $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $id=$_GET['id']; $kolvo=(int)$_GET['countuser']; $query = mysqli_query($link,"SELECT * FROM users_r WHERE id_user LIKE '$id_user'"); $query2 = mysqli_query($link,"SELECT * FROM products_r WHERE id_product LIKE '$id'"); $mass = mysqli_fetch_assoc($query); $mass2 = mysqli_fetch_assoc($query2); $balance = (int)$mass['balance_user']; $price = (int)$mass2['price_product']; $profit = $price * $kolvo; if($balance >= $profit){ try{ $db->beginTransaction(); $query3 = mysqli_query($link,"INSERT INTO transactions_r(product_id,user_id,date_transaction,profit) VALUES('$id','$id_user',NOW() ,'$profit')"); $query4 = mysqli_query($link,"UPDATE users_r SET balance_user = balance_user - $profit WHERE id_user LIKE '$id_user'"); $query5 = mysqli_query($link,"UPDATE products_r SET count_product = count_product - $kolvo WHERE id_product LIKE '$id'"); echo "<script>alert('Покупка успешно завершена!!!');location.href='transaction.php'</script>"; $db->commit(); } catch(Exception $e){ echo "<script>alert('Возникли проблемы!!!');location.href='transaction.php'</script>"; $db->rollback(); } } else{ echo "<script>alert('У вас недостаточно средств!!!');location.href='transaction.php'</script>"; } ?>