Создание таблиц баз данных.




Традиционность

 

Язык РНР будет казаться знакомым программистам, работающим в разных областях. Многие конструкции языка позаимствованы из Си, Perl.

Код РНР очень похож на тот, который встречается в типичных программах на С или Pascal. Это заметно снижает начальные усилия при изучении РНР. PHP — язык, сочетающий достоинства Perl и Си и специально нацеленный на работу в Интернете, язык с универсальным (правда, за некоторыми оговорками) и ясным синтаксисом.

И хотя PHP является довольно молодым языком, он обрел такую популярность среди web-программистов, что на данный момент является чуть ли не самым популярным языком для создания web-приложений (скриптов).

 

Простота

 

Сценарий РНР может состоять из 10 000 строк или из одной строки — все зависит от специфики вашей задачи. Вам не придется подгружать библиотеки, указывать специальные параметры компиляции или что-нибудь в этом роде. Механизм РНР просто начинает выполнять код после первой экранирующей последовательности (<?) и продолжает выполнение до того момента, когда он встретит парную экранирующую последовательность (?>). Если код имеет правильный синтаксис, он исполняется в точности так, как указал программист.

PHP — язык, который может быть встроен непосредственно в html -код страниц, которые, в свою очередь будут корректно обрабатываться PHP -интерпретатором. Мы можем использовать PHP для написания CGI-сценариев и избавиться от множества неудобных операторов вывода текста. Мы можем привлекать PHP для формирования HTML-документов, избавившись от множества вызовов внешних сценариев.

Большое разнообразие функций PHP избавят вас от написания многострочных пользовательских функций на C или Pascal.

 

Эффективность

 

Эффективность является исключительно важным фактором при программировании для многопользовательских сред, к числу которых относится и web.

Очень важное преимущество PHP заключается в его «движке». «Движок» PHP не является ни компилятором, ни интерпретатором. Он является транслирующим интерпретатором. Такое устройство «движка» PHP позволяет обрабатывать сценарии с достаточно высокой скоростью.

По некоторым оценкам, большинство PHP-сценариев (особенно не очень больших размеров) обрабатываются быстрее аналогичных им программ, написанных на Perl. Однако, чтобы не делали разработчики PHP, откомпилированные исполняемые файлы будут работать значительно быстрее – в десятки, а иногда и в сотни раз. Но производительность PHP вполне достаточна для создания вполне серьезных web-приложений. Подробно об устройстве и характеристиках «движка» PHP можно ознакомиться здесь.

 

Безопасность

 

РНР предоставляет в распоряжение разработчиков и администраторов гибкие и эффективные средства безопасности, которые условно делятся на две категории: средства системного уровня и средства уровня приложения.

1. Средства безопасности системного уровня

 

В РНР реализованы механизмы безопасности, находящиеся под управлением администраторов; при правильной настройке РНР это обеспечивает максимальную свободу действий и безопасность. РНР может работать в так называемом безопасном режиме (safe mode), который ограничивает возможности применения РНР пользователями по ряду важных показателей. Например, можно ограничить максимальное время выполнения и использование памяти (неконтролируемый расход памяти отрицательно влияет на быстродействие сервера). По аналогии с cgi-bin администратор также может устанавливать ограничения на каталоги, в которых пользователь может просматривать и исполнять сценарии РНР, а также использовать сценарии РНР для просмотра конфиденциальной информации на сервере (например, файла passwd).

 

2. Средства безопасности уровня приложения

 

В стандартный набор функций РНР входит ряд надежных механизмов шифрования. РНР также совместим с многими приложениями независимых фирм, что позволяет легко интегрировать его с защищенными технологиями электронной коммерции (e-commerce). Другое преимущество заключается в том, что исходный текст сценариев РНР нельзя просмотреть в браузере, поскольку сценарий компилируется до его отправки по запросу пользователя. Реализация РНР на стороне сервера предотвращает похищение нетривиальных сценариев пользователями, знаний которых хватает хотя бы для выполнения команды View Source.

 

