Пояснительная записка к электронному журналу с использованием технологии Блокчейн, практическая часть: часть 4


Продолжаем.

2.2.3 PHP, часть 2

Начнём с add.php

Файл добавления данных. Условия зависимости от GET запросов в
functions.php, а тут только вызов сей функции и html код. HTML един с
тем, что в index.php, поэтому когда буду описывать тот файл, укажу
только javascript код, что там есть.

\<?php require\_once 'functions.php'; // вызов файла с функциями.

$page // Назначение результатов переменной того, что
возвращает функция addPage.

?\>

\<\!DOCTYPE html\>

\<html\>

\<head\>

    \

    \<\!--\[if lt IE 9\]\>\<>\</script\>\<\!\[endif\]-→

    \<title\>\< ?\> | Электронный журнал с
использованием технологии Блокчейн\</title\> \<\!-- Получаем
из $page\[‘title’\] заголовка страницы. Он также выводится и в h1. →

    \

    \

    \

        \</script\>

        \</script\> \<\!-- Скрипт шифрования и
расшифровки данных (нужен для ключа →

\</script\> \<\!-- Скрипт библиотеки блокчейна
Viz --\>

        \</script\>

\<\!-- А здесь куча стилей, которые убраны отсюда, но есть в add.php и
index.php →

    \</head\>

\<body\>

\

    \

\<h1\>Электронный журнал с использованием технологии Блокчейн\</h1\>

\<h2\>\< ?\>\</h2\>

    \</header\>\<\!-- .header-→

    \<nav\>\<ul\>

\<li\>\<a href="/"\>Главная\</a\>\</li\>

\<li\>\<a href="index.php?page=lactors"\>Преподаватели\</a\>\</li\>

\<li\>\<a href="index.php?page=lessons"\>Предметы\</a\>\</li\>

\<li\>\<a href="index.php?page=disciples"\>Ученики\</a\>\</li\>

\<li\>\<a href="index.php?page=lesson\_topics"\>Темы
предметов\</a\>\</li\>

\<li\>\<a href="index.php?page=assessments"\>Оценки
учеников\</a\>\</li\>

\<li\>Добавление:

\<ul\>\<li\>\<>Преподавателя\</a\>\</li\>

\<li\>\<a href="add.php?data=lessons"\>Предмет\</a\>\</li\>

\<li\>\<a href="add.php?data=disciples"\>Ученика\</a\>\</li\>

\<li\>\<a href="add.php?data=lesson\_topics"\>Темы
предметов\</a\>\</li\>

\<li\>\<a href="add.php?data=assessments"\>Оценку
ученика\</a\>\</li\>\</ul\>\</li\>

\</ul\>\</nav\>

    \

        \

            \



\<form id="unblock\_form"\>

\<p\>\

torage.getItem('login'); // Добавление в переменную
логина.

    posting\_key = sjcl.decrypt(viz\_login + '\_postingKey',
localStorage.getItem('PostingKey')); // Добавление во вторую переменную
расшифрованного ключа.

$('\
#unblock\_form').css("display", "none"); // Скрытие формы входа.

    $('\#delete\_posting\_key').css("display", "block"); // Отображение
блока со ссылкой выхода.

    jQuery("\#delete\_posting\_key").html('\<>Выйти\</a\>\</p\>'); // Вывод кода ссылки
выхода с удалением логина и ключа из localStorage.

} else if (sessionStorage.getItem('login') &&
sessionStorage.getItem('PostingKey')) { // Проверка наличия логина и
ключа в SessionStorage (Далее всё также, но данные берутся не из
localStorage, а из sessionStorage).

    viz\_login = sessionStorage.getItem('login');

    posting\_key = sjcl.decrypt(viz\_login + '\_postingKey',
sessionStorage.getItem('PostingKey'));

$('\#unblock\_form').css("display", "none");

    $('\#delete\_posting\_key').css("display", "block");

    jQuery("\#delete\_posting\_key").html('\<>Выйти\</a\>\</p\>');

} else { // Если нет данных ни в localStorage, ни в sessionStorage.

    $('\#delete\_posting\_key').css("display", "none"); // Скрытие
ссылки выхода.

    $('\#unblock\_form').css("display", "block"); // Отображение формы
входа.

}

\</script\>

\</body\>

\</html\>

db.php

Функция подключения к базе данных

function dbConnect() {

$json\_conf = file\_get\_contents( '../config.json' ); // Получение
данных из JSON файла.

$config = json\_decode($json\_conf, JSON\_OBJECT\_AS\_ARRAY); //
Преобразование JSON в массив.

//название базы данных

$dbname = $config\['db\_name'\]; // Получаем из конфига его.

//имя пользователя

$username = $config\['db\_login'\];

//пароль

$pass = $config\['db\_password'\];

//подключаемся к базе данных

$db = new PDO(

"mysql:host=".$config\['db\_server'\].";dbname={$dbname};charset=utf8",

$username,

$pass

);

return $db;

}

Возвращается переменная, позволяющая работать с базой.

Используется PDO, т. к. он считается наиболее современным и безопасным.

functions.php

Функция homePage для страниц со списком данных

function homePage() {

require\_once 'db.php'; // Подключаем файл базы данных.

$db = dbConnect(); // Получаем возвращаемое функцией dbConnect.

$page = $\_GET\['page'\]; // Получаем GET запрос page.

// Далее условия, в зависимости от которых выводится тайтл.

if ($page == 'lactors') {

$pagename = 'Преподаватели';

} else if ($page == 'disciples') {

$pagename = 'Ученики';

} else if ($page == 'lessons') {

$pagename = 'Предметы';

} else if ($page == 'lesson\_topics') {

$pagename = 'Темы предметов';

} else if ($page == 'assessments') {

$pagename = 'Оценки';

}

return $pagename; // Возвращаем название страницы.

}

