Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

Разработка сайта интернет-магазина фильмов «FilmStore»

Содержание:

Введение

Итогом разработки данной курсовой работы должен стать сайт интернет-магазина фильмов.

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

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

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

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

Так же будет присутствовать проверка и разграничение прав доступа к различному контенту сайта в зависимости от прав пользователя.

  1. Техническое задание и выбор средств реализации.

В качестве web-приложения в данном проекте будет выступать интернет- магазин “FilmStore” ориентирующийся на продаже цифровых версии фильмов различных жанров.

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

Для реализации статической части сайта был выбран текстовый редактор Atom.

2.1 Atom

Atom (в прошлом Atomicity) — бесплатный текстовый редактор с открытым исходным кодом для Linux, macOS, Windows с поддержкой плагинов, написанных на Node.js, и встраиваемых под управлением Git. Большинство плагинов имеют статус свободного программного обеспечения, разрабатываются и поддерживаются сообществом.

Atom основан на Electron (ранее известный как Atom Shell) — фреймворке кросс-платформенной разработки с использованием Chromium и io.js. Редактор написан на CoffeeScript и LESS. Версия 1.0 была выпущена 25 июня 2015 г.

Поддержка языков

Поддерживаются следующие языки (со стандартными плагинами) в версии v1.5.1:

C/C++, C#, Clojure, CSS, CoffeeScript, Markdown (GitHub Flavored), Go, Git, HTML, JavaScript, Java, JSON, Julia, Less, Make, Mustache, Objective-C, PHP, Perl, Property List (Apple), Python, Ruby on Rails, Ruby, Sass, Shell script, Scala, SQL, TOML, XML, YAML (Все языки).

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

Полный состав данного платформы изображен на рисунке 1.

Рисунок 1

В качестве системы управления базы данных у меня выступает MySQL -5.7, так же для администрирования СУБД MySQL я выбрал приложение phpMyAdmin.

2.2 MySQL 

MySQL — свободная реляционная система управления базами данных. Разработку и поддержку MySQL осуществляет корпорация Oracle, получившая права на торговую марку вместе с поглощённой Sun Microsystems, которая ранее приобрела шведскую компанию MySQL AB. Продукт распространяется как под GNU General Public License, так и под собственной коммерческой лицензией. Помимо этого, разработчики создают функциональность по заказу лицензионных пользователей. Именно благодаря такому заказу почти в самых ранних версиях появился механизм репликации.

Входит в состав серверов WAMP, AppServ, LAMP и в портативные сборки серверов Денвер, XAMPP, VertrigoServ. Обычно MySQL используется в качестве сервера, к которому обращаются локальные или удалённые клиенты, однако в дистрибутив входит библиотека внутреннего сервера, позволяющая включать MySQL в автономные программы.

MySQL 5.7

Первая версия ветки MySQL 5.7.1 анонсирована 23 апреля 2013. Версия MySQL 5.7.8 адаптирована для Debian 8 и Ubuntu 15.04. Последний релиз — 5.7.24 от 22.10.2018.

2.3 phpMyAdmin

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

Приложение распространяется под лицензией GNU General Public License и поэтому многие другие разработчики интегрируют его в свои разработки, например XAMPP, Denwer, AppServ, Open Server.

2.4 PHP

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

В области веб-программирования, в частности серверной части, PHP — один из популярных сценарных языков (наряду с JSP, Perl и языками, используемыми в ASP.NET).

Популярность в области построения веб-сайтов определяется наличием большого набора встроенных средств и дополнительных модулей для разработки веб-приложений.

Основные из них:

- автоматическое извлечение POST- и GET-параметров, а также переменных окружения веб-сервера в предопределённые массивы;

- взаимодействие с большим количеством различных систем управления базами данных через дополнительные модули (MySQL, MySQLi, SQLite, PostgreSQL, Oracle (OCI8), Oracle, Microsoft SQL Server, Sybase, ODBC, mSQL, IBM DB2, Cloudscape и Apache Derby, Informix, Ovrimos SQL, Lotus Notes, DB++, DBM, dBase, DBX, FrontBase, FilePro, Ingres II, SESAM, Firebird / InterBase, Paradox File Access, MaxDB, Интерфейс PDO), Redis;