Гибкость

Поскольку РНР является встраиваемым (embedded) языком, он отличается исключительной гибкостью по отношению к потребностям разработчика. Хотя РНР обычно рекомендуется использовать в сочетании с HTML, он с таким же успехом интегрируется и в JavaScript, WML, XML и другие языки. Кроме того, хорошо структурированные приложения РНР легко расширяются по мере необходимости (впрочем, это относится ко всем основным языкам программирования).

Нет проблем и с зависимостью от браузеров, поскольку перед отправкой клиенту сценарии РНР полностью компилируются на стороне сервера. В сущности, сценарии РНР могут передаваться любым устройствам с браузерами, включая сотовые телефоны, электронные записные книжки, пейджеры и портативные компьютеры, не говоря уже о традиционных ПК. Программисты, занимающиеся вспомогательными утилитами, могут запускать РНР в режиме командной строки.

Поскольку РНР не содержит кода, ориентированного на конкретный web-сервер, пользователи не ограничиваются определенными серверами (возможно, незнакомыми для них). Apache, Microsoft IIS, Netscape Enterprise Server, Stronghold и Zeus — РНР работает на всех перечисленных серверах. Поскольку эти серверы работают на разных платформах, РНР в целом является платформенно-независимым языком и существует на таких платформах, как UNIX, Solaris, FreeBSD и Windows 95/98/NT/2000/XP/2003.

Наконец, средства РНР позволяют программисту работать с внешними компонентами, такими как Enterprise Java Beans или СОМ-объекты Win32. Благодаря этим новым возможностям РНР занимает достойное место среди современных технологий и обеспечивает масштабирование проектов до необходимых пределов.

 

1.3.2 Краткую характеристику языка программирования;

 

PHP (рекурсивный акроним словосочетания PHP: Hypertext Preprocessor) — это распространённый язык программирования общего назначения с открытым исходным кодом. PHP специально сконструирован для веб-разработок и его код может внедряться непосредственно в HTML.

PHP отличается от JavaScript тем, что PHP-скрипты выполняются на сервере и генерируют HTML, который посылается клиенту. Если бы у вас на сервере был размещён скрипт, подобный вышеприведённому, клиент получил бы только результат его выполнения, но не смог бы выяснить, какой именно код его произвёл. Вы даже можете настроить свой сервер таким образом, чтобы обычные HTML-файлы обрабатывались процессором PHP, так что клиенты даже не смогут узнать, получают ли они обычный HTML-файл или результат выполнения скрипта.

PHP крайне прост для освоения, но вместе с тем способен удовлетворить запросы профессиональных программистов. Не пугайтесь длинного списка возможностей PHP. Вы можете быстро начать, и уже в течение нескольких часов сможете создавать простые PHP-скрипты.

Хотя PHP, главным образом, предназначен для работы в среде веб-серверов, область его применения не ограничивается только этим. Читайте дальше и не пропустите главу Возможности PHP либо, начните непосредственно с Вводного руководства, если вас интересует исключительно веб-программирование.

1.3.3 Описание типов данных;

Значения примитивных типов являются простыми неделимыми значениями, в которых нельзя выделить отдельные составляющие. Например, значениями типа Число могут быть 1, 8, 15 и др. Чтобы создать значение примитивного типа, в тексте программы нужно указать его литерал — символьный идентификатор значения.

Универсальные коллекции значений:

Также, существуют более сложные типы данных. Например, платформа поддерживает целый ряд типов, которые представляют собой универсальные коллекции значений: Массив, Структура, Список значений и другие.

Общие типы:

Кроме этого в платформе реализованы специфические типы данных, реализующие ту или иную функциональность прикладных решений: Текстовый Документ, Табличный Документ, Хранилище Значения, Построитель Запроса и другие.

