ВСЕ СТАТЬИ
Блог начинающего программиста
Регистрация
PHP хостинг ХостиЯ

MySQL с PHP

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

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

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

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

  • Создать форму по добавлению нового товара с требующимися полями. Форма не должна содержать поля "количество купивших товар", а в базе это поле по умолчанию имеет значение "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 в отдельном окне браузера.

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

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

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

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

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

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

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

Подробнее

Комментарии

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

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

Важно! Только у зарегистрированных пользователей имеется защита оригинального имени. Поэтому посторонние пользователи не имеют возможности комментировать от их имени. Зарегистрироваться

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