ВСЕ СТАТЬИ
Блог начинающего программиста
Кнопка войти через Яндекс
Регистрация
Программирование на JavaScript для начинающих 2.0

Самый востребованный язык программирования

Какой язык программирования должен знать абсолютно любой программист?

Узнай прямо сейчас!

Задания по PHP с базой данных MySQL

Опубликовано: 2017-10-08

PHP с базой данных MySQL

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

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

Задание первое

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

Условия задачи:

  • Создать форму по добавлению нового товара с требующимися полями. Форма не должна содержать поля "количество купивших товар", а в базе это поле по умолчанию имеет значение "0".
  • Обработать форму и добавить новую запись с товаром.
  • Создать форму по добавлению заказа товара. Форма не должна содержать поля "дата заказа", а в базе данных в это поле автоматически подставляется текущая дата.
  • Обработать форму и добавить новую запись с заказом.

Решение.

Сначала утилитой phpMyAdmin создадим базу данных firstbase c таблицами product и ordering.
Код SQL для базы данных firstbase:


-- phpMyAdmin SQL Dump
-- version 4.4.15.7
-- http://www.phpmyadmin.net
--
-- Хост: 127.0.0.1:3306
-- Время создания: Окт 10 2017 г., 11:54
-- Версия сервера: 5.5.50
-- Версия PHP: 5.4.45

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";

--
-- База данных: `firstbase`
--

-- --------------------------------------------------------

--
-- Структура таблицы `ordering`
--