Общие типы называют также общими объектами. Значения этих типов, в отличие от значений примитивных типов, представляют собой совокупность значений отдельных свойств объекта. Поэтому их называют экземплярами объектов. Экземпляры объектов создаются с помощью специального оператора встроенного языка — Новый.

 

Интерфейсные типы:

Интерфейсные типы позволяют организовывать визуальное взаимодействие прикладного решения с пользователем. В основном это типы, связанные с работой форм и их элементов.

Типы данных, образуемые в прикладном решении:

Однако, наряду с типами данных, которые определены на уровне платформы, конкретное прикладное решение может использовать уникальные типы данных, существующие только в этом конкретном прикладном решении. Причем платформа будет полностью поддерживать работу с этими типами данных точно так же, как и с типами, которые определены на уровне самой платформы.

Как правило, появление новых типов данных в прикладном решении связано с использованием прикладных объектов конфигурации. Поэтому такие типы называют еще прикладными типами или прикладными объектами.

На уровне платформы поддерживается несколько классов (шаблонов) прикладных объектов, которые сами по себе не могут быть использованы в конкретном прикладном решении. Например, можно перечислить такие классы прикладных объектов как Справочники, Документы, Регистры сведений, Планы видов характеристик и пр.

Для каждого класса прикладных объектов определена соответствующая ему базовая функциональность: типы таблиц базы данных, которые должны быть созданы для хранения данных, типовые формы, типовые объекты языка, наборы прав и пр.

Разработчик, создавая прикладное решение, не имеет возможности использовать эти классы напрямую, однако может добавить в свое прикладное решение новый объект конфигурации, наследующий всю функциональность того или иного класса:

Система типов описывает лишь общую «структуру» такого типа, правила, по которым будут формироваться объекты этого типа. Конкретное имя типа, состав свойств и методов объекта будут зависеть от того, как разработчик назовет объект конфигурации и какие, например, реквизиты, табличные части он в него добавит.

Следует еще раз отметить, что эти типы данных не поддерживаются платформой изначально, и существуют только в конкретном прикладном решении.

Еще один момент, на котором следует акцентировать внимание, проще всего продемонстрировать на примере.

 

1.3.4 Описание реализации вспомогательных алгоритмов в программе (процедуры, функции);

Основы MySQL

 

Базы данных позволяют организовать хранение структурированных данных любого типа. Для работы с базами данных используются специальные программы, которые служат для того, чтобы организовать работу с хранящимися данными по определенным правилам и обеспечивают наиболее быстрый и эффективный доступ к ним. Эти программы называются системами управления базами данных (СУБД).

 

При этом одной из наиболее популярных СУБД, используемых при создании Web-сайтов, является СУБД MySQL. Она является одной из самых распространенных СУБД в сети Интернет и отличается хорошей скоростью работы, надежностью и гибкостью. Поддержка сервера MySQL автоматически включается в поставку языка PHP, так как язык PHP изначально предназначался для работы с СУБД MySQL. В качестве языка запросов в СУБД MySQL используется язык запросов SQL.


SQL это наиболее стандартизированный язык для доступа к системам управления базами данных. Структурированный язык запросов SQL позволяет производить различные операции с базами данных: создавать таблицы, помещать, обновлять и удалять из них данные, производить запросы из таблиц и т.д. Его применяют также в таких системах управления базами данных, как Oracle, Interbase, а также Microsoft SQL Server [5].

 

Необходимо отметить, что наиболее популярным приложением по созданию и работе с базами данных MySQL является программа phpMyAdmin.

 

PhpMyAdmin это Web-приложение с открытым кодом, написанное на языке PHP и представляющее собой Web-интерфейс для администрирования баз данных MySQL. С помощью программы phpMyAdmin можно создавать, удалять и редактировать таблицы базы данных, выполнять отдельные SQL-запросы, создавать и удалять пользователей, изменять их привилегии.

 

Программа phpMyAdmin также позволяет через Web-браузер осуществлять администрирование сервера MySQL, запускать команды SQL по работе с содержимым таблиц баз данных, управлять СУБД MySQL без непосредственного ввода SQL команд, предоставляя дружественный пользовательский интерфейс.

 

 

