You are on page 1of 11

Міністерство освіти і науки України

Національний технічний університет України „КПІ імені Ігоря


Сікорського ”
Факультет інформатики та обчислювальної техніки
Кафедра інформаційних систем та технологій

Звіт до комп’ютерного практикуму №5


З дисципліни «Основи Back-end технологій»

Прийняв: Виконав:
Викладач Студент 3 курсу, гр. ІА-13
Зубко Р.А. Окаянченко Д.О.
«__»_________2024 р.

2024 р.
Лабораторна робота №5.
NodeJS. Робота з БД MongoDB. Додаток що реалізує CRUD
операції в БД.
Завдання.

 Створити додаток, що реалізує CRUD операції з БД – додавання,


читання, редагування та видалення записів БД.
 Забезпечити роутінг запитів та виведення результатів запитів на WEB-
сторінку.
 Додати новий роут для виведення інформації у вигляді json-файлу.

Варіант 11. Спроектувати базу даних технологічних карт: деталь, виріб,


деталі в виробах.

Хід роботи
1. Створимо головну сторінку з переходами на функціональні сторінки:
<div class="p-3 shadow text-center">
<h2>Головна сторінка</h2>
</div>
<div class="container">
<div class="d-flex flex-column align-items-center">
<div class="container mt-5">
<div class="form-group d-flex flex-column align-items-center">
<div class="nav">
<a class="nav-link btn btn-primary btn-lg btn-block"
href="products/info.php">Інформація</a>
<a class="nav-link btn btn-primary btn-lg btn-block"
href="products/search.php">Пошук</a>
</div>
</div>
</div>
</div>
</div>
Результат:

Мал. 1 Головна сторінка.


2. Створимо сторінку інформації з виведенням наступної інформації за
допомогою php:
 Скільки всього було створено записів у таблиці деталей;
 Скільки всього було створено записів у таблиці виробів;
 Скільки записів було зроблено за останній місяць у табл. деталей та
табл. виробів;
 Який запис був зроблений останнім (у табл. виробів);
 Яка деталь є найбільш використовуваною для виготовлення виробів;
<?php
$connection = mysqli_connect("localhost", "root", "",
"technological_maps_db");

// count of details and products