CREATE TABLE IF NOT EXISTS `ordering` (
  `id` int(11) unsigned NOT NULL,
  `id_product` int(2) unsigned NOT NULL,
  `client` varchar(55) NOT NULL,
  `e-mail` varchar(21) NOT NULL,
  `comment` text NOT NULL,
  `date_ordering` int(11) unsigned NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `ordering`
--

INSERT INTO `ordering` (`id`, `id_product`, `client`, `e-mail`, `comment`, `date_ordering`) VALUES
(1, 1, 'Вася Пупкин', 'vacya@mail.ru', 'Рекомендую! Крайне полезная книга для новичков.', 1507618833),
(2, 3, 'Коля Питерский', 'kol@mail.ru', 'Много современных паттернов', 1507619279);

-- --------------------------------------------------------

--
-- Структура таблицы `product`
--

CREATE TABLE IF NOT EXISTS `product` (
  `id` int(11) unsigned NOT NULL,
  `product_name` varchar(50) NOT NULL,
  `product_description` varchar(255) NOT NULL,
  `full_description` text CHARACTER SET utf8mb4 NOT NULL,
  `number_sales` int(2) unsigned NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `product`
--

INSERT INTO `product` (`id`, `product_name`, `product_description`, `full_description`, `number_sales`) VALUES
(1, 'PHP — это просто.', '<p>Авторы: Дмитрий Ляпин, Александр Никитин.</p>   <p>168 страниц, CD-диск с видеоуроками.</p>   <p>2012 год выпуска.</p>   <p>Издательство	"БХВ-Петербург"</p>   <p>Мягкая обложка</p>', '<div>   Книгу о PHP "PHP — это просто. Начинаем с видеоуроков (+ CD-ROM)" можно купить в <a href="https://www.ozon.ru/context/detail/id/8465472/?partner=php_blog&from=bar"><b>магазине</b></a>. Цена книги в электронном виде - 111 руб.<br>   В книге кратко рассказано о языке HTML, необходимом для разметки веб-страниц. Подробно говорится о принципах веб-программирования на языке PHP. Излагается об использовании объектно-ориентированного программирования на PHP.<br>    Имеются материалы о работе с файлами, базами данных, обработки пользовательского ввода. Рассмотрен современный шаблон проектирования веб-приложений MVC.   </div>', 0),
(2, 'PHP. Объекты, шаблоны и методики программирования', '<p>Автор 	Мэт Зандстра.</p>   <p>576 страниц.</p>   <p>2016 год выпуска.</p>   <p>Издательство	"Вильямс"</p>   <p>Твердый переплет</p> ', '<div>   Книга "PHP. Объекты, шаблоны и методики программирования" продается в <a href="http://www.ozon.ru/context/detail/id/33506422/?partner=php_blog&from=bar"><b>магазине</b></a>. Цена книги в твердом переплете 1 539 руб.<br>   Книга начинается с рассказа об объектно-ориентированном проектировании. Изучаются материалы о классах, наследовании, инкапсуляции, рефлексии и многие другие.<br>    Имеются подробные описания концепций шаблонов проектирования, способов реализации нескольких важных шаблонов в приложениях на PHP.<br>   Важные темы: основы объектов, принципы объектно-ориентированного проектирования, лучшие методики их применения. Изучив их в комплексе, читатель сможет создавать первоклассные и отказоустойчивые программные системы.    </div>', 0),
(3, 'Приемы объектно-ориентированного проектирования. ', '<p>Авторы: Эрих Гамма, Ричард Хелм, Ральф Джонсон, Джон Влиссидес.</p>   <p>366 страниц.</p>   <p>2016 год выпуска.</p>   <p>Издательство	"Питер"</p>   <p>Мягкая обложка</p> ', '<div>   Эта книга об ООП с PHP является бестселлером, ее можно купить в <a href="http://www.ozon.ru/context/detail/id/2457392/?partner=php_blog&from=bar"><b>магазине Ozon</b></a>. Цена книги 494 руб.<br>   В книге можно найти решения типичных задач объектно-ориентированного проектирования. Рассказано о шаблонах, как их выбирать, применять. Имеется каталог шаблонов с их описанием.<br>    Внимательное изучение данной книги будет полезно и опытным программистам, чтобы структурировать понимание объектно-ориентированного проектирования, и новичкам, чтобы избегать некачественных и нерасширяемых решений.   </div>', 0);

--
-- Индексы сохранённых таблиц
--

--
-- Индексы таблицы `ordering`
--
ALTER TABLE `ordering`
  ADD PRIMARY KEY (`id`);

--
-- Индексы таблицы `product`
--
ALTER TABLE `product`
  ADD PRIMARY KEY (`id`);

--
-- AUTO_INCREMENT для сохранённых таблиц
--

--
-- AUTO_INCREMENT для таблицы `ordering`
--
ALTER TABLE `ordering`
  MODIFY `id` int(11) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=3;
--
-- AUTO_INCREMENT для таблицы `product`
--
ALTER TABLE `product`
  MODIFY `id` int(11) unsigned NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=4;
        

Создадим файл в формате HTML с формами для добавления товара в базу данных и оформления заказа form.html. В форме "Заказы" в поле "Номер выбранного товара" подставляется значение уникального индекса, выбранного товара, из таблицы product базы данных firstbase.

Файл form.html:


<!DOCTYPE html>
<html>
<head>
    <title>Форма</title>
</head>
<body>
<form action="upload.php" method="post">
    <fieldset>
        <legend>Товары</legend>
            Название товара:
             <input type="text" name="product_name"><br>
            Краткое описание товара:
            <input type="text" name="product_description"><br>
            Полное описание товара:
            <input type="text" name="full_description"><br>
            <input type="submit" name="product" value="Отправить данные">
    </fieldset>
    <br>
    <fieldset>
        <legend>Заказы</legend>
        Имя заказчика:
        <input type="text" name="client"><br>
        email заказчика:
        <input type="email" name="mail"><br>
        Номер выбранного товара:
        <input type="text" name="num"><br>
        Комментарий:
        <input type="text" name="comment"><br>
        <input type="submit" name="ordering" value="Отправить данные">
    </fieldset>
</form>
</body>
</html>
        

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

Файл upload.php:


<?php
$mysqli = new mysqli("127.0.0.1", "root", "","firstbase");
$mysqli->query("SET NAMES 'utf8");

if (count($_POST) > 3)
{
    $product_name = ''; $product_description = ''; $full_description = ''; $id_product = ''; $client = ''; $mail = ''; $comment = '';
    if (isset($_POST['product']))
    {
        if (isset($_POST['product_name']))
        {
            $product_name = $_POST['product_name'];
        }
        if (isset($_POST['product_description']))
        {
            $product_description = $_POST['product_description'];
        }
        if (isset($_POST['full_description']))
        {
            $full_description = $_POST['full_description'];
        }
        $insert_product = $mysqli->query("INSERT INTO `product` (`product_name`, `product_description`, `full_description`) VALUES ('$product_name', '$product_description', '$full_description')");
        if ($insert_product == 0)
        {
            $mysqli->close();
            echo 'Ошибка! Данные не переданы в базу данных. Вернитесь обратно и повторите.';
            exit;
        }
    }
    elseif (isset($_POST['ordering']))
    {
        if (isset($_POST['num']))
        {
            $id_product = $_POST['num'];
        }
        if (isset($_POST['client']))
        {
            $client = $_POST['client'];
        }
        if (isset($_POST['mail']))
        {
            $mail = $_POST['mail'];
        }
        if (isset($_POST['comment']))
        {
            $comment = $_POST['comment'];
        }
        $insert_ordering = $mysqli->query("INSERT INTO `ordering` (`id_product`, `client`, `e-mail`, `comment`, `date_ordering`) VALUES ('$id_product', '$client', '$mail', '$comment', '".time()."')");
        if ($insert_ordering == 0)
        {
            $mysqli->close();
            echo 'Ошибка! Данные не переданы в базу данных. Вернитесь обратно и повторите.';
            exit;
        }
    }
}
else
{
    $mysqli->close();
    echo 'Ошибка! Не заполнены поля формы. Вернитесь обратно и повторите.';
    exit;
}
$mysqli->close();
header("Location: {$_SERVER['HTTP_REFERER']}");
exit;
?>
        

Таким образом задание первое выполнено. Можно посмотреть и проверить работу результата в отдельном окне браузера.

Задание второе

  • Создать 2 страницы.
  • На 1-ой странице вывести в виде таблицы с использованием тега table все товары и их информацию.
  • На 2-ой странице вывести в виде таблицы с использованием тега table все заказы и их информацию.
  • На 1-ой странице сделать название товаров в виде ссылки, которая ведет на страницу с заказами с get-параметром вида product=id_товара.
  • На 2-й странице, если был передан get-параметр product, то в таблице вывести только те заказы, которые соответствуют товару product.

Решение.

Изготовим файлы table1.php и table2.php. У них мало отличий. Оба производят выборку данных из таблиц базы данных firstbase, строят таблицу и выводят ее в окне браузера. Файл table2.php, кроме этого содержит условие для выбора соответствующей таблицы при наличии, или отсутствии get-параметра product.

Файл table1.php:


<?php
/*Домашнее задание 5_10*/
$mysqli = new mysqli("127.0.0.1", "bloger", "mysql","firstbase");
$mysqli->query("SET NAMES 'utf8");
/*Функция для вывода всей таблицы с тегом <table>*/
function printResultSet($row)
{
    echo "<table>";
        echo "<tr>" . "<td>" . 'Наименование товара' . "</td>" . "<td>" .   'Свойства товара' . "</td>" .  "<td>" . 'Описание товара' . "</td>" . "<td>" . 'Количество продаж' . "</td>" . "</tr>";
        foreach ($row as $app)
        {
            echo  "<tr>" . "<td>" . '<a href="table2.php?product=' . $app['id'] . '">' . $app['product_name'] . "</a>" . "</td>" . "<td>" .   $app['product_description'] . "</td>" .  "<td>" . $app['full_description'] . "</td>" . "<td>" . $app['number_sales'] . "</td>" . "</tr>";
        }
    echo "</table>";
}
/*Выборка из базы данных всех данных из таблицы product*/
$result_set = $mysqli->query("SELECT * FROM `product`");
echo printResultSet($result_set);

$mysqli->close();
?>
<!DOCTYPE html>
<html>
<head>
    <style>
        table, td {
            border: 1px solid black;
            border-collapse: collapse;
            padding: 5px;
        }
    </style>
    <title>Продукты</title>
</head>
<body>
</body>
</html>
        

Файл table2.php:


<?php
/*Домашнее задание 5_10*/
$mysqli = new mysqli("127.0.0.1", "bloger", "mysql","firstbase");
$mysqli->query("SET NAMES 'utf8");
/*Функция для вывода всей таблицы с тегом <table>*/
function printResultSet($row)
{
    echo "<table>";
    echo "<tr>" . "<td>" . 'Номер товара' . "</td>" . "<td>" .   'Заказчик' . "</td>" .  "<td>" . 'e-mail' . "</td>" . "<td>" . 'Комментарий' . "</td>" . "<td>" . 'Дата заказа' . "</td>" . "</tr>";
    foreach ($row as $app)
    {
        echo  "<tr>" . "<td>" . $app['id_product'] . "</td>" . "<td>" .   $app['client'] . "</td>" .  "<td>" . $app['e-mail'] . "</td>" . "<td>" . $app['comment'] . "</td>" . "<td>" . date('d.m.Y', $app['date_ordering']) . "</td>" . "</tr>";
    }
    echo "</table>";
}
/*Выборка из базы данных всех данных из таблицы ordering*/
$result_set = $mysqli->query("SELECT * FROM `ordering`");
$product = $_GET['product'];
/*Выборка из базы данных только тех заказов, которые соответствуют выбранному товару из таблицы product.
*/
$result_id = $mysqli->query("SELECT * FROM `ordering` WHERE `id_product`=$product");
if ($product)
{
    echo printResultSet($result_id);
}
else
{
    echo printResultSet($result_set);
}

$mysqli->close();
?>
<!DOCTYPE html>
<html>
<head>
    <style>
        table, td {
            border: 1px solid black;
            border-collapse: collapse;
            padding: 5px;
        }
    </style>
    <title>Заказы</title>
</head>
<body>
</body>
</html>
        

Результаты решения задания

Посмотреть и проверить работу файлов table1.php и table2.php в отдельном окне браузера. Результаты решений на экране монитора несколько отличаются от HTML-разметки файлов, приведенных выше. Связано это с тем, что был незначительно изменен дизайн страниц для оптимизации SEO.

Кипящий чайник с выхлопом клубов пара из носика

Интенсив «Основы программирования»

Бесплатный курс по программированию

Начать обучение

Бесплатный курс по основам PHP

Бесплатный Видеокурс по PHP!

Пример создания PHP-сайта!

Подробнее

Комментарии

Пока комментарий нет

Оставить свой комментарий:

Кнопка войти через Яндекс Зарегистрироваться

Имя:
Электронная почта:
Текст комментария:
Введите код с картинки:
картинка
PHP хостинг ХостиЯ