1.3.7 Описание основных понятий объектно-ориентированного подхода в программировании (класс, объект, инкапсуляция, наследование, полиморфизм);

Абстрагирование означает выделение значимой информации и исключение из рассмотрения незначимой. В ООП рассматривают лишь абстракцию данных (нередко называя её просто «абстракцией»), подразумевая набор наиболее значимых характеристик объекта, доступных остальной программе.

Инкапсуляция — свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе. Одни языки (например, C++, Java или Ruby) отождествляют инкапсуляцию с сокрытием, но другие (Smalltalk, Eiffel, OCaml) различают эти понятия.

Наследование — свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствованной функциональностью. Класс, от которого производится наследование, называется базовым, родительским или суперклассом. Новый класс — потомком, наследником, дочерним или производным классом.

Полиморфизм подтипов (в ООП называемый просто «полиморфизмом») — свойство системы, позволяющее использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта. Другой вид полиморфизма — параметрический — в ООП называют обобщённым программированием.

Класс — универсальный, комплексный тип данных, состоящий из тематически единого набора «полей» (переменных более элементарных типов) и «методов» (функций для работы с этими полями), то есть он является моделью информационной сущности с внутренним и внешним интерфейсами для оперирования своим содержимым (значениями полей). В частности, в классах широко используются специальные блоки из одного или чаще двух спаренных методов, отвечающих за элементарные операции с определённым полем (интерфейс присваивания и считывания значения, геттер-сеттер), которые имитируют непосредственный доступ к полю. Эти блоки называются «свойствами» и почти совпадают по конкретному имени со своим полем (например, имя поля может начинаться со строчной, а имя свойства — с заглавной буквы). Другим проявлением интерфейсной природы класса является то, что при копировании соответствующей переменной через присваивание копируется только интерфейс, но не сами данные, то есть класс — ссылочный тип данных. Переменная-объект, относящаяся к заданному классом типу, называется экземпляром этого класса. При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении программы посредством динамической идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы обеспечить отвечающие природе объекта и решаемой задаче целостность данных объекта, а также удобный и простой интерфейс. В свою очередь, целостность предметной области объектов и их интерфейсов, а также удобство их проектирования, обеспечивается наследованием.

Сущность в адресном пространстве вычислительной системы, появляющаяся при создании экземпляра класса (например, после запуска результатов компиляции и связывания исходного кода на выполнение).

 

1.3.8 Описание объектов, используемых при написании программы.

Объекты конфигурации — это составные элементы, «детали», из которых складывается любое прикладное решение.

Они представляют собой проблемно-ориентированные объекты, поддерживаемые на уровне технологической платформы. По большому счету задача разработчика заключается в том, чтобы собрать из этих объектов, как из конструктора, необходимую структуру прикладного решения и затем описать специфические алгоритмы функционирования и взаимодействия этих объектов, отличающиеся от их типового поведения.

Для того чтобы стандартизировать и упростить процесс разработки и модификации прикладных решений, разработчику предоставляется графический интерфейс, с помощью которого он имеет возможность описать состав объектов, используемых в конкретном прикладном решении:

На основании этого описания технологическая платформа создаст в базе данных соответствующие информационные структуры, и определенным образом будет работать с данными, хранящимися в этих структурах. Разработчику нет необходимости заботиться о том, в каких таблицах, например, должны размещаться данные, каким образом они будут модифицироваться или представляться пользователю. Все эти действия платформа будет выполнять автоматически, исходя из типового поведения используемых объектов.

Таким образом, разработчик оперирует метаданными — «данными о данных», или объектами конфигурации. Добавляя в структуру прикладного решения очередной объект конфигурации, разработчик, по сути, добавляет описание того, как будут размещаться соответствующие данные, и как они будут взаимодействовать с другими данными, хранящимися в информационной базе.