$details_count = mysqli_query($connection, "SELECT COUNT(*) FROM details")-
>fetch_assoc()['COUNT(*)'];
$products_count = mysqli_query($connection, "SELECT COUNT(*) FROM
products")->fetch_assoc()['COUNT(*)'];
echo "Всього було створено $details_count деталі.<br>";
echo "Всього було створено $products_count вироба.<br>";

// count of details created in the last month


$date = getdate();
$begin_month_date = date("Y-m-d", mktime(0, 0, 0, $date['mon'], 1,
$date['year']));
$end_month_date = date("Y-m-d", mktime(0, 0, 0, $date ['mon'] + 1, 0, $date
['year']));
$lmdetails_count = mysqli_query($connection, "SELECT COUNT(*) FROM details
WHERE created>='$begin_month_date' AND
created<='$end_month_date'")->fetch_assoc()
['COUNT(*)'];
$lmproducts_count = mysqli_query($connection, "SELECT COUNT(*) FROM products
WHERE created>='$begin_month_date' AND
created<='$end_month_date'")->fetch_assoc()
['COUNT(*)'];
echo "За останній місяць було створено $lmdetails_count деталі.<br>";
echo "За останній місяць було створено $lmproducts_count вироба.<br>";

// name of the last created product


$last_added_product = mysqli_query($connection, "SELECT name FROM products
ORDER BY created DESC LIMIT 1")->fetch_assoc();
echo "Назва останньо доданого вироба: " . $last_added_product['name'] .
"<br>";

// most used detail


$most_used_detail = mysqli_query($connection, "SELECT details.name,
SUM(product_parts.quantity) as total_quantity
FROM product_parts JOIN details ON
product_parts.detail_id = details.id
GROUP BY product_parts.detail_id ORDER BY
total_quantity DESC LIMIT 1")->fetch_assoc();
echo "Найбільш використовувана деталь: " . $most_used_detail['name'] . " з
загальною кількістю: " .
$most_used_detail['total_quantity'] . "<br>"; ?>

Результат:

Мал. 2 Сторінка інформації.


3. Далі створимо сторінку пошуку та додамо функціонал за допомогою php:
<?php
$connection = mysqli_connect("localhost", "root", "",
"technological_maps_db");
function generateTable($result)
{
echo "<table
class='table'><tr><th>ID</th><th>Name</th><th>Number</th><th>Material</
th><th>Created</th></tr>";
while ($row = mysqli_fetch_assoc($result)) {
echo
"<tr><td>{$row['id']}</td><td>{$row['name']}</td><td>{$row['number']}</
td><td>{$row['material']}</td>
<td>{$row['created']}</td></tr>";
}
echo "</table>";
}

?>
<div class="form-group d-flex flex-column align-items-center">
<form method="post">
<label for="search_field">Рядок пошуку</label>
<input type="text" name="search_field" id="search_field"
class="form-control" maxlength="50"/>
<input type="submit" name="search-by-name-submit" class="btn btn-
primary" value="Пошук"/>
</form>
<?php
if (isset($_POST['search-by-name-submit'])) {
$query = "SELECT * FROM details WHERE name LIKE
'$_POST[search_field]'";
$result = mysqli_query($connection, $query);
if ($result) generateTable($result);
else echo "Результатів немає :(";
}
?>
<form method="post">
<label for="start_date">Початкова дата</label>
<input type="date" name="start_date" id="start_date" class="form-
control"/>
<label for="end_date">Кінцева дата</label>
<input type="date" name="end_date" id="end_date" class="form-
control"/>
<input type="submit" name="search-by-time-submit" class="btn btn-
primary" value="Пошук"/>
</form>
<?php
if (isset($_POST['search-by-time-submit'])) {
$start_date = isset($_POST['start_date']) ? $_POST['start_date'] :
'';
$end_date = isset($_POST['end_date']) ? $_POST['end_date'] : '';
$query = "SELECT * FROM details WHERE created BETWEEN '$start_date'
AND '$end_date'";
$result = mysqli_query($connection, $query);
if ($result) generateTable($result);
else echo "Результатів немає :(";
}
?>
</div>

Результат:

Мал. 3 Пошук за назвою деталі.

Мал. 3 Пошук за періодом створення деталі.


Висновок: При виконанні даної роботи я ознайомився із процедурою
створення сторінки статистики сайту та пошуку інформації по сайту за
допомогою php коду, а також створив декілька сторінок для керування
вищезгаданими процесами. Завдання комп’ютерного практикуму було
виконано, а всі результати, у вигляді скріншотів, представлені у звіті.

Структура проєкту:
Скрипт КП:
Головна папка проєкту
index.php:
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initialscale=1">
<meta name="description" content="">
<meta name="robots" content="noindex, nofollow">
<meta name="robots" content="noarchive, nosnippet">
<meta name="googlebot" content="noindex, nofollow">
<meta name="googlebot" content="noarchive, nosnippet">
<title>BET-1</title>
<link
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css
" rel="stylesheet">
<style>
body {
background-color: #f8f9fa;
}

.nav-link {
transition: all 0.3s ease;
}

.nav-link:hover {
transform: scale(1.1);
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="p-3 shadow text-center">
<h2>Головна сторінка</h2>
</div>
<div class="container">
<div class="d-flex flex-column align-items-center">
<div class="container mt-5">
<div class="form-group d-flex flex-column align-items-center">
<div class="nav">
<a class="nav-link btn btn-primary btn-lg btn-block"
href="products/info.php">Інформація</a>
<a class="nav-link btn btn-primary btn-lg btn-block"
href="products/search.php">Пошук</a>
</div>
</div>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js
"></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"><
/script>
</body>
</html>
Папка pages
info.php:
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initialscale=1">
<meta name="description" content="">
<meta name="robots" content="noindex, nofollow">
<meta name="robots" content="noarchive, nosnippet">
<meta name="googlebot" content="noindex, nofollow">
<meta name="googlebot" content="noarchive, nosnippet">
<title>BET-1</title>
<link
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css
" rel="stylesheet">
<style>
body {
background-color: #f8f9fa;
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="p-3 shadow text-center">
<h2>Сторінка інформації</h2>
</div>
<div class="container">
<div class="m-3">
<a class="h5" href="../index.php">На головну</a>
</div>
<div class="form-group d-flex flex-column align-items-center">
<?php
$connection = mysqli_connect("localhost", "root", "",
"technological_maps_db");

// count of details and pages


$details_count = mysqli_query($connection, "SELECT COUNT(*) FROM
details")->fetch_assoc()['COUNT(*)'];
$products_count = mysqli_query($connection, "SELECT COUNT(*) FROM
pages")->fetch_assoc()['COUNT(*)'];
echo "Всього було створено $details_count деталі.<br>";
echo "Всього було створено $products_count вироба.<br>";

// count of details created in the last month


$date = getdate();
$begin_month_date = date("Y-m-d", mktime(0, 0, 0, $date['mon'], 1,
$date['year']));
$end_month_date = date("Y-m-d", mktime(0, 0, 0, $date ['mon'] + 1,
0, $date ['year']));
$lmdetails_count = mysqli_query($connection, "SELECT COUNT(*) FROM
details WHERE created>='$begin_month_date' AND
created<='$end_month_date'")->fetch_assoc()
['COUNT(*)'];
$lmproducts_count = mysqli_query($connection, "SELECT COUNT(*)
FROM pages WHERE created>='$begin_month_date' AND
created<='$end_month_date'")->fetch_assoc()
['COUNT(*)'];
echo "За останній місяць було створено $lmdetails_count
деталі.<br>";
echo "За останній місяць було створено $lmproducts_count
вироба.<br>";

// name of the last created product


$last_added_product = mysqli_query($connection, "SELECT name FROM
pages ORDER BY created DESC LIMIT 1")->fetch_assoc();
echo "Назва останньо доданого вироба: " .
$last_added_product['name'] . "<br>";

// most used detail


$most_used_detail = mysqli_query($connection, "SELECT
details.name, SUM(product_parts.quantity) as total_quantity
FROM product_parts JOIN details ON
product_parts.detail_id = details.id
GROUP BY product_parts.detail_id ORDER BY
total_quantity DESC LIMIT 1")->fetch_assoc();
echo "Найбільш використовувана деталь: " .
$most_used_detail['name'] . " з загальною кількістю: " .
$most_used_detail['total_quantity'] . "<br>"; ?>
</div>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js
"></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"><
/script>
</body>
</html>
search.php:
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initialscale=1">
<meta name="description" content="">
<meta name="robots" content="noindex, nofollow">
<meta name="robots" content="noarchive, nosnippet">
<meta name="googlebot" content="noindex, nofollow">
<meta name="googlebot" content="noarchive, nosnippet">
<title>BET-1</title>
<link
href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css
" rel="stylesheet">
<style>
body {
background-color: #f8f9fa;
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="p-3 shadow text-center">
<h2>Сторінка пошуку</h2>
</div>
<div class="container">
<div class="m-3">
<a class="h5" href="../index.php">На головну</a>
</div>
<?php
$connection = mysqli_connect("localhost", "root", "",
"technological_maps_db");
function generateTable($result)
{
echo "<table
class='table'><tr><th>ID</th><th>Name</th><th>Number</th><th>Material</
th><th>Created</th></tr>";
while ($row = mysqli_fetch_assoc($result)) {
echo
"<tr><td>{$row['id']}</td><td>{$row['name']}</td><td>{$row['number']}</
td><td>{$row['material']}</td>
<td>{$row['created']}</td></tr>";
}
echo "</table>";
}

?>
<div class="form-group d-flex flex-column align-items-center">
<form method="post">
<label for="search_field">Рядок пошуку</label>
<input type="text" name="search_field" id="search_field"
class="form-control" maxlength="50"/>
<input type="submit" name="search-by-name-submit" class="btn
btn-primary" value="Пошук"/>
</form>
<?php
if (isset($_POST['search-by-name-submit'])) {
$query = "SELECT * FROM details WHERE name LIKE
'$_POST[search_field]'";
$result = mysqli_query($connection, $query);
if ($result) generateTable($result);
else echo "Результатів немає :(";
}
?>
<form method="post">
<label for="start_date">Початкова дата</label>
<input type="date" name="start_date" id="start_date"
class="form-control"/>
<label for="end_date">Кінцева дата</label>
<input type="date" name="end_date" id="end_date" class="form-
control"/>
<input type="submit" name="search-by-time-submit" class="btn
btn-primary" value="Пошук"/>
</form>
<?php
if (isset($_POST['search-by-time-submit'])) {
$start_date = isset($_POST['start_date']) ?
$_POST['start_date'] : '';
$end_date = isset($_POST['end_date']) ? $_POST['end_date'] :
'';
$query = "SELECT * FROM details WHERE created BETWEEN
'$start_date' AND '$end_date'";
$result = mysqli_query($connection, $query);
if ($result) generateTable($result);
else echo "Результатів немає :(";
}
?>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
<script
src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js
"></script>
<script
src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"><
/script>
</body>
</html>
Папка assets/css
main.css:
.vh-80 {
height: 80vh !important;
}

You might also like