addPage

function addPage() {

$data = $\_GET\['data'\]; // получаем значение GET data

$page\_data = \[\]; // Создаём массив, который будет содержать заголовок
— title и контент — content.

// Далее условия, в зависимости от которых добавляется в значение
массива тайтл и контент, который берётся из содержимого одного из
html файлов папки add.

if ($data == 'lactors') {

$page\_data\['title'\] = 'Добавление преподавателя';

$page\_data\['content'\] = file\_get\_contents('add/lactor.html');

} else if ($data == 'disciples') {

$page\_data\['title'\] = 'Добавление ученика';

$page\_data\['content'\] = file\_get\_contents('add/disciple.html');

} else if ($data == 'lessons') {

$page\_data\['title'\] = 'Добавление предмета';

$page\_data\['content'\] = file\_get\_contents('add/lesson.html');

} else if ($data == 'lesson\_topics') {

$page\_data\['title'\] = 'Добавление темы предмета';

$page\_data\['content'\] =
file\_get\_contents('add/lesson\_topics.html');

} else if ($data ==

'assessments') {

$page\_data\['title'\] = 'Добавление оценки';

$page\_data\['content'\] = file\_get\_contents('add/assessment.html');

}

return $page\_data; // Возвращаем массив с title и content.

}

кция dropTeacher: удаляет учителя из базы данных, а также относящееся к
нему.

function dropTeacher($teacher = '') {

require\_once 'db.php'; // Подключение файла базы данных.

$db = dbConnect(); // Вызов функции подключения к БД и занесение в
переменную.

$lessons = $db-\>query('select \* from \lessons\'); // Занесение в
переменную $lessons результата из таблицы lessons.

foreach ($lessons as $key 😕> $lesson) // цикл с получением $key (ключа
элемента цикла) и $lesson (данных элемента цикла)

{

$new\_teachers = array(); // Массив $new\_teachers

$lactors = explode(',', $lesson\["lactors"\]); // Разбиваем строку
lactors из таблицы предметов по запятой, создавая массив
преподавателей.

foreach ($lactors as $key 😕> $lactor) // Цикл учителей из строки.

{

if (trim($lactor) \!= trim($teacher)) // Если преподаватель из цикла
текущего не равен удаляемому преподавателю (без учёта пробелов в
начале и конце)

{

$new\_teachers\[\] = $lactor; // Добавляем его в массив
$new\_teachers.

}

}

$new\_teachers = trim(implode(',', $new\_teachers)); // Преобразуем в
строку с перечислением через запятую.

$db-\>query('update \lessons\ set \lactors\ = "' . $new\_teachers .
'" where \id\ = "' . $lesson\["id"\] . '"');

}

$db-\>query('delete from \lactors\ where \login\ = "' . $teacher .
'"'); // Удаляем преподавателя из базы данных.

}

Функция dropDisciples: удаление ученика

function dropDisciples($disciple = '') {

require\_once 'db.php'; // Подключение базы данных, а в следующей строке

  • добавление возвращаемого функцией подключения в переменную $db.

    $db = dbConnect();

    $assessments = $db-\>query('select \* from \assessments\'); // Выбор
    данных из таблицы оценок в переменную $assessments

    foreach ($assessments as $key 😕> $assessment)

    {

    if (trim($assessment\["disciple"\]) == $disciple) { // Если ученик из
    таблицы оценок (текущий элемент цикла) равен удаляемому

    $db-\>query('delete from \assessments\ where \disciple\ = "' .
    $disciple . '"'); // Удаление оценки данного ученика.

    } }

    $db-\>query('delete from \disciples\ where \login\ = "' . $disciple
    . '"'); // Удаление самого ученика.

    }

Функция droLessons: удаление предмета.

function droLessons($lesson = '') {

require\_once 'db.php';

$db = dbConnect();

$lesson\_topics = $db-\>query('select \* from \lesson\_topics\'); //
Выбор данных из таблицы тем предметов.

foreach ($lesson\_topics as $key 😕> $lesson\_topic)

{

if (trim(mb\_strtolower($lesson\_topic\["lesson"\])) ==
trim(mb\_strtolower($lesson))) // Если предмет из таблицы тем предметов
равен удаляемому

{

$db-\>query('delete from \lesson\_topics\ where \lesson\ = "' .
$lesson . '"'); // удалить тему из БД.

}

}

$db-\>query('delete from \lessons\ where \name\ = "' . $lesson .
'"'); // Удаление самого предмета.

}

Всё

Благодарю за внимание. С вами был незрячий автор, программист и делегат @denis-skripnik. До встречи в новых постах.


Comments 3


Фонд БОД сделал репост.
Ваше творчество в ленте.
Наша лента в telegram.
)
Вы являетесь участником проекта БОД, поэтому все ваши посты
размещаются в ленте репостов фонда. Если не желаете получать
апвот фонда и этот комментарий, ставьте тег nobod.
06.08.2019 23:02
0

Здравствуйте, @denis-skripnik. Вы получили 100% апвот от UPRomo за сожженные GBG. Продвигали сей пост в очереди: @denis-skripnik.
Сервис прибавил к вашему посту примерно 124.272 GBG.

Инструкция по сжиганию для продвижения или задвигания постов.

Соглашение об использовании UPRomo.


Делегируйте СГ сервису UPRomo и способствуйте уменьшению количества GBG, что поможет выйти из кризиса, возобновить GBG и восстановить его цену, равную 1 МГ золота.

12.08.2019 18:59
0