Состав объектов, которые может использовать разработчик, фиксирован и определен на уровне платформы. Разработчик не может создавать собственные виды объектов, он может оперировать только тем набором объектов, который имеется. Подобный подход к разработке прикладных решений позволяет, во-первых, стандартизировать процесс разработки, а во-вторых — обеспечить простую и быструю модификацию прикладных решений другими разработчиками или пользователями.

 

 

2. СПЕЦИАЛЬНАЯ ЧАСТЬ

2.1 Общая постановка задачи

2.1.1 Описание решаемой задачи и ее назначение

Цель моего дипломного проекта – разработка сайта и базы данных для жителей города. Для достижения поставленной цели мне потребовалось:

· Разработать программный код.

· Разработать базу данных.

 

Разработка базы данных велась в несколько этапов:

· Реализация функционала;

· Реализация интерфейса;

· Тестирование;

 

Цель:

Предоставить клиентам, использующим портал подержанных велосипедов и мопедов с случаями использования на высшем уровне; определить основные функции, которые может использовать покупатель, администратор и модератор.

Описание случая: покупатель использует портал подержанных велосипедов и мопедов для продажи, покупки или аренды. Случаи использования на высшем уровне:

Регистрация новых пользователей, добавление собственных велосипедов для продажи через модератора, просмотр велосипедов, доступных для покупки или аренды, добавление выбранных товаров в корзину, оплата; также для администратора, может удалить или добавить пользователей, удалить комментарий. И Модератор размещает продукт на сайте, свяжусь с пользователем, который хочет арендовать или продать. И он может добавить новые категории.

Резюме:

Пользовательский веб-участник использует портал для покупок в Интернете. Случаи использования верхнего уровня — это просмотр велосипедов, покупка, добавление новых велосипедов через модератора, регистрация клиентов, написание комментария о продукте, покупка или аренда продукта.

 

2.1.2 Описание компонентов базы данных

PHP поддерживает работу с базой данных MySQL.
Специальные встроенные функции для работы с MySQL позволяют просто и эффективно работать с этой СУБД: выполнять любые запросы, читать и записывать данные, обрабатывать ошибки.
Сценарий, который подключается к БД, выполняет запрос и показывает результат, будет состоять всего из нескольких строк. Для работы с MySQL не надо ничего дополнительно устанавливать и настраивать; всё необходимое уже доступно вместе со стандартной поставкой PHP.

 

Как выглядит работа с базой данных;

 

Типичный процесс работы с СУБД в PHP-сценарии состоит из нескольких шагов:

 

· Установить подключение к серверу СУБД, передав необходимые параметры: адрес, логин, пароль.

 

· Убедиться, что подключение прошло успешно: сервер СУБД доступен, логин и пароль верные и так далее.

 

· Сформировать правильный SQL запрос (например, на чтение данных из таблицы).

 

· Убедиться, что запрос был выполнен успешно.

 

· Получить результат от СУБД в виде массива из записей.

 

· Использовать полученные записи в своём сценарии (например, показать их в виде таблицы).

 

 

Функция mysqli connect: соединение с MySQL

Перед началом работы с данными внутри MySQL, нужно открыть соединение с сервером СУБД.
В PHP это делается с помощью стандартной функции mysqli_connect(). Функция возвращает результат — ресурс соединения. Данный ресурс используется для всех следующих операций с MySQL.

Но чтобы выполнить соединение с сервером, необходимо знать как минимум три параметра:

 

· Адрес сервера СУБД;

· Логин;

· Пароль.

 

Если вы следовали стандартной процедуре установки MySQL или используете OpenServer, то адресом сервера будет localhost, логином — root. При использовании OpenServer пароль для подключения — это пустая строка ‘’, а при самостоятельной установке MySQL пароль вы задавали в одном из шагов мастера установки.

Базовый синтаксис функции mysqli_connect():

 

 

mysqli_connect(<адрес сервера>, <имя пользователя>, <пароль>, <имя базы данных>);

 