- автоматизированная отправка HTTP-заголовков;

- работа с HTTP-авторизацией;

- работа с cookies и сессиями;

- работа с локальными и удалёнными файлами, сокетами;

- обработка файлов, загружаемых на сервер;

- работа с XForms.

  1. Описание модулей серверной части программы и их взаимодействие

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

Схема взаимосвязь программных модулей представлена на рисунке 2.

Схема взаимосвязи программных модулей

Рисунок 2

Описание программных модулей

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

Модуль проверки данных регистрации - отвечает за правильность вводимой информации при регистрации, а именно проверяет длину вводимых данных (поле имя – не меньше двух символов и не больше пятнадцати; поле логин – не меньше четырех символов и не больше пятнадцати; поле пароль – так же не меньше четырех символов и не больше пятнадцати.

Модуль проверки данных авторизации - отвечает за правильность вводимого логина и пароля. После того, как пользователь введет свои данные и нажмет кнопку «Авторизоваться», будет отправлен запрос в базу на проверку наличия таких данных в базе и проверку правильности написания этих данных. Если пользователь совершит ошибку в поле логина или пароля, или же попробует войти без регистрации, то выведется окно с ошибкой:

После чего покупатель должен будет вернуться к форме авторизации и ввести свои данные правильно.

Модуль обработки информации - отвечает за обработку информации, которая вводится в формы регистрации и авторизации.

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

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

Дерево функций

Рисунок 3

  1. Описание структуры базы данных и ее функций

База данных «film_store» проекта состоит из двух таблиц: таблицы «films» и таблицы «users». База данных представлена на рисунке 4.

База данных «film_store»

Рисунок 4

Таблица «films» - основная таблица со всем контентом на сайте, в свою очередь состоит из следующих полей:

Поле «id» - представляет собой идентификатор объекта базы данных;

Поле «image» - хранит в себе путь к картинкам, которые лежат в директории «img» и выводятся на сайте;

Поле «title» - строка заголовка или иначе названия фильмов, представленных на сайте;

Поле «mini_desc» - мини описание каждого фильма, приводимого на главной странице сайта;

Поле «description» - полное описание фильма, которое показывается на странице single.php;

Поле «price» - поле, в котором отражена цена фильма.

Таблица «films» показана на рисунке 5, 5.1

Таблица «films»

Рисунок 5

Таблица «films»

Рисунок 5.1

Таблица «users» - показывает всех пользователей, которые зарегистрированы на сайте. Состоит из четырёх полей:

Поле «id» - идентификатор пользователя базы данных;

Поле «name» - хранит в себе имя, введенное пользователем при регистрации;

Поле «login» - хранит логин пользователя, введенный при регистрации;

Поле «password» - хранит пароль, введенный пользователем при регистрации.

Таблица «users» изображена на рисунке 6, 6.1.

Таблица «users»

Рисунок 6

Таблица «users»

Рисунок 6.1

  1. Описание структуры клиентской части.

В данной главе мы опишем следующие информационные разделы сайта:

- главную страницу сайта;

- раздел сайта «О нас»;

- раздел сайта «Связаться с нами»;

- раздел сайта «Корзина»;

- форму регистрации и авторизации на сайте;

- профиль покупателя;

- подробное описание товара;

- форму заказа товара;

Код всех страниц представлен в Приложении 1 в разделе Приложения.

5.1 Главная страница

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

Таким образом, к основным целям главной страницы относятся: презентация компании, привлечение аудитории и представление возможных услуг и/или товаров.

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

  • блок с логотипом сайта и его слоганом (выполняет функцию приветствия покупателя и его завлечения)
  • сами товары (с кратким описанием, ценой и кнопкой «Подробнее» ведущей к подробному описанию фильма с возможностью его покупки (по умолчанию отключена))
  • верхнее навигационное меню (с основными разделами сайта)

Главная страница сайта представлена на рисунке 7

Главная страница

Рисунок 7

5.2 Раздел сайта «О нас»

Раздел магазина «О нас» отражает подробное описание сайта, его направленность, показывает окружение, на которое рассчитан сайт, а также приводит свои преимущества перед остальными похожими интернет-магазинами.

Данную страницу можно увидеть на рисунке 8

Страница «О нас»

Рисунок 8

5.3 Раздел сайта «Связаться с нами»

Следующий раздел нашего магазина назван «Связаться снами».

В нем отражена контактная связь с администрацией сайта, которая состоит из:

- телефона магазина;

- адреса магазина;

- личной электронной почты;

- личной ссылки в социальных сетях;

Данную страницу можно увидеть на рисунок 9

Страница «Связаться с нами»

Рисунок 9

5.4 Раздел «Корзина»

В разделе «Корзина» покупатель может увидеть свои покупки совершенные на сайте, продолжить покупки, удалить товар из корзины, а также оформить заказ.

Страница пустой корзины представлена на рисунке 10, а с товарами на рисунке 11.

Пустая «Корзина»

Рисунок 10

Полная «Корзина»

Рисунок 11

5.5 Форма «Регистрации» и «Авторизации»

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

Форма регистрации на нашем сайте содержит следующие поля:

- «Введите имя» - длина имени должна быть не меньше 2 символов;

- «Введите логин» - длина логина должна быть не меньше 4 символов и не больше 90 символов;

- «Введите пароль» - длина пароля должна составлять не меньше 4 символов и не больше 90 символов;

После нажатия на кнопку «Зарегистрироваться» данные, введенные покупателем, сразу попадают в базу данных, а форма автоматически переключается на форму «Авторизация».

Форма авторизации

- «Введите логин» - ввод своего логина, указанного при регистрации;

- «Введите пароль» - ввод пароля, указанного при регистрации;

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

Форму регистрации и авторизации можно увидеть на рисунках 12 и 13.

Форма «Регистрация»

Рисунок 12

Форма «Авторизация»

Рисунок 13

5.6 Раздел «Профиль»

Раздел «Профиль» состоит из двух частей. В правой части покупатель может посмотреть свою коллекцию фильмов, которые он уже купил, проверить свой баланс в магазине, увидеть фильмы, которые он добавил в избранные, посмотреть свои желания, а также заглянуть в настройки профиля. В левой части профиля пользователь может изменить свое фото профиля и добавить какую-либо информацию. Увидеть страницу профиля можно на рисунке 14.

Страница «Профиль»

Рисунок 14

5.7 Раздел подробного описания товара

На этой странице покупатель может более подробно ознакомиться с выбранным фильмом и, если он вошел в свою учетную запись в магазине, добавить товар в корзину, либо сразу же купить его. Увидеть страницу подробного описания авторизованного и не авторизованного пользователя можно на рисунке 15 и 15.1.

Страница «Подробнее» не авторизованного пользователя

Рисунок 15

Страница «Подробнее» авторизованного пользователя

Рисунок 15.1

5.8 Страница сайта «Заказ»

На странице «Заказ» авторизованный покупатель может произвести покупку выбранных фильмов. Для этого необходимо заполнить поля, указанные в форме и нажать кнопку «Заказать». Посмотреть на данную страницу можно на рисунке 16.

Страница «Заказ»

Рисунок 16

5.9 Инструкция пользователя.

Для того чтобы совершить покупку фильма в интернет-магазине «FilmStore», покупатель должен выполнить следующие шаги:

  1. Нажать на кнопку «Регистрация» в верхнем меню

  1. Ввести данные в форму «Регистрации» и анажать кнопку «зарегистрироваться»

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

  1. Заполнить форму «Авторизация» и нажать кнопку «авторизоваться»

Далее пользователя перекидывает на главную страницу магазина

  1. Выбрать понравившийся фильм и нажать «Подробнее» в нижней части карточки фильма

  1. Далее покупатель может либо положить товар в корзину (нажав на кнопку «Добавить в корзину» и продолжить покупки на сайте (кнопка «Продолжить покупки»), либо сразу же перейти к покупке выбранного фильма (кнопка «Купить в 1 клик»)

  1. После того как товар оказался в корзине, нужно нажать кнопку «Оформить заказ»

  1. Заполнить приведенную форму заказа и нажать на кнопку «Заказать», либо если покупатель вдруг перехотел покупать какой-либо фильм нажать «Изменить заказ»

Поздравляю!! Заказ совершен.

6. Заключение

В результате выполнения данной курсовой работы был разработан сайт интернет-магазина фильмов «FilmStore».

Визуальная составляющая сайта была построена с помощью HTML и CSS, а серверную часть держат PHP и MySQL.

Функционал сайта позволяет выполнять возложенные на него обязанности. Тестирование сайта проводилось в браузере Opera 68.0.

  1. Список использованной литературы

  2. https://ru.wikipedia.org/wiki/Atom_(текстовый_редактор);
  3. https://ru.wikipedia.org/wiki/PhpMyAdmin;
  4. https://ru.wikipedia.org/wiki/PHP;
  5. https://ru.wikipedia.org/wiki/MySQL;
  6. https://ospanel.io.
  7. Приложения

Приложение 1

Страница подключения к базе данных db.php

<?php

$host = "localhost";

$user = "root";

$pass = "";

$db_name = "film_store";

$connection = mysqli_connect($host, $user, $pass, $db_name);

if (mysqli_connect_errno()) {

die("Data Base connection failed: " . mysqli_connect_error() . " (" . mysqli_connect_errno() . ")");

} else {

# echo "Connection = success!\n" . mysqli_get_host_info($connection) . "<br />";

}

mysqli_query($connection, "SET NAMES utf8");

?>

Главная страница index.php

<?php

session_start();

require_once "db.php";

$query = "SELECT * FROM films";

$req = mysqli_query($connection, $query);

$data_from_db = [];

while ($result = mysqli_fetch_assoc($req)) {

$data_from_db[] = $result;

}

?>

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="utf-8">

<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<title>Film store</title>

<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

<!-- Custom styles for this template -->

<link href="css/shop-homepage.css" rel="stylesheet">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">

<title></title>

</head>

<style>

.card {

width: 350px;

height: 850px;

float: left;

background: #fff;

color: #000;

margin: 0 20px;

margin-left: 6.5%;

margin-bottom: 35px;

padding: 10px ;

padding-top: 10px;

}

</style>

<body>

<!-- Navigation -->

<?php require "header.php" ?>

<div class="container">

<div class="jumbotron jumbotron-fluid">

<div class="container">

<h1 class="display-4">Film store</h1>

<p class="lead">Лучшие фильмы, лучшее качество, лучшие цены.</p>

</div>

</div>

<div class="row">

<div class="col-lg-12">

<div class="row">

<?php foreach ($data_from_db as $card): ?>

<div class="main-card">

<div class="card">

<img class="card-img-top" src="<?php echo $card['image']?>" width="600" height="400" alt="">

<div class="card-body">

<h2>

<?php echo $card['title']?>

</h2>

<p>

<?php echo $card['mini_desc']?>

</p>

<p><strong>

<?php echo $card['price']?> руб

</strong></p>

<a class="btn btn-outline-secondary" href="single.php?id=<?php echo $card['id']?>">

Подробнее

</a>

</div>

</div>

</div>

<?php endforeach; ?>

</div>

</div>

</div>

</div>

<?php require "footer.php" ?>

</body>

</html>

Страница «О нас» about.php

<?php

session_start();

require_once "db.php";

?>

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="UTF-8">

<title>FilmStore</title>

<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

<link href="css/shop-homepage.css" rel="stylesheet">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">

</head>

<style>

.card {

width: 850px;

height: 550px;

float: left;

margin: 35px 20px;

margin-left: 10%;

margin-top: 9%;

margin-bottom: 10.2%;

padding: 10px ;

padding-top: 10px;

}

</style>

<body>

<?php require "header.php" ?>

<div class="container">

<div class="row">

<div class="card">

<div class="card-body">

<h1>Уважаемые любители кино!</h1><br>

<p>&nbsp&nbsp&nbsp&nbspНаш интернет-магазин фильмов <b>FilmStore</b> предлагает вашему вниманию самые разные коллекции фильмов.

Покупая у нас фильмы, Вы не просто приобретаете коллекцию фильмов и мультфильмов, но также сможете окунуться в мир приключений и фантастики.<br><br>&nbsp&nbsp&nbsp&nbspНаши коллекции фильмов постоянно пополняются новинками кинопроката от Нашей компании.

Интернет-магазин <b>FilmStore</b> – это отличная находка для любого киномана и просто отличный подарок для всей семьи,ведь Вы имеете возможность получить лучшие произведения мирового и отечественного кинематографа за самую низкую цену и с удовольствием смотреть фильмы каждый день. Вы оплачиваете фильм всего один раз и смотрите его сколько угодно, ведь он навсегда сохранится в вашей библиотеке фильмов.

<br><br>&nbsp&nbsp&nbsp&nbspПокупая фильмы в <b>FilmStore</b> Вы всегда будете иметь личную коллекцию фильмов под рукой. Смотреть фильмы <b>FilmStore</b> можно как на современных ТВ,так и на компьютере или планшете(IPAD),домашнем кинотеатре. Достаточно просто оплатить понравившийся фильм и через мгновенье можно уже наслаждаться его просмотром.</p>

</div>

</div>

</div>

</div>

<?php require "footer.php" ?>

</body>

</html>

Страница «Связаться с нами» contact.php

<?php

session_start();

require_once "db.php";

?>

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="UTF-8">

<title>FilmStore</title>

<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

<link href="css/shop-homepage.css" rel="stylesheet">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">

</head>

<style>

.card {

width: 500px;

height: 300px;

float: left;

margin: 35px 20px;

margin-left: 25%;

margin-top: 20%;

margin-bottom: 21.1%;

padding: 10px;

padding-top: 10px;

}

</style>

<body>

<?php require "header.php" ?>

<div class="container">

<div class="row">

<div class="card">

<div class="card-body">

<h1>Как с нами связаться</h1>

<p>Наш телефон: 8(495)777-77-77</p>

<p>Наш адрес: Москва, Багратионовский пр. 7, корп. 1</p>

<p>Наша почта: filmstore@mail.ru</p>

<p>Мы в соц. сетях:

<a class="btn btn-outline-secondary" href="/" title="Группа ВК" target="_blank">VK</a>

</p>

</div>

</div>

</div>

</div>

<?php require "footer.php" ?>

</body>

</html>

Страница «Корзина» cart.php

<?php

session_start();

require_once "db.php";

require_once "functions.php";

if ( isset($_GET['delete_id']) && isset($_SESSION['cart_list']) ) {

foreach ($_SESSION['cart_list'] as $key => $value) {

if ( $value['id'] == $_GET['delete_id'] ) {

unset($_SESSION['cart_list'][$key]);

}

}

}

if ( isset($_GET['card_id']) && !empty($_GET['card_id']) ) {

$current_added_card = get_card_by_id($_GET['card_id']);

if ( !empty($current_added_card) ) {

if ( !isset($_SESSION['cart_list'])) {

$_SESSION['cart_list'][] = $current_added_card;

}

$films_check = false;

if ( isset($_SESSION['cart_list']) ) {

foreach ($_SESSION['cart_list'] as $value) {

if ( $value['id'] == $current_added_card['id'] ) {

$films_check = true;

}

}

}

if ( !$films_check ) {

$_SESSION['cart_list'][] = $current_added_card;

}

} else {

header("Location: 404.php");

}

}

// var_dump($_SESSION);

?>

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="UTF-8">

<title>FilmStore</title>

<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

<link href="css/shop-homepage.css" rel="stylesheet">

</head>

<style>

.card {

width: 500px;

height: 300px;

float: left;

margin: 35px 20px;

margin-left: 25%;

margin-top: 10%;

margin-bottom: 27%;

padding: 10px;

padding-top: 10px;

}

.card a {

width: 150px;

margin-right: 3%;

}

</style>

<body>

<?php require "header.php" ?>

<div class="container">

<div class="row">

<div class="card">

<div class="card-body">

<h1>Корзина</h1>

<?php if ( isset($_SESSION['cart_list']) && count($_SESSION['cart_list']) !=0 ) : ?>

<ul>

<?php foreach( $_SESSION['cart_list'] as $card ) : ?>

<li>

<?php echo $card['title']; ?> |

<?php echo $card['price']; ?> руб. |

<a href="cart.php?delete_id=<?php echo $card['id'];?>">Удалить</a>

</li>

<?php endforeach; ?>

</ul>

<?php else : ?>

<p>

Ваша корзина пуста

</p>

<?php endif; ?>

<a class="btn btn-outline-secondary" href="index.php">Продолжить покупки</a>

<a class="btn btn-outline-secondary" href="order.php">Оформить заказ</a>

</div>

</div>

</div>

</div>

<?php require "footer.php" ?>

</body>

</html>

Страница формы «Регистрация» reg.php

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="utf-8">

<title>FilmStore</title>

<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

<link href="css/shop-homepage.css" rel="stylesheet">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">

</head>

<style>

.card {

width: 850px;

height: 500px;

float: left;

margin: 35px 20px;

margin-left: 10%;

margin-top: 9%;

margin-bottom: 14.6%;

padding: 10px;

padding-top: 10px;

}

</style>

<body>

<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">

<div class="container">

<a class="navbar-brand" href="/">FilmStore</a>

<div class="collapse navbar-collapse" id="navbarResponsive">

<ul class="navbar-nav ml-auto">

<li class="nav-item">

<a class="nav-link" href="index.php">Главная

<span class="sr-only">(current)</span>

</a>

</li>

<li class="nav-item">

<a class="nav-link" href="about.php">О нас</a>

</li>

<li class="nav-item">

<a class="nav-link" href="contact.php">Связаться с нами</a>

</li>

</ul>

</div>

</div>

</nav>

<div class="container">

<div class="row">

<div class="card">

<div class="card-body">

<form class="box" action="check.php" method="post">

<h2>Регистрация</h2><br>

<input type="text" class="form-control" name="name" id="name" placeholder="Введите имя"><br>

<input type="text" class="form-control" name="login" id="login" placeholder="Введите логин"><br>

<input type="password" class="form-control" name="password" id="password" placeholder="Введите пароль"><br>

<button class="btn btn-outline-secondary" type="submit">Зарегистрироваться</button><br><br>

<p>Либо</p> <a class="btn btn-outline-secondary" href="auth.php">Авторизоваться</a>

</form>

</div>

</div>

</div>

</div>

<?php require "footer.php" ?>

</body>

</html>

Страница формы «Авторизация» auht.php

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="utf-8">

<title>FilmStore</title>

<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

<link href="css/shop-homepage.css" rel="stylesheet">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">

</head>

<style>

.card {

width: 650px;

height: 500px;

float: left;

margin: 35px 20px;

margin-left: 25%;

margin-top: 9%;

margin-bottom: 14.6%;

padding: 10px;

padding-top: 10px;

}

</style>

<body>

<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">

<div class="container">

<a class="navbar-brand" href="/">FilmStore</a>

<div class="collapse navbar-collapse" id="navbarResponsive">

<ul class="navbar-nav ml-auto">

<li class="nav-item">

<a class="nav-link" href="index.php">Главная

<span class="sr-only">(current)</span>

</a>

</li>

<li class="nav-item">

<a class="nav-link" href="about.php">О нас</a>

</li>

<li class="nav-item">

<a class="nav-link" href="contact.php">Связаться с нами</a>

</li>

</ul>

</div>

</div>

</nav>

<div class="container">

<div class="row">

<div class="card">

<div class="card-body">

<form class="box" action="checkauth.php" method="post">

<h2>Авторизация</h2><br>

<input type="text" class="form-control" name="login" id="login" placeholder="Введите логин"><br>

<input type="password" class="form-control" name="password" id="password" placeholder="Введите пароль"><br>

<button class="btn btn-outline-secondary" type="submit">Авторизоваться</button><br><br>

<p>Еще не зарегистрированы?</p> <a class="btn btn-outline-secondary" href="reg.php">Зарегистрируйтесь!</a>

</form>

</div>

</div>

</div>

</div>

<?php require "footer.php" ?>

</body>

</html>

Страница «Профиль» profile.php

<?php

session_start();

require_once "db.php";

?>

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="utf-8">

<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

<link href="css/shop-homepage.css" rel="stylesheet">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">

<title>Film store</title>

</head>

<style>

.container2 {

width: 900px;

height: 600px;

border: 1px solid #000;

margin: 0 auto;

margin-top: 80px;

margin-bottom: 90px;

border-radius: 1%;

border-color: #dcdde1;

}

.left_block {

width: 350px;

height: 600px;

border: 1px solid #000;

margin-right: 40%;

border-radius: 2%;

border-color: #dcdde1;

}

h3 {

padding-left: 20%;

}

.left_block button {

margin-left: 20%;

cursor: pointer;

padding-left: 10%;

padding-right: 10%;

}

.left_block button[name = Баланс] {

padding-left: 11%;

padding-right: 11%;

}

.left_block button[name = Избранное] {

padding-left: 12%;

padding-right: 12%;

}

.left_block button[name = Желания] {

padding-left: 14.5%;

padding-right: 14.5%;

}

.left_block button[name = Настройки] {

padding-left: 12.5%;

padding-right: 12.5%;

}

.row {

width: 350px;

margin-left: -0.5%;

border-radius: 5%;

padding-top: 2%;

padding-bottom: 4%;

}

.right_block {

width: 500px;

height: 600px;

margin-left: 44.5%;

margin-top: -67%;

border-radius: 2%;

}

h4 {

text-align: center;

font-size: 2em;

}

.row2 {

padding: 2% 0 2% 0;

}

img {

margin-top: 6%;

margin-left: 5%;

border-radius: 50%;

}

button {

margin-left: 7%;

}

.box {

width: 200px;

height: 300px;

margin-left: 50%;

margin-top: -50%;

}

</style>

<body>

<nav class="navbar navbar-expand-lg navbar-dark bg-dark fixed-top">

<div class="container">

<a class="navbar-brand" href="/">FilmStore</a>

<div class="collapse navbar-collapse" id="navbarResponsive">

<ul class="navbar-nav ml-auto">

<li class="nav-item">

<a class="nav-link" href="index.php">Главная

<span class="sr-only">(current)</span>

</a>

</li>

<li class="nav-item">

<a class="nav-link" href="about.php">О нас</a>

</li>

<li class="nav-item">

<a class="nav-link" href="contact.php">Связаться с нами</a>

</li>

<li class="nav-item">

<a class="nav-link" href="cart.php">Корзина

<span id="cart_count">

<?php

if (isset ($_SESSION['cart_list'])) {

echo count($_SESSION['cart_list']);

} ?>

</span></a>

</li>

<li class="nav-item">

<a class="nav-link" href="exit.php">Выйти</a>

</li>

</ul>

</div>

</div>

</nav>

<div class="container2">

<div class="left_block">

<div class="row">

<h3>Меню профиля</h3>

</div><br><br>

<button class="btn btn-outline-secondary" name="Мои фильмы">Мои фильмы</button><br><br>

<button class="btn btn-outline-secondary" name="Баланс">Мой баланс</button><br><br>

<button class="btn btn-outline-secondary" name="Избранное">Избранное</button><br><br>

<button class="btn btn-outline-secondary" name="Желания">Желания</button><br><br>

<button class="btn btn-outline-secondary" name="Настройки">Настройки</button>

</div>

<div class="right_block">

<div class="row2">

<h4>Мой профиль</h4>

</div>

<img src="img/logo.jpg" width="150" height="200"><br><br>

<button class="btn btn-outline-secondary">Редактировать</button>

<div class="box">

Профиль пока что пустой

</div>

</div>

</div>

<?php require "footer.php" ?>

</body>

</html>

Страница «подробного описания» фильма single.php

<?php

session_start();

//if (isset($_SESSION['cart_list'])) {

// echo "КОРЗИНА: " . count($_SESSION['cart_list']) . " шт";

//}

require_once "db.php";

if ( isset($_GET['id']) ) {

$query = "SELECT * FROM films WHERE id=" . $_GET['id'];

$req = mysqli_query($connection, $query);

$current_card = mysqli_fetch_assoc($req);

// var_dump($current_film);

if (empty($current_card)) {

header("Location: 404.php");

}

}

?>

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="UTF-8">

<title>FilmStore</title>

<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

<link href="css/shop-homepage.css" rel="stylesheet">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">

</head>

<style>

.card {

width: 1100px;

height: auto;

float: left;

margin: 35px 20px;

margin-left: 10%;

padding: 10px ;

padding-top: 10px;

}

</style>

<body>

<?php require "header.php" ?>

<div class="container">

<div class="row">

<div class="card">

<div class="card-body">

<h1>

<?php echo $current_card['title']?>

</h1>

<p>

<?php echo $current_card['decsription']?>

</p>

<p><strong>

<?php echo $current_card['price']?> руб

</strong></p>

<?php

if($_COOKIE['user'] == ''): ?>

<?php else: ?>

<a class="btn btn-outline-secondary" href="order.php?title=<?php echo $current_card['title']?>">Купить в 1 клик</a><br><br>

<a class="btn btn-outline-secondary" href="cart.php?card_id=<?php echo $current_card['id']?>">Добавить в корзину</a>

<?php endif; ?>

</div>

</div>

</div>

</div>

<?php require "footer.php" ?>

</body>

</html>

Страница «Заказ» order.php

<?php

session_start();

?>

<!DOCTYPE html>

<html lang="ru">

<head>

<meta charset="UTF-8">

<title>FilmStore</title>

<link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet">

<link href="css/shop-homepage.css" rel="stylesheet">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">

</head>

<style>

.card {

width: 500px;

height: auto;

float: left;

margin: 35px 20px;

margin-left: 25%;

margin-top: 15%;

margin-bottom: 23.9%;

padding: 10px;

padding-top: 10px;

}

</style>

<body>

<?php require "header.php" ?>

<div class="container">

<div class="row">

<div class="card">

<div class="card-body">

<h1>Заказ</h1>

<form>

<?php if ( isset($_GET['title']) ) : ?>

<p>Вы заказываете фильм: <?php echo $_GET['title']; ?></p>

<?php elseif ( isset($_SESSION['cart_list']) ) : ?>

<ul>

<?php foreach( $_SESSION['cart_list'] as $card ) : ?>

<li><?php echo $card['title']; ?> | <?php echo $card['price']; ?> руб.</li>

<?php endforeach; ?>

</ul>

<p>

<a class="btn btn-outline-secondary" href="cart.php">Изменить заказ</a>

</p>

<?php endif; ?>

<form class="contact_form" action="#" method="post" name="contact_form">

<input type="text" class="form-control" name="name" id="name" placeholder="Введите имя"><br>

<input type="email" class="form-control" name="email" id="email" placeholder="Введите почту"><br>

<input type="mobile" class="form-control" name="mobile" id="mobile" placeholder="Введите телефон"><br>

<a class="btn btn-outline-secondary" href="contact.php">Заказать</a>

</form>

</form>

</div>

</div>

</div>

</div>

<?php require "footer.php" ?>

</body>

</html>

Страница выхода exit.php

<?php

setcookie('user', $user['name'], time() - 3600, "/");

header('Location: index.php');

?>