- •2.6. Висновки до розділу 2 31
- •3.7. Висновки до розділу 3 39
- •Розділ 1. Теоретичні основи реляційних баз даних
- •Основні поняття та визначення
- •Визначення та особливості реляційних баз даних
- •Правила нормалізації таблиць бази даних
- •Види міжтабличних зв’язків:
- •Властивості та функції баз даних та систем управління базами даних
- •Історія виникнення та розвитку технологій баз даних
- •Методи класифікації та кодування
- •Висновки до розділу 1
- •Розділ 2. Інструментальні засоби розробки бази даних
- •2.1 Порівняльний аналіз інструментів для проектування баз даних
- •Vertabelo
- •2.2 Локальні серверні служби
- •2.3 Адміністрування систем управління базами даних phpMyAdmin
- •2.4 Скриптова мова програмування php
- •2.5 Мова розмітки веб-сторінок html
- •2.6. Висновки до розділу 2
- •Розділ 3. Розробка бази даних та програмного додатку
- •3.1 Постановка задачі
- •3.2. Вибір субд для вирішення поставленої задачі
- •3.3. Розробка концептуальної моделі даних
- •3.4. Розробка логічної та фізичної моделі даних
- •3.5. Налаштування пк для створення програмного додатку та роботи з базою даних
- •3.6. Розробка програмного додатку
- •3.7. Висновки до розділу 3
- •Висновки
- •Список використаних джерел
- •Додаток а Код програмного додатку
Список використаних джерел
Література:
Кузнецов С. Д. Основы баз данных. Курс лекций. – М.: Интернет-университет информационных технологий, 2005. -659 стр.
А. Горев, Р. Ахаян, С. Макашарипов «Эффективная работа с СУБД» - СПб. Питер, 1997. -704 стр.
Алекс Кригель, Борис Трухнов: SQL. Библия пользователя, Москва: Вильямс, 2010. – 800 стр.
М. Фленов, Transact-SQL, Санкт-Петербург: БХВ-Петербург, 2006. -340 стр.
Александр Бондарь, Microsoft SQL Server 2012, Санкт-Петербург: БХВ-Петербург, 2013. -270 стр.
Кевин Е. Кляйн, Дэниэл Кляйн, Брэнд Хант SQL. Справочник, Москва: Символ-Плюс, 2010. -360 стр.
Тоу, Дэн Настройка SQL; СПб: Питер, 2009. -980 стр.
Інтернет ресурси:
https://ru.wikipedia.org/wiki/Apache_HTTP_Server
https://www.w3schools.com/sql/sql_select_into.asp
https://www.site-do.ru/db/sql11.php
http://stackoverflow.com/questions/21722375/object-of-class-mysqli-result-could-not-be-converted-to-string-in
http://www.php.su/mysqli_query
http://php.net/manual/ru/mysqli.query.php
http://www.cyberforum.ru/php-database/thread1766077.html
http://www.sql.ru/forum/721027/neskolko-zaprosov-v-funkcii-mysql-query
https://php.ru/forum/threads/neskolko-zaprosov-v-odnom-podkljuchenii-k-mysql.32760/
http://www.cyberforum.ru/mysql/thread1247483.html
https://www.site-do.ru/db/sql11.php
Додаток а Код програмного додатку
<?php
// Переменные
$aColumns = array('id', 'checknum', 'product_code', 'mobile', 'price', 'start_date');
$sIndexColumn = "id";
$sTable = "tbl_datatable";
$gaSql['user'] = "root";
$gaSql['password'] = "root";
$gaSql['db'] = "test";
$gaSql['server'] = "localhost";
// Подключение к базе данных
function dbinit(&$gaSql) {
// Обработка ошибок
function fatal_error($sErrorMessage = '') {
header($_SERVER['SERVER_PROTOCOL'] .' 500 Internal Server Error');
die($sErrorMessage);
}
// MYSQL подключение
if ( !$gaSql['link'] = @mysql_connect($gaSql['server'], $gaSql['user'], $gaSql['password']) ) {
fatal_error('Could not open connection to server');
}
// MYSQL выбор базы данных
if ( !mysql_select_db($gaSql['db'], $gaSql['link']) ) {
fatal_error('Could not select database');
}
}
// AJAX EDIT FROM JQUERY
if ( isset($_GET['edit']) && 0 < intval($_GET['edit']) ) {
dbinit($gaSql);
// Сохранить данные
if ( isset($_POST) ) {
$p = $_POST;
foreach ( $p as &$val ) $val = mysql_real_escape_string($val);
if ( !empty($p['checknum']) && !empty($p['product_code']) && !empty($p['mobile']) && !empty($p['price']) )
@mysql_query(" UPDATE $sTable SET checknum = '" . $p['checknum'] . "', product_code = '" . $p['product_code'] . "',
mobile = '" . $p['mobile'] . "', price = '" . $p['price'] . "' WHERE id = " . intval($_GET['edit']));
}
// Получить данные
$query = mysql_query(" SELECT * FROM $sTable WHERE $sIndexColumn = " . intval($_GET['edit']), $gaSql['link']);
die(json_encode(mysql_fetch_assoc($query)));
}
// AJAX ADD FROM JQUERY
if ( isset($_GET['add']) && isset($_POST) ) {
dbinit($gaSql);
$p = $_POST;
foreach ( $p as &$val ) $val = mysql_real_escape_string($val);
if ( !empty($p['checknum']) && !empty($p['product_code']) && !empty($p['mobile']) && !empty($p['price']) ) {
@mysql_query(" INSERT INTO $sTable (checknum, product_code, mobile, price) VALUES ('" . $p['checknum'] . "',
'" . $p['product_code'] . "', '" . $p['mobile'] . "', '" . $p['price'] . "')");
$id = mysql_insert_id();
$query = mysql_query(" SELECT * FROM $sTable WHERE $sIndexColumn = " . $id, $gaSql['link']);
die(json_encode(mysql_fetch_assoc($query)));
}
}
// AJAX REMOVE FROM JQUERY
if ( isset($_GET['remove']) && 0 < intval($_GET['remove']) ) {
dbinit($gaSql);
// удалить данные
@mysql_query(" DELETE FROM $sTable WHERE id = " . intval($_GET['remove']));
}
// AJAX FROM JQUERY
if ( isset($_GET['ajax']) ) {
dbinit($gaSql);
// QUERY LIMIT
$sLimit = "";
if ( isset($_GET['iDisplayStart']) && $_GET['iDisplayLength'] != '-1' ) {
$sLimit = "LIMIT " . intval($_GET['iDisplayStart']) . ", " . intval($_GET['iDisplayLength']);
}
// QUERY ORDER
$sOrder = "";
if ( isset($_GET['iSortCol_0']) ) {
$sOrder = "ORDER BY ";
for ( $i = 0; $i < intval($_GET['iSortingCols']); $i++ ) {
if ( $_GET['bSortable_' . intval($_GET['iSortCol_' . $i])] == "true" ) {
$sOrder .= $aColumns[intval($_GET['iSortCol_' . $i])] . " " .
( $_GET['sSortDir_' . $i] === 'asc' ? 'asc' : 'desc' ) . ", ";
}
}
$sOrder = substr_replace($sOrder, "", -2);
if ( $sOrder == "ORDER BY" ) $sOrder = "";
}
// QUERY SEARCH
$sWhere = "";
if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ) {
$sWhere = "WHERE (";
for ( $i = 0; $i < count($aColumns); $i++ ) {
if ( isset($_GET['bSearchable_' . $i]) && $_GET['bSearchable_' . $i] == "true" ) {
$sWhere .= $aColumns[$i] . " LIKE '%" . mysql_real_escape_string($_GET['sSearch']) . "%' OR ";
}
}
$sWhere = substr_replace($sWhere, "", -3);
$sWhere .= ')';
}
// BUILD QUERY
for ( $i = 0; $i < count($aColumns); $i++ ) {
if ( isset($_GET['bSearchable_' . $i]) && $_GET['bSearchable_' . $i] == "true" && $_GET['sSearch_' . $i] != '' ) {
if ( $sWhere == "" ) $sWhere = "WHERE ";
else $sWhere .= " AND ";
$sWhere .= $aColumns[$i] . " LIKE '%" . mysql_real_escape_string($_GET['sSearch_' . $i]) . "%' ";
}
}
// FETCH
$sQuery = " SELECT SQL_CALC_FOUND_ROWS " . str_replace(" , ", " ",
implode(", ", $aColumns)) . " FROM $sTable $sWhere $sOrder $sLimit ";
$rResult = mysql_query($sQuery, $gaSql['link']) or fatal_error('MySQL Error: ' . mysql_errno());
$sQuery = " SELECT FOUND_ROWS() ";
$rResultFilterTotal = mysql_query($sQuery, $gaSql['link']) or fatal_error('MySQL Error: ' . mysql_errno());
$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
$iFilteredTotal = $aResultFilterTotal[0];
$sQuery = " SELECT COUNT(" . $sIndexColumn . ") FROM $sTable ";
$rResultTotal = mysql_query($sQuery, $gaSql['link']) or fatal_error('MySQL Error: ' . mysql_errno());
$aResultTotal = mysql_fetch_array($rResultTotal);
$iTotal = $aResultTotal[0];
while ( $aRow = mysql_fetch_array($rResult) ) {
$row = array();
for ( $i = 0 ; $i < count($aColumns); $i++ ) {
if ( $aColumns[$i] == "version" ) $row[] = ( $aRow[$aColumns[$i]] == "0" ) ? '-' : $aRow[$aColumns[$i]];
else if ( $aColumns[$i] != ' ' ) $row[] = $aRow[$aColumns[$i]];
}
$output['aaData'][] = array_merge($row, array('<a data-id="row-' . $row[0] .
'" href="javascript:editRow(' . $row[0] . ');" class="btn btn-md btn-success">edit</a> <a href="javascript:removeRow(' .
$row[0] . ');" class="btn btn-default btn-md" style="background-color: #c83a2a;border-color: #b33426; color: #ffffff;">remove</a>'));
}
// RETURN IN JSON
die(json_encode($output));
}
?>
<html>
<head>
<title>Бюджет руху грошових коштів на підприємстві: надходження</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css"
integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<link rel="stylesheet" type="text/css" href="//cdn.datatables.net/1.10.10/css/jquery.dataTables.css">
</head>
<body>
<h1>
Надходження до бюджету
</h1>
<br>
<div class="container-fluid">
<button type="button" style="padding:10px; margin:0 50px 15px 0;"
class="btn btn-primary btn-sm pull-right" data-toggle="modal" data-target="#add-modal"><b>Додати запис</b></button>
<div class="row">
<div class="col-md-12 marginT20">
<div class="table-responsive demo-x content">
<table id="example" class="display" cellspacing="0" width="100%">
<thead>
<tr>
<th>#</th>
<th>№ чека</th>
<th>Код продукту</th>
<th>Кількість</th>
<th>Ціна</th>
<th>Дата запису</th>
<th style="background-image: none">Edit</th>
</tr>
</thead>
</table>
</div>
</div>
</div>
</div>
<div class="modal fade" id="edit-modal" tabindex="-1" role="dialog" aria-labelledby="edit-modal-label">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form class="form-horizontal" id="edit-form">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="edit-modal-label">Edit selected row</h4>
</div>
<div class="modal-body">
<input type="hidden" id="edit-id" value="" class="hidden">
<div class="form-group">
<label for="checknaum" class="col-sm-2 control-label">№ чека</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="checknum" name="checknum" placeholder="Checknum" required>
</div>
</div>
<div class="form-group">
<label for="product_code" class="col-sm-2 control-label">Код продукту</label>
<div class="col-sm-10">
<input type="product_code" class="form-control" id="product_code" name="product_code" placeholder="Код продукту" required>
</div>
</div>
<div class="form-group">
<label for="mobile" class="col-sm-2 control-label">Кількість</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="mobile" name="mobile" placeholder="Кількість" required>
</div>
</div>
<div class="form-group">
<label for="price" class="col-sm-2 control-label">Ціна</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="price" name="price" placeholder="Ціна" required>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Save changes</button>
</div>
</form>
</div>
</div>
</div>
<div class="modal fade" id="add-modal" tabindex="-1" role="dialog" aria-labelledby="add-modal-label">
<div class="modal-dialog" role="document">
<div class="modal-content">
<form class="form-horizontal" id="add-form">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
<h4 class="modal-title" id="add-modal-label">Add new row</h4>
</div>
<div class="modal-body">
<div class="form-group">
<label for="add-checknum" class="col-sm-2 control-label">№ чека</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="add-checknum" name="checknum" placeholder="Checknum" required>
</div>
</div>
<div class="form-group">
<label for="add-product_code" class="col-sm-2 control-label">Код продукту</label>
<div class="col-sm-10">
<input type="product_code" class="form-control" id="add-product_code" name="product_code" placeholder="Код продукту" required>
</div>
</div>
<div class="form-group">
<label for="add-mobile" class="col-sm-2 control-label">Кількість</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="add-mobile" name="mobile" placeholder="Кількість" required>
</div>
</div>
<div class="form-group">
<label for="add-price" class="col-sm-2 control-label">Ціна</label>
<div class="col-sm-10">
<input type="text" class="form-control" id="add-price" name="price" placeholder="Ціна" required>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="submit" class="btn btn-primary">Save changes</button>
</div>
</form>
</div>
</div>
</div>
<script src="https://code.jquery.com/jquery-2.2.0.min.js" type="text/javascript"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js"
integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
<script type="text/javascript" charset="utf8" src="//cdn.datatables.net/1.10.10/js/jquery.dataTables.js"></script>
<script type="text/javascript" language="javascript" class="init">
$(document).ready(function() {
// ATW
if ( top.location.href != location.href ) top.location.href = location.href;
// Initialize datatable
$('#example').dataTable({
"aProcessing": true,
"aServerSide": true,
"ajax": "datatable.php?ajax"
});
// Save edited row
$("#edit-form").on("submit", function(event) {
event.preventDefault();
$.post("datatable.php?edit=" + $('#edit-id').val(), $(this).serialize(), function(data) {
var obj = $.parseJSON(data);
var tr = $('a[data-id="row-' + $('#edit-id').val() + '"]').parent().parent();
$('td:eq(1)', tr).html(obj.checknum);
$('td:eq(2)', tr).html(obj.product_code);
$('td:eq(3)', tr).html(obj.mobile);
$('td:eq(4)', tr).html(obj.price);
$('#edit-modal').modal('hide');
}).fail(function() { alert('Unable to save data, please try again later.'); });
});
// Add new row
$("#add-form").on("submit", function(event) {
event.preventDefault();
$.post("datatable.php?add", $(this).serialize(), function(data) {
var obj = $.parseJSON(data);
$('#example tbody tr:last').after('<tr role="row"><td class="sorting_1">' + obj.id
+ '</td><td>' + obj.checknum + '</td><td>' + obj.product_code + '</td><td>' + obj.mobile
+ '</td><td>' + obj.price + '</td><td>' + obj.start_date + '</td><td><a data-id="row-'
+ obj.id + '" href="javascript:editRow(' + obj.id
+ ');" class="btn btn-default btn-sm">edit</a> <a href="javascript:removeRow('
+ obj.id + ');" class="btn btn-default btn-sm">remove</a></td></tr>');
$('#add-modal').modal('hide');
}).fail(function() { alert('Unable to save data, please try again later.'); });
});
});
// Edit row
function editRow(id) {
if ( 'undefined' != typeof id ) {
$.getJSON('datatable.php?edit=' + id, function(obj) {
$('#edit-id').val(obj.id);
$('#checknum').val(obj.checknum);
$('#product_code').val(obj.product_code);
$('#mobile').val(obj.mobile);
$('#price').val(obj.price);
$('#edit-modal').modal('show')
}).fail(function() { alert('Unable to fetch data, please try again later.') });
} else alert('Unknown row id.');
}
// Remove row
function removeRow(id) {
if ( 'undefined' != typeof id ) {
$.get('datatable.php?remove=' + id, function() {
$('a[data-id="row-' + id + '"]').parent().parent().remove();
}).fail(function() { alert('Unable to fetch data, please try again later.') });
} else alert('Unknown row id.');
}
</script>
</body>
</html>