Проверка соединения

Первое, что нужно сделать после соединения с СУБД — это выполнить проверку, что оно было успешным.

Эта проверка нужна, чтобы исключить ошибку при подключении к БД. Неверные параметры подключения, неправильная настройка или высокая нагрузка заставит MySQL отвеграть новые подключения. Все эти ситуации приведут к невозможности соединения, поэтому программист должен проверить успешность подключения к серверу, прежде чем выполнять следующие действия.

Соединение с MySQL устанавливается один раз в сценарии, а затем используется при всех запросах к БД.
Результатом выполнения функции mysqli_connect() будет значение специального типа — ресурс.

Если подключение к MySQL не удалось, то функция mysqli_connect() вместо ресурса вернет логическое значение типа «ложь» — false.
Хорошей практикой будет всегда проверять значение результа выполнения этой функции и сравнивать его с ложью.

2.2 Описание алгоритма программы

Диаграмма сущности и отношения (ERD) — это метод моделирования данных, который наглядно иллюстрирует сущности информационной системы и отношения между этими сущностями. ERD представляет собой концептуальную и репрезентативную модель данных, используемых для представления инфраструктуры объектов инфраструктуры.

Диаграммы ERD (диаграммы сущностных отношений) предоставляют возможность выполнить описание домена, которое указано в категориях сущностей, их отношениях, атрибутах сущностей и отношений. Это описание математически строго и согласуется с схемой реляционной базы данных. Модель домена ERD является независимой dbMS и, следовательно, легко настраивается на конкретную базу данных.

 

2.3 Описание входных и выходных документов

Основные части:

- Регистры пользователей

Если пользователь не зарегистрирован, то он может только просматривать товары.

Если пользователь зарегистрирован то он может видить товар и купить его.

 

- Пользователь видит всю информацию о продукте

В сайте написано вся информация о товаре.

 

- Пользователь добавляет велосипед в корзину

Если пользователь добавляет товар в корзину, но не покупает его товар остаетсяв корзине.

Если пользователь добавит товар и продолжить покупку, он оплачивает и покупает товар.

 

- Пользователь может написать комментарий о продукте

 

3. РЕАЛИЗАЦИЯ ПРОЕКТА

 

3.1 Листинг программы

В этой функции работает этот код:

<?php
session_start();/*start */
session_destroy(); /* Referral for registration */
header("Location:index.php");
?>

Регистрационный код (SignUp.php 1-31 строка):

<?php
require "vendor/db.php";
if(isset($_POST)) {
$full_name = trim($_POST['full_name']);
$password = trim($_POST['password']);
$re_password = trim($_POST['re_password']);
$email = trim($_POST['email']);
$redirect = "/";
if($password!= $re_password) {
$redirect = "login.php?errorpassword";
}else {
$user = getByEmail($email);
if($user == null) {
$user['full_name'] = $full_name;
$user['password'] = $password;
$user['email'] = $email;
$user['role_id'] = 3;
if(addUser($user)) {
$redirect = 'signIn.php';
}
else {
$redirect = "login.php";
}
}
else {
$redirect = "login.php?erroremail";
}
}
header("Location:$redirect");
}
?>

<div class="container">
<div class="row mt-5">
<div class="col-sm-8 mx-auto">
<?php
if(isset($_GET['success'])) {
?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
successfully changed!
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php
}if(isset($_GET['error'])) {
?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
Something went wrong!
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php
}
?>
<?php
if(isset($_GET['id'])) {
$user = getById($_GET['id']);
if ($user!=null) {
?>
<div class="jumbotron">
<form action="updateuser.php" method="post">
<input type="hidden" value="<?=$user['id']?>" name="id">
<h1 class="display-4"><img src="data:image/jpeg;base64,/9j/ alt=""></h1>
<h1 >FULL_NAME: <?=$user['full_name']?></h1>
<p class = "lead">EMAIL: <?=$user['email']?></p>
<hr class="my-4">
<input type="text" value="<?=$user['full_name']?>" class="form-control" name="full_name">

<button class="mt-4 btn btn-primary">Change fullname</button>
<a href="mybasket.php" class="btn btn-outline-dark btn-sm float-right mt-3">MY BASKET</a>
</form>
</div>
<?php
}
}
?>
</div>
</div>
</div>

 

