Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
denis-skripnik
5 лет назад

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

Продолжаем.

2.2.3 PHP, часть 2

Начнём с add.php

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

<?php require_once 'functions.php'; // вызов файла с функциями.
$page = addPage(); // Назначение результатов переменной того, что
возвращает функция addPage.
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<!--[if lt IE 9]><script
src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script><![endif]-→
<title><?= $page['title']; ?> | Электронный журнал с
использованием технологии Блокчейн</title> <!-- Получаем
из $page[‘title’] заголовка страницы. Он также выводится и в h1. →
<meta name="keywords" content="Журнал, journal, viz, блокчейн"
/>
<meta name="description" content="Электронный журнал с
использованием технологии Блокчейн." />
<link href="style.css" rel="stylesheet">
<script src="js/jquery.min.js"></script>
<script src="js/sjcl.min.js"
type="text/javascript"></script> <!-- Скрипт шифрования и
расшифровки данных (нужен для ключа →
<script
src="https://cdn.jsdelivr.net/npm/viz-js-lib@latest/dist/viz.min.js"
type="text/javascript"></script> <!-- Скрипт библиотеки блокчейна
Viz -->
<script src="js/helper.js"
type="text/javascript"></script>
<!-- А здесь куча стилей, которые убраны отсюда, но есть в add.php и
index.php →
</head>
<body>
<div class="wrapper">
<header class="header">
<h1>Электронный журнал с использованием технологии Блокчейн</h1>
<h2><?= $page['title']; ?></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
href="add.php?data=lactors">Преподавателя</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>
<div class="middle">
<div class="container">
<main class="content">
<?php echo $page['content']; ?>
</main><!-- .content →
</div><!-- .container-→
<aside class="right-sidebar">
<form id="unblock_form">
<p><label for="viz_login">Введите логин в VIZ: </label></p>
<p><input type="text" name="viz_login" id="this_login"></p>
<p><label for="posting">Введите приватный постинг ключ (Начинается с
5). Внимание: он никуда не передаётся, все операции выполняются у вас на
компьютере, в вашем браузере.</label></p>
<p><input type="password" name="posting" id="this_posting"></p>
<p><input type="checkbox" id="isSavePosting"> Сохранить логин и
Постинг ключ</p>
<p align="center"><input type="button" value="Войти"
onclick="userAuth(true)"></p>
</form>
<div id="delete_posting_key"></div>
</aside><!-- .right-sidebar →
</div><!-- .middle-→
<footer class="footer">
<p align="center">Создатель сервиса: <a
href="https://viz.world/@denis-skripnik"
target="_blank">Незрячий программист Денис скрипник</a></p>
</footer><!-- .footer →
</div><!-- .wrapper →
<script>
if (localStorage.getItem('login') && localStorage.getItem('PostingKey'))
{ // Проверка логина и ключа в localStorage
viz_login = localS

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('<p align="center"><a
onclick="localStorage.removeItem(\'login\'\);
localStorage.removeItem(\'PostingKey\'\);
location.reload();">Выйти</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('<p align="center"><a
onclick="sessionStorage.removeItem(\'login\'\);
sessionStorage.removeItem(\'PostingKey\'\);
location.reload();">Выйти</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. До встречи в новых постах.

0
554.100 GOLOS
На Golos с November 2017
Комментарии (3)
Сортировать по:
Сначала старые