<?php
if (isset($_GET['errorpassword'])) {
?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
Incorrect password
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php
}
?>
<?php
if(isset($_GET['erroremail'])) {
?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
Incorrect email!
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php
}
?>

<form action="signInDb.php" method="post">
<div class="form-group">
<label for="">EMAIL</label>
<input type="email" name="email" placeholder="Enter email" class="form-control">
</div>
<div class="form-group">
<label for="">PASSWORD</label>
<input type="password" name="password" placeholder="Enter password" class="form-control">
</div>
<div class="form-group">
<button class="btn btn-primary">Sign in</button>
</div>
</form>
</div>
</div>
</div>

 


<?php

 

 

<li class="nav-item">
<a class="nav-link" href="kids.php"><?=$langarr[$lang]['FOR_SPORT']?></a>
</li>
<li class="nav-item">
<a class="nav-link" href="female.php"><?=$langarr[$lang]['FOR_WALK']?></a>
</li>
<li class="nav-item">
<a class="nav-link" href="male.php"><?=$langarr[$lang]['FOR_ROAD']?></a>
</li>
<li class="nav-item">
<a class="nav-link" href="elders.php"><?=$langarr[$lang]['FOR_MOUNTAIN']?></a>
</li>

 

<form class="d-flex" method = "get" action = "search.php">
<input class="form-control me-2" type="search" placeholder="Search" name="search" aria-label="Search">
<button class="btn btn-outline-success" type="submit">Search</button>
</form>

<div class="container">
<div class="row mt-5">
<div class="col-sm-8 mx-auto">
<?php
if(isset($_GET['success'])) {
?>
<div class="alert alert-success alert-dismissible fade show" role="alert">
successfully changed!
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php
}if(isset($_GET['error'])) {
?>
<div class="alert alert-danger alert-dismissible fade show" role="alert">
Something went wrong!
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<?php
}
?>
<?php
if(isset($_SESSION['user'])) {
$user = $_SESSION['user'];
$myorders = seeMyOrders($user['id']);
if ($myorders!=null) {
foreach ($myorders as $myorder) {
?>
<div class="jumbotron">
<img width="300" src="uploads/<?=$myorder['img']?>" alt="">-->

<h1>NAME OF CLOTH: <?=$myorder['name']?></h1>
<p class = "lead">PRICE: <?=$myorder['price']?></p>
<hr class="my-4">
<h3>Amount: <?=$myorder['amount']?></h3>
ORDERED AT <?=$myorder['time']?>
</div>
<?php
}
}
}
?>
</div>
</div>
</div>
<!-- Button trigger modal -->
<!-- Modal -->
<div class="modal fade" id="delete" data-backdrop="static" data-keyboard="false" tabindex="-1" aria-labelledby="staticBackdropLabel" aria-hidden="true">
<form action="delete.php" method="post">
<input type="hidden" value="<?=$user['id']?>" name="id">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="staticBackdropLabel">DELETE CLIENT</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
ARE YOU SURE?
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-danger">YES</button>
</div>
</div>
</form>
</div>
</div>

 

<form action="addClothestoDb.php" method="post" enctype="multipart/form-data">
<div class="form-group">
<label for="">NAME OF CLOTH</label>
<input type="text" name="name" placeholder="Enter name" class="form-control">
</div>
<div class="form-group">
<label for="">CATEGORY</label>
<select name="category" class="form-control">
<?php
$categories = getAllCategories();
if($categories!=null) {
foreach ($categories as $category) {
?>
<option value="<?=$category['id']?>"><?=$category['name']?></option>
<?php
}
}
?>
</select>
</div>
<div class="form-group">
<label for="">PRICE</label>
<input type="number" name="price" placeholder="Enter price" class="form-control">
</div>
<div class="form-group">
<label for="">CHOOSE A IMG</label>
<input type="file" name="my_image">
</div>
<div class="form-group">
<button class="btn btn-primary btn-sm">SAVE</button>
</div>
</form>

<div class="container">
<div class="row mt-5">
<div class="col-sm-12">
<table class="table">
<thead class="badge-dark">
<tr>
<th>ID</th>
<th>FULL_NAME</th>
<th>EMAIL</th>
<th>PASSWORD</th>
<th>ROLE_ID</th>
<th>DETAILS</th>
</tr>
</thead>
<?php
$users = getAll();
if ($users!=null) {
foreach ($users as $user) {
?>
<tbody>
<tr>
<td><?=$user['id']?></td>
<td><?=$user['full_name']?></td>
<td><?=$user['email']?></td>
<td><?=$user['password']?></td>
<td><?=$user['role_id']?></td>
<td><a href="details.php?id=<?=$user['id']?>" class="btn btn-primary btn-sm">DETAILS</a></td>
</tr>
</tbody>
<?php
}
}
?>
</table>
</div>
</div>
</div>

3.2 Руководство пользователя

Диаграмма ER, физическая база данных в доступе MS

Цель:

Научиться создавать диаграмму ER базы данных для информационной системы и использовать ее для создания физической базы данных в MS Access;

Задачи:

· Создание диаграммы UML ER;

· Создание физической базы данных на примере MS Access;

· Создание диаграммы UML ER;

· Модель ER описывает данные как сущности, отношения и атрибуты.

Рисунок 1 представляет основные правила рисования диаграммы ER. (Эльмасри и Навате, 2011)

 

 

Рисунок 1 - Правила рисования диаграммы ER(Оракул, 2000)

 

Давайте нарисуем диаграмму ER приложения заказа на покупку (рисунок 2).(Оракул, 2000)

Рисунок 2

Следующим шагом является составление плана схемы базы данных. Для этого вы разложите диаграмму ER на следующие таблицы баз данных:

· Роли

· Пользователей

· Категории

· Заказа товаров

Необходимо определить основной ключ и иностранные ключи сущности. Основным ключом является столбец (или комбинация столбцов), значения которого однозначно идентифицируют каждую строку в таблице. Иностранный ключ — это столбец (или комбинация столбцов), значения которого соответствуют основному ключу в другой таблице.

 

План Схемы для заказа на покупку

 

 

Роли

Это роли пользователей и администратора, модератора(пользователь может купить или арендовать велосипеды, администратор может удалить или добавить пользователей, модератор может добавлять продукты)

Пользователей

Это пользователи, которые могут арендовать велосипеды.

Велосипед

Это продукты, которые добавляют модератора на сайт

Категории

Велосипеды имеют свои категории, которые пользователь может выбрать велосипеды по категориям. Например, гора или улица и т.д.

Заказы

Это заказы, которые купили или арендовали велосипеды через веб-сайт

 

Создание таблиц баз данных.

1.1. Создание физической базы данных в ms Access

1. Откройте Microsoft Access 2016 и выберите "Blank Database"

 

 

2. Добавить столбцы в таблицу

3. Заполните таблицу или измените "Вид" для проектирования и редактирования имен столбца и их типов. Введите название сущности.

 

4. Добавление столбцов в таблицу и определение типов данных

 

 


5. Вы можете установить или изменить "Первичный ключ" с помощью кнопки "Первичный ключ"

 

6. Создать еще одну кнопку нажатия таблицы "Таблица" во вкладке "Создать"

Повторите те же шаги для создания таблиц "роли" и "пользователи"

 

7. Затем определите отношения между таблицами. Нажмите Отношения из вкладки Инструменты базы данны



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2022-06-20 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: