Инструменты пользователя

Инструменты сайта


doc:1513:643.mgul.15131-01_12_01

АННОТАЦИЯ

В данном программном документе приведёно текст программы системы сбора, обработки и хранения результатов измерения (далее система), предназначенной для сохранения и предоставления любых наборов переданных данных, а в частности – с учебных устройств, разработанных на кафедре ПМиВТ МФ МГТУ им. Н. Э. Баумана.

ПРОГРАММНЫЙ КОД ВЕБ-ПРИЛОЖЕНИЯ

Корневой каталог веб-приложения

conn.php

conn.php

conn.php
<? $mysqli =  mysqli_connect('address','ReadOnlyLogin', 'ReadOnlyPass','DB') or die ("Connection error: ". mysqli_error($mysqli)); ?>
<style>
/* стили таблицы */
th {
  text-indent: 0px;
  border-collapse: collapse;
  background: #e8edfa;
  border-bottom: 1px solid #fff;
  color: #500;
  font-weight: 700;
  border-top: 0px solid transparent;
  padding: 2px;
  text-align:center;
}
td {
  text-indent: 0px;
  border-collapse: collapse;
  background: #e8edff;
  border-bottom: 1px solid #fff;
  color: #500;
  border-top: 0px solid transparent;
  padding: 2px;
  text-align:center;
}
tr:hover td {background: #eeddff;}
tr{text-indent: 1px;}
tr:
</style>
 
<?
/* Проверка на соеденение с базой данных */
if (!$mysqli)
	{
		die ("Error!");
		mysqli_close($mysqli);
	}
else
{
	/* подготовка запроса на получение данных для последних двадцати сессий передачи */
$query = 'SELECT sd.Num as Num,sd.Type as Type,sd.Value as Value,li.Date as Date,li.uid as Unit 
FROM save_data sd 
INNER JOIN (
	SELECT Num_i as Num, Date, ul.uname as uid 
	FROM info inf 
	INNER JOIN (
		SELECT uNum,uName as uname FROM units_list) as ul
	ON inf.Prib_id = ul.uNum ORDER BY inf.Num_i DESC LIMIT 20) as li
ON li.Num = sd.Num';
/* Добавление к запросу фильтра */
if(isset($_GET['filter']))
{
	$query .= ' '.$_GET['filter'];
}
 
$query .= '  ORDER BY sd.Num ASC';
/* выполнение запроса и формирование из результата массива, по которому будет построена таблица */
$result = $mysqli->query("$query");
	if(!$result)
	{
		die("Wrong query!");
	}
	else
	{
		$t_mas = array();
		while($myrow = mysqli_fetch_array($result,MYSQLI_ASSOC))
		{
			if(!in_array($myrow['Type'], $t_mas))
			{
				array_push($t_mas, $myrow['Type']);
			}
		}
		rsort($t_mas);
		array_unshift($t_mas, "Unit","Date");
		mysqli_data_seek($result, 0);
		$i = 0;
		$ss = -1;
		while($infrow = mysqli_fetch_array($result,MYSQLI_ASSOC))
		{
			$nob = $infrow['Num'];
			if($ss != $nob)
			{
				$i++;
				$ss = $nob;
			}
			$mass[$i][array_search($infrow['Type'], $t_mas)] = $infrow['Value'];
			$mass[$i][array_search("Unit", $t_mas)] = $infrow['Unit'];
			$mass[$i][array_search("Date", $t_mas)] = $infrow['Date'];
		}
		unset($i);
 
		$title .= '<thead><tr>';
		for($i=0; $i<count($t_mas); $i++)
		{ 
			$title .= '<th>'.$t_mas[$i].'</th>';
		}
		unset($i);
		for($i=1; $i<count($mass)+1; $i++)
		{
			$max .= '<tr>';
			for($j=0; $j<count($t_mas); $j++)
			{
				$max .= '<td>'.$mass[$i][$j].'</td>';
			}
			$max .= '</tr>';
		} 
		$list = $title.'</tr></thead><tbody>'.$max.'</tbody>';
		echo '<table width="100%" style="font-size: 11px">'.$list.'</table>';
	}
}
mysqli_close($mysqli);
?>

index.html

index.html

index.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Home page</title>
</head>
<body>
	<p><a href="/admin">Панель управления</a></p>
	<p><a href="/conn.php">Дебаг-монитор</a></p>
	<p><a href="/mainexport.html">Данные за интервал времени</a></p>
</body>
</html>

mainexport.html

mainexport.html

mainexport.html
<!DOCTYPE html>
<html>
<head>
	<title> Export page </title>
	<meta charset="utf-8">
	<!-- jQuery -->
	<script type="text/javascript" src="/core/lib/jquery.min.js"></script>
	<!-- Script for moment lib -->
	<script type="text/javascript" src="/core/lib/moment.js"></script>
	<!--Load Script and Stylesheet for DATETIMEPICKER -->
	<script type="text/javascript" src="core/lib/datetimepicker/jquery.simple-dtpicker.js"></script>
	<link type="text/css" href="core/lib/datetimepicker/jquery.simple-dtpicker.css" rel="stylesheet" />
	<!---->
	<style type="text/css">
.hidden{
	visibility: hidden;
}
 
	</style>
</head>
<body>
<form id="zmnx">
<b> Выберите как вы хотите получить результат </b>
<p><input type="radio" name="how" value="json">JSON лог-файл</p>
<p><input type="radio" name="how" value="table">Таблица данных</p>
</form>
 
<form id="jsonly" class="hidden">
 
<label for="firstt">Выберите начало временного интервала</label>
<p><input id="firstt" type="text" name="firstt" value=" YYYY-MM-DD HH:mm "></p><br>
 
<label for="secondt">Выберите конец временного интервала</label>
<p><input id="secondt" type="text" name="secondt" value=" YYYY-MM-DD HH:mm "></p>
 
<p id="point"><input type="submit" id="okey" value="Принять" onclick="event.preventDefault();getinfo();"></p>
 
</form>
 
<center><div id="outres"></div></center>
</body>
</html>
<script type="text/javascript">
 
function getinfo()
{
	var fdate = document.getElementById('firstt').value + ':00';
	var sdate = document.getElementById('secondt').value + ':00';
	if((moment(fdate, 'YYYY-MM-DD HH:mm:ss',true).isValid()) && (moment(sdate, 'YYYY-MM-DD HH:mm:ss',true).isValid()))
	{
 
		if($('#units').length && $('#units').val() != '')
		{
			$.get('core/deb.php',{fdate: fdate,sdate: sdate, manualmode: '1',unitid: $('#units').val()},function(back){document.getElementById('outres').innerHTML=back;});
			$('#outres').html('<p>Загрузка ...<p>');
		}
		else if(!($('#units').length))
		{
			$.get('core/deb.php',{fdate: fdate,sdate: sdate,fileback: '1'},function(back){document.getElementById('outres').innerHTML=back;});
			$('#outres').html('<p>Загрузка ...<p>');
		}
		else
		{
			alert("Выберите прибор.");
		}
	}
	else
	{
		alert("Заполните все поля корректно.");
	}
}
 
$(function(){
	$('#firstt').appendDtpicker({"locale": "ru","closeOnSelected": true,"autodateOnStart": false,"minuteInterval": 15, "dateFormat": "YYYY-MM-DD hh:mm"});
	$('#secondt').appendDtpicker({"locale": "ru","closeOnSelected": true,"autodateOnStart": false,"minuteInterval": 15, "dateFormat": "YYYY-MM-DD hh:mm"});
	var d = new Date();
	$('#secondt').change(function() {
		$('#firstt').appendDtpicker({
			maxDate: $('#secondt').val() // when the end time changes, update the maxDate on the start field
		});
	});
	$('#firstt').change(function() {
		$('#secondt').appendDtpicker({
			minDate: $('#firstt').val() // when the start time changes, update the minDate on the end field
		});
	});
	$("[name='how']").change(function() {
		if($('input[name=how]:checked').val() == 'table')
		{
			var inp = document.createElement('select');
			inp.id = 'units';
			//jsonly.insertBefore(inp, jsonly.okey);
			$(inp).insertBefore('#point');
			var url = 'core/backend.php';
        	$.get(url,"unitslist=1",function (result) {
                    $('#units').html('<option value=""> -- Выберите прибор -- </option>'+result);
                })
		}
		else { $('#units').remove(); }
		$('#jsonly').removeClass("hidden");
	});
	// trigger change event so datapickers get attached
	$('#secondt').trigger('change');
	$('#firstt').trigger('change');
});
</script>

Каталог export

Каталог core

altread.php

altread.php

altread.php
<?
$str = $_POST;
list($user, $pass, $inject) = explode(';', trim($str, ';'));
$mysqli =  mysqli_connect('address',$user, $pass,'DB');
if (!$mysqli)
	{
		die ("Error!");
		mysqli_close($mysqli);
	}
else
{
$result = $mysqli->query("$inject");
	if(!$result)
	{
		die("Empty result!");
	}
	else
	{
		$t_mas = [];
		$v_mas = [];
		$i = -1;
		$ind = -1;
		$test = mysqli_fetch_array($result,MYSQLI_ASSOC);
		mysqli_data_seek($result, 0);
		if ($test['Num'] != NULL)
		{
			while($myrow = mysqli_fetch_array($result,MYSQLI_ASSOC))
			{
				if($myrow['Num'][0] != $ind)
				{
					$i++;
					$ind = $myrow['Num'][0];
					$t_mas[$i] .= 'Session number'.';'.$myrow['Type'].';';
					$v_mas[$i] .= $myrow['Num'][0].';'.$myrow['Value'].';';
				}
				else
				{
					$t_mas[$i] .= $myrow['Type'].';';
					$v_mas[$i] .= $myrow['Value'].';';
				}
			}
			for($n=0; $n < count($t_mas); $n++)
			{
				$text .= $t_mas[$n]."\r\n".$v_mas[$n]."\r\n\r\n";
			}
		}
		else
		{
			$cnt = 1;
			while($myrow = mysqli_fetch_array($result,MYSQLI_ASSOC))
			{
				foreach ($myrow as $key => $value)
				{
					if($cnt = 1){$title .= $key.';';}
					$v_string .= $value.';';
				}
				$v_string .= "\r\n";
			}
			$text = $title."\r\n".$v_string."\r\n\r\n";
		}
		echo $text; 
	}
}
mysqli_close($mysqli);
?>

backend.php

backend.php

backend.php
<?
require_once 'baseinfo.php';
 
/* получение параметров для устройства с переданным ID */
if(isset($_GET['unitnow']))
{
	$id = $_GET['unitnow'];
	$buff = array();
	$result = $mysqli->query("SELECT DISTINCT `Type` FROM `save_data` sd INNER JOIN (SELECT `Num_i` FROM `info` WHERE `Prib_id` = $id ORDER BY `Num_i` DESC LIMIT 1) inf ON inf.Num_i = sd.Num WHERE (`Type` NOT LIKE 'system_%') AND (`Type` NOT LIKE '%addr')");
	if(mysqli_num_rows($result))
	{
		while($row = mysqli_fetch_array($result))
		{
			$buff[] = array('title'=>$row['Type']);
		}
	$away = array('back'=>'success','sens'=>$buff);
	}
	else
	{
		$away = array('back'=>'error');
	}
	print json_encode($away);
}
 
/* получение списка устройств */
if(isset($_GET['unitslist']))
{
	$result = $mysqli->query("SELECT uNum,uName,Serial FROM units_list");
	while($rows = mysqli_fetch_array($result))
	{
		$back .= '<option value="'.$rows['uNum'].'">'.$rows['uName'].' ('.$rows['Serial'].')</option>';
	}
	print_r($back);
}
/* изменение данных о адресе датчика */
if(isset($_POST['update']))
{
 	$upd = $_POST['update'];
 	$str = '';
 	foreach ($upd as $headkey => $headvalue) 
 	{
 		$str = "UPDATE `Production`.`sensors_adr` SET `".$headvalue[1]."`='".$headvalue[2]."' WHERE id=".$headvalue[0];
 		$mysqli->query("$str");
 	}	
}
/* внесение нового датчика */
elseif(isset($_POST['insert']))
{
	$ins = $_POST['insert'];
	$columns = '`timestamp`,';
	$values = 'NOW(),';
	foreach ($ins as $key => $value) 
	{
		$columns .= '`'.$value[0].'`,';
		$values .= "'".$value[1]."',";
	}
	$str = "INSERT INTO `Production`.`sensors_adr` ($columns) VALUES ($values)";
	$str = str_replace(',)', ')', $str);
	$mysqli->query("$str");
}
/* проверка наличие параметра адреса датчика и его значения в передаваемых устройством данных */
elseif(isset($_GET['unit_addr_exist']))
{
	$unit = $_GET['unit_addr_exist'];
	$result_array = array();
	$away = array();
	$text = "SELECT `sd`.`Num`,`sd`.`type`,`sd`.`value` FROM `Production`.`save_data` as `sd` INNER JOIN (SELECT `Num_i` FROM `Production`.`info` WHERE `Prib_id`='$unit' ORDER BY `Num_i` DESC LIMIT 1) inf  ON `sd`.`Num` = `inf`.`Num_i` WHERE `sd`.`Type` LIKE '%addr'";
	$result = $mysqli->query("$text");
	if($result->num_rows)
	{
		while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
		{
			$result_array[] = ['Type'=>str_replace('_addr','',$row['type']),'Val'=>$row['value']];
		}
		$away = array('error'=>'false','data'=>$result_array);
	}
	else
	{
		$away = array('error'=>'true');
	}
	echo json_encode($away);
}
?>

baseinfo.php

baseinfo.php

baseinfo.php
<? 
$mysqli =  mysqli_connect('address','login','pass','DB');
?>

deb.php

deb.php

deb.php
<?
ini_set('memory_limit', '512M'); // изменение лимита памяти для скрипта
header('Content-Type: text/html; charset=UTF-8'); 
require_once 'baseinfo.php'; // подключение файла хранящем информацию о соединение с базой данных
 
/* функция формирование результатов калибровки в массив */
function finish($mysqli,$qur)
{
	$result = $mysqli->query("$qur");
	mysqli_close($mysqli);
	$mass = array();
	$buff = array();
	$alt = array();
	$i = -1;
	$n = -1;
	$searchindex = 0;
	while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
	{
		$search = $row['uName'].','.$row['serial'];
		if(isset($mass[$search]))
		{
			$i = $mass[$search];
		}
		else
		{
			++$n;
			$i = $n;
			$mass[$search] = $i;
		}
 
		$buff[$i]['uName'] = $row['uName'];
		$buff[$i]['serial'] = $row['serial'];
		$alt[$i][$row['sensor']][] = ['datetime'=>$row['timestamp'],'data'=>json_decode($row['ratio'],false)];
		$searchindex = array_search($row['sensor'], array_column($buff[$i]['sensors'],'sensor'));
		if ((false !== $searchindex) && isset($searchindex))
		{
			$buff[$i]['sensors'][$searchindex] = ['sensor'=>$row['sensor'],'calibr'=>$alt[$i][$row['sensor']]];
		}
		else
		{
			$buff[$i]['sensors'][] = ['sensor'=>$row['sensor'],'calibr'=>$alt[$i][$row['sensor']]];
		}
 
		//$buff[$i]['sensors'][] = ['sensor'=>$row['sensor'],'calibr'=>['datetime'=>$row['timestamp'],'data'=>json_decode($row['ratio'],false)]];
	}
	echo json_encode($buff,JSON_UNESCAPED_UNICODE);
}
/* --------------------------------------------------- */
/* Данные калибровки */
if(isset($_GET['calibration']))
{
	$line = 'SELECT mu.sensor,mu.timestamp,mu.ratio,li.uname as uName,li.Serial as serial FROM multiplier as mu INNER JOIN (SELECT uNum,uName as uname,Serial  from units_list) as li ON li.uNum = mu.unit';
	switch ($_GET['calibration']) 
	{
		case 'full': // все данные
			break;
		case 'filtid': // данные устройства с указанным id
			$line .= ' WHERE mu.unit='.$_GET['id'];
			break;
	}
	finish($mysqli,$line);
}
/* --------------------------------------------------- */
/* Данные за интервал времени */
 
elseif (isset($_GET['manualmode']))
{
	$return = '';
	$infile = '';
	$t_mas = array();
	$mass = array();
	switch($_GET['manualmode'])
	{
		case 1:
			if((isset($_GET['fdate'])) && (isset($_GET['sdate'])) && (isset($_GET['unitid'])))
			{
				$fdate = $_GET['fdate'];
				$sdate = $_GET['sdate'];
				if(strtotime($sdate)>strtotime("now")): $sdate = date("Y-m-d H:i:s"); endif;
				if(strtotime($fdate)<strtotime('2019-01-24 17:31:43')): $fdate = '2019-01-24 17:31:43'; endif;
				$unit = $_GET['unitid'];
				$list = $mysqli->query("SELECT DISTINCT Type FROM save_data sd INNER JOIN (SELECT Num_i from info WHERE `Date` BETWEEN '$fdate' AND '$sdate' AND Prib_id = $unit) inf ON sd.Num = inf.Num_i WHERE (`Type` NOT LIKE 'system_%')");
				$about = mysqli_fetch_array($mysqli->query("SELECT uName,Serial FROM units_list WHERE uNum = $unit"));
				$result = $mysqli->query("
				SELECT sd.Type as Type,sd.Value as Value,li.Date as Date
				FROM `save_data` as sd 
				INNER JOIN (
					SELECT `Date`,`Num_i`
					FROM `info`
					WHERE (`Date` BETWEEN '$fdate' AND '$sdate') AND (Prib_id = $unit)
					) as li
				ON sd.Num = li.Num_i 
				WHERE (`Type` NOT LIKE 'system_%')",MYSQLI_USE_RESULT);
 
				$makeat = '../export/last_export.csv';
				$fd = fopen($makeat, 'w');
				$infile = 'Прибор: ;'.$about['uName'].' ('.$about['Serial'].'); ; Интервал: ;'.$fdate.'; / ;'.$sdate.";\n";
				fwrite($fd,iconv('utf-8', 'windows-1251',$infile));
 
				while($myrow = mysqli_fetch_array($list,MYSQLI_ASSOC)) // составление массива заголовков
				{
					if(!in_array($myrow['Type'], $t_mas))
					{
						array_push($t_mas, $myrow['Type']);
					}
				}
				rsort($t_mas);
				array_unshift($t_mas,"Date");
				unset($infile);
				for($i=0; $i<count($t_mas); $i++)
				{ 
					$infile .= $t_mas[$i].";"; // запись в файл из массива заголовков
				}
				$infile .= "\n"; 
				fwrite($fd, iconv('utf-8', 'windows-1251', $infile)); // вносим заголовки в файл
				//mysqli_data_seek($result, 0); // возвращение указателя в начало результата
				unset($i);
				$i = 0;
				$ss = -1;
				while($infrow = mysqli_fetch_array($result,MYSQLI_ASSOC)) // заполнение массива значений
				{
					$nob = $infrow['Date'];
					if($ss != $nob)
					{
						$i++;
						$ss = $nob;
					}
					$mass[$i][array_search($infrow['Type'], $t_mas)] = $infrow['Value'];
					$mass[$i][array_search("Date", $t_mas)] = $infrow['Date'];
				}
				unset($i);
				unset($infile);
				$infile = '';
				for($i=1; $i<count($mass)+1; $i++)
				{
					for($j=0; $j<count($t_mas); $j++)
					{
						$infile .= $mass[$i][$j].";";
					}
					$infile .= "\n";
					fwrite($fd, iconv('utf-8', 'windows-1251', $infile)); // построчное заполнение файла в цикле
					unset($infile);
				} 
				$return = '<a href="'.$makeat.'" download>Скачать таблицу</a>';
			}
			else
			{
				$return = 'Error';
			}
			mysqli_close($mysqli);
			break;
	}
	echo $return;
}
elseif ((isset($_GET['fdate'])) && (isset($_GET['sdate']))) 
{
	$fdate = $_GET['fdate'];
	$sdate = $_GET['sdate'];
	if(strtotime($sdate)>strtotime("now")): $sdate = date("Y-m-d H:i:s"); endif;
	if(strtotime($fdate)>strtotime("now")): $fdate = '2019-01-24 17:31:43'; endif;
	$result = $mysqli->query("SELECT sd.Type,sd.Value,sd.Num,inf.Date,ul.uName,ul.Serial FROM save_data as sd INNER JOIN (SELECT `Num_i`, `date`, `Prib_id` FROM `info` WHERE `Date` BETWEEN '$fdate' AND '$sdate') as inf ON inf.Num_i = sd.Num INNER JOIN (SELECT DISTINCT `uName`,`uNum`,`Serial` FROM `units_list`) as ul ON ul.uNum = inf.Prib_id",MYSQLI_USE_RESULT); // выполнение запроса
	$first = mysqli_fetch_array($result,MYSQLI_ASSOC); 
	$i = $first['Num'];
	/* формирование файла с результатом */
	if(isset($_GET['fileback']))
	{
		$makeat = '../export/log.txt';
		$fd = fopen($makeat, 'w');
		fwrite($fd, '{');
		fwrite($fd,'"'.$i.'":{"Date":"'.$first['date'].'","uName":"'.$first['uName'].'","serial":"'.$first['Serial'].'","data":{"'.$first['Type'].'":"'.$first['Value'].'"');
		while ($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
		{
			if($row['Num']!=$i)
			{
				$i = $row['Num'];
				fwrite($fd,'}},"'.$i.'":{"Date":"'.$row['date'].'","uName":"'.$row['uName'].'","serial":"'.$row['Serial'].'","data":{');
			}
			else 
			{ 
				fwrite($fd, ',');
			}
			fwrite($fd,'"'.$row['Type'].'":"'.$row['Value'].'"');
		}
		fwrite($fd, '}}}');
		echo '<a href="'.$makeat.'" download>Скачать log-файл</a>';
	}
	else /* возвращение результата как текста */
	{
		echo '{';
		echo '"'.$i.'":{"Date":"'.$first['date'].'","uName":"'.$first['uName'].'","serial":"'.$first['Serial'].'","data":{"'.$first['Type'].'":"'.$first['Value'].'"';
		while ($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
		{
			if($row['Num']!=$i)
			{
				$i = $row['Num'];
				echo '}},"'.$i.'":{"Date":"'.$row['date'].'","uName":"'.$row['uName'].'","serial":"'.$row['Serial'].'","data":{';
			}
			else 
			{ 
				echo ',';
			}
			echo '"'.$row['Type'].'":"'.$row['Value'].'"';
		}
		echo '}}}';
	}
	mysqli_free_result($result);
	mysqli_close($mysqli);
}
?>

jsonadd.php

jsonadd.php

jsonadd.php
<?
require_once '../core/baseinfo.php';
 
if (isset($_POST['fromtable'])) // если пришёл ПОСТ с содержимым экселя
{
$arr = json_decode(str_replace('][', ',', $_POST['fromtable']), true);
$unit_num = $arr[0]['AKey'];
$result = mysqli_fetch_array($mysqli->query("SELECT `OPid` FROM `units_list` WHERE `uNum`='$unit_num'"));
if($result != NULL)
{
	foreach ($arr as $key => $value)
	{
		$mysqli->query("INSERT `Info`(`Date`,`Prib_id`,`OpNum`) VALUES (NOW(),$unit_num,$result[OPid])");
		$lastid = mysqli_insert_id($mysqli);
		foreach ($value as $got => $it) 
		{
			if($got!='AKey')
			{
				$word .= "('$lastid','$got','$it')";
			}
		}
		if($word!='')
		{	
			$str = 'INSERT `Save_data`(`Num`,`Type`,`Value`) VALUES '.$word;
			$query_str = str_replace(')(', '),(', $str);
			$mysqli->query("$query_str");
		}
		$word = '';
	}
	mysqli_close($mysqli);
}
else{}
}
 
elseif(isset($_POST)) // если пришёл пост извне
{
$inmass = file_get_contents('php://input');
$arr = json_decode($inmass,true);
if($arr['system']['Akey']!==NULL) // ищем ключ в массиве с вложенностями
{
	$Key = $arr['system']['Akey'];
	$done = $mysqli->query("SELECT `uNum`,`OPid`,`IDob`,`x`,`y` FROM `units_list` WHERE `AKey`='$Key'"); // если ключ есть в базе, то получаем информацию о приборе
	$result = mysqli_fetch_array($done);
	if($result!=NULL)
	{
		$str = 'INSERT `Save_data`(`Num`,`Type`,`Value`) VALUES ';
		$unit_num = $result[uNum];
		$mysqli->query("INSERT `Info`(`Date`,`Prib_id`,`OpNum`,`ObjectId`,`x`,`y`) VALUES 
			(NOW(),$unit_num,$result[OPid],$result[IDob],$result[x],$result[y])");
		$lastid = mysqli_insert_id($mysqli);
		/* формирование названия параметра с учётом иерархие вложенности */
		$path = array();
		$it = new RecursiveIteratorIterator(new RecursiveArrayIterator($arr), RecursiveIteratorIterator::SELF_FIRST);
		foreach ($it as $key => $value) 
		{
    		$path = array();
    		if(!is_array($value) && $key != 'Akey')
    		{
    			for ($count = $it->getDepth()+1; $count && $count--;)
    			{
        			array_unshift($path, $it->getSubIterator($count)->key());
    			}
    			$path = implode('_', $path);
    			$str .= "('$lastid','$path','$value')";
    		}
		}
		$query_str = str_replace(')(', '),(', $str);
		$mysqli->query("$query_str");
		mysqli_close($mysqli);
	}
}
else {} // если нет ключа, то игнорируем
}
?>

read.php

read.php

read.php
<?
$str = file_get_contents('php://input');
list($user, $pass, $inject) = explode(';', trim($str, ';')); // получение логина и пароля пользователя БД и SQL запроса
$mysqli =  mysqli_connect('localhost',$user, $pass,'production'); 
if (!$mysqli)
	{
		die ("Error!");
		mysqli_close($mysqli); // проверка соединения с БД
	}
else
{
$result = $mysqli->query("$inject");
	if(!$result)
	{
		die("Wrong query!");
	}
	else
	{
		$t_mas = [];
		$v_mas = [];
		$i = -1;
		$test = mysqli_fetch_array($result,MYSQLI_ASSOC);
		mysqli_data_seek($result, 0);
		if ($test['Num'] != NULL)
		{
		/* формирование строк CSV формата */
		while($myrow = mysqli_fetch_array($result,MYSQLI_ASSOC))
		{
 
				if($myrow['Num'][0] != $ind)
				{
					$i++;
					$ind = $myrow['Num'][0];
					$t_mas[$i] .= 'Session number'.';'.$myrow['Type'].';';
					$v_mas[$i] .= $myrow['Num'][0].';'.$myrow['Value'].';';
				}
				else
				{
					$t_mas[$i] .= $myrow['Type'].';';
					$v_mas[$i] .= $myrow['Value'].';';
				}
		}
		for($n=0; $n < count($t_mas); $n++)
		{
			$text .= $t_mas[$n]."\r\n".$v_mas[$n]."\r\n\r\n";
		}
		}
		else
		{
		$cnt = 1;
		while($myrow = mysqli_fetch_array($result,MYSQLI_ASSOC))
		{
			foreach ($myrow as $key => $value)
			{
				if($cnt = 1){$title .= $key.';';}
				$v_string .= $value.';';
			}
			$v_string .= "\r\n";
		}
		$text = $title."\r\n".$v_string."\r\n\r\n";
		}
		echo $text; 
	}
}
mysqli_close($mysqli);
?>

Каталог img

Каталог img


Каталог lib

Каталог lib

Каталог admin

admin.php

admin.php

admin.php
<?
session_start ();
if (!$_SESSION['level'] || $_SESSION['level'] < 1) die ( '<center><a href=/admin/index.php>Пройдите авторизацию!</a><center>' );
 
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title> Центральная панель управления </title>
<style type="text/css">
A.admlink {color: red;}
A.alllink { color: green;}
#cen{
	text-align: center;
}
.botexit{text-align: right; width: 280px; padding: 10px;}
.all{border: solid 1px; text-align: center; width: 280px; padding: 10px;}
.father{width: 500px; border-style: dotted; border-width: 2px; 
border-radius: 125px 125px 15px 125px;}
.linf {border: 1px solid #333; /* Рамка */
    display: inline-block;
    padding: 5px 15px; /* Поля */
    text-decoration: none; /* Убираем подчёркивание */
    color: #000; /* Цвет текста */
    }
.linf:hover {box-shadow: 0 0 5px rgba(0,0,0,0.3); /* Тень */
    background: linear-gradient(to bottom, #fcfff4, #e9e9ce); /* Градиент */
    color: #a00;
    }
</style>
</head>
<body>
<center><p><h3> Панель управления </h3></p></center>
<center>
<p>
<div class="father">
<p>
<div class="all">
 
<a href="/admin/edit/export.php"  class="admlink">SQL запросы</a><div id="cen">(только для администраторов)</div><hr>
<a href="/admin/edit/operator.php" class="admlink">Редактировать персонал </a><div id="cen"> (требуется доступ "moderator")</div><hr>
<a href="/admin/edit/pribor.php"  class="admlink">Редактировать приборы</a><div id="cen"> (требуется доступ "moderator")</div><hr>
<a href="/admin/edit/object.php"  class="admlink">Редактировать объекты</a><div id="cen"> (требуется доступ "moderator")</div><hr>
<a href="/admin/edit/sensors.php"  class="admlink">Редактировать данные датчиков</a><div id="cen">(требуется доступ "support")</div><hr>
<a href="/admin/edit/calib.php" class="admlink">Внести данные калибровки</a><div id="cen">(требуется доступ "support")</div><hr>
</div>
</p>
<p>
<div class="all">
<a href="/admin/edit/makeurchoise.html" class="alllink">Внесение новых данных</a><hr>
</div>
</p>
<br>
<div class="botexit">
<a href="admin_logout.php" class="linf">Выйти?</a>
</div>
</div>
</p>
</center>
</body>
</html>

admin_logout.php

admin_logout.php

admin_logout.php
<?
 session_start ();
 
if (!$_SESSION['level']) die ( '<center><p>Error!: Empty page</p></center>' );
 
session_destroy ();
?>
 
<html>
<head>
<title>Панель управления</title>
<style type= "text/css">#wrap{width: 100%;height: 100%;}.loginbox1{width: 300px;padding: 4px;border: 1px solid #777;background-color: #777;color: white;font-weight: bold;}.loginbox2{width: 300px;padding: 4px;border: 1px solid #777;color: #777;}</style>
</head>
<body>
<center>
<table cellpadding= "0" cellspacing= "0" id= "wrap"><tr><td align= "center">
<table cellpadding= "0" cellspacing= "0"><tr><td class= "loginbox1" align= "center">Выход выполнен</td></tr>
	<tr><td class= "loginbox2" align= "center"><a href=/admin/index.php>Вернуться</a></td></tr>
</table></td></tr>
</table>
</center>
</body>
</html>

config.php

config.php

config.php
<?php 
<?php 
$buffer = array();
$buffer['login'] = ['password'=>'pass','level'=>255]; 
$buffer['anotherLogin'] = ['password'=>'pass','level'=>255];
// От 1 до 255. 0 - не авторизован, 1 - низший уровень.
?> 

index.php

index.php

index.php
<? 
session_start ();
if(!empty($_SESSION['level']))
{
	if($_SESSION['level'] > 1)
	{
?>
<html><head>
<title>Панель управления</title>
<style type= text/css>#wrap{width: 100%;height: 100%;}
.loginbox1{width: 300px;padding: 4px;border: 1px solid #777;background-color: #777;color: white;font-weight: bold;}
.loginbox2{width: 300px;padding: 4px;border: 1px solid #777;color: #777;}
.loginnow{width: 300px;padding: 4px;border: 1px solid #777;color: #777;}
</style>
</head>
<body>
	<center>
		<table cellpadding=0 cellspacing= «0» id= «wrap»><tr><td align=center>
			<table cellpadding=0 cellspacing= «0»>
				<tr><td class=loginbox1 align=center>Вход выполнен</td></tr>
				<tr><td class=loginbox2 align=center>
					<a href=admin.php>Перейти к панели управления</a></td></tr>
			</table>
			</td></tr>
		</table>
	</center>
</body>
</html>
<?
exit;
}
}
$_SESSION['level'] = 0;
include ('config.php');
function not_logged_in ()
{
	echo '
	<html>
	<head>
	<title>Вход в панель управления</title>
	<style type=text/css>
	#wrap{width: 100%;height: 100%;}
	#wraptd{padding: 20px;}
	.loginbox1{width: 300px;padding: 4px;border: 1px solid #777;background-color: #777;color: white;font-weight: bold;}
	.loginbox2{width: 300px;padding: 4px;border: 1px solid #777;color: #777;}
	.loginbox2 input{width: 200px;margin: 3px 0;border-color: #888;color: #777;}
	</style>
	</head>
	<body>
		<center>
			<table cellpadding=0 cellspacing=0 id=wrap><tr><td align=center id=wraptd>
			<table cellpadding=0 cellspacing=0>
			<tr><td class=loginbox1 align=center>Вход в панель</td></tr>
			<tr><td class=loginbox2 align=center><form action=index.php method=post><input type=text name=login value=Логин onclick=this.value=""><br><input type="password" name=password value=Пароль onclick=this.value=""><br><input type=submit value=Войти></form></td></tr>
			</table></td></tr>
			</table>
		</center>
	</body>
	</html>';
 
exit;
}
if (!$_POST) not_logged_in ();
if (!$_POST['login']) not_logged_in ();
if (!$_POST['password']) not_logged_in ();
if($buffer[$_POST['login']])
{
	if($buffer[$_POST['login']]['password'] == $_POST['password'])
	{
		$_SESSION['level'] = $buffer[$_POST['login']]['level'];
		$loggednow = $_POST['login'];
	}
}
else 
{
	not_logged_in();
}
?>
<html>
<head>
<title>
	Панель управления
</title>
<style type=text/css>#wrap{width: 100%;height: 100%;}
	.loginbox1{width: 300px;padding: 4px;border: 1px solid #777;background-color: #777;color: white;font-weight: bold;}
	.loginbox2{width: 300px;padding: 4px;border: 1px solid #777;color: #777;}
	.loginnow{width: 300px;padding: 4px;border: 1px solid #777;}
</style>
</head>
<body>
	<center>
		<table cellpadding=0 cellspacing=0 id=wrap><tr>
		<td align=center>
			<table cellpadding=0 cellspacing=0>
			<tr>
			<td class=loginbox1 align=center>Вход выполнен</td>
			</tr>
			<tr>
			<td align=center class=loginnow>Вы зашли как<? echo ' "'.$loggednow.'"';?></td>
			</tr>
			<tr>
			<td class=loginbox2 align=center><a href=admin.php>Перейти к панели управления</a></td>
			</tr>
			</table>
			</td>
			</tr>
		</table>
	</center>
</body>
</html>

Каталог edit

Каталог edit

calib.php

calib.php

calib.php
<?
session_start ();
if (!$_SESSION['level']) die ( '<center><a href=/admin/index.php>Пройдите авторизацию</a><center>' );
if($_SESSION['level'] < 2) die ('<center><a href=/admin/index.php>Недостаточно полномочий</a><center>');
require_once '../../core/baseinfo.php';
/* скрипт внесения новых данных калибровки */
if ((isset($_POST['uid']))&&(isset($_POST['sensid']))&&(isset($_POST['n'])))
{
	$str = '{"n":'.$_POST['n'];
	if($_POST['n']>0)
	{
		$str .= ',"ai":[';
		for($i=0;$i<$_POST['n']+1;$i++)
		{
			$str .= $_POST['ai'.$i].',';
		}
		$str .= ']}';
		$str = str_replace(',]}', ']}', $str);
	}
	else
	{
		$str .= '}';
	}
 
	$alias = '(';
	$unit = $_POST['uid'];
	$sensor = $_POST['sensid'];
	$arr = explode("_",$sensor);
	$buff = array();
	for($i=0; $i<count($arr); ++$i)
	{
		for($j=0; $j < $i+1; ++$j)
		{
			$buff[$i][] = $arr[$j];
		}
	}
	$buff = array_reverse($buff);
	foreach ($buff as $key => $value) 
	{
		$alias .= "'".implode('_', $value)."',";
	}
	$alias .= ')';
	$alias = str_replace(',)', ')', $alias);
	/* если адрес для датчика устройства имеется в таблице адресов, то внести и в таблицу калибровки */
	$check_exist = $mysqli->query("SELECT `adr` FROM `Production`.`sensors_adr` WHERE `sensor` IN $str AND `unit_id` = $unit ORDER BY `id` DESC LIMIT 1");
	if($check_exist->num_rows)
	{
		$adr = mysqli_fetch_array($check_exist, MYSQLI_ASSOC);
		$adr = $adr['adr'];
		$mysqli->query("INSERT INTO `multiplier` (`unit`,`sensor`,`timestamp`,`ratio`,`adr`) VALUES ($unit,'$sensor',NOW(),'$str','$adr')");
	}
	else
	{
		$mysqli->query("INSERT INTO `multiplier` (`unit`,`sensor`,`timestamp`,`ratio`) VALUES ($unit,'$sensor',NOW(),'$str')");
	}
}
 
?>
 
<style>
td {
  text-indent: 5px;
  border-collapse: collapse;
  color: #500;
  border-top: 0px solid transparent;
  padding: 2px;
  text-align:left;
}
tr{text-indent: 1px;}
 
input[id=newinp] 
{ 
	-moz-appearance: textfield;
	width: 4em;
}
input[id=newinp]::-webkit-inner-spin-button 
{ 
  display: none;
}
 
</style>
 
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Внесение данных калибровки</title>
	<script src="http://code.jquery.com/jquery-latest.js"></script>
	<style type="text/css">
		.linf {
    border: 1px solid #333; /* Рамка */
    display: inline-block;
    padding: 5px 15px; /* Поля */
    text-decoration: none; /* Убираем подчёркивание */
    color: #000; /* Цвет текста */
    }
   .linf:hover {
    box-shadow: 0 0 5px rgba(0,0,0,0.3); /* Тень */
    background: linear-gradient(to bottom, #fcfff4, #e9e9ce); /* Градиент */
    color: #a00;
    }
	</style>
</head>
<body onload="elemt();">
	<a href="/admin/admin.php" class="linf">Назад</a>
<center><div style="width: 600px; text-align: left;">
 
<p><form id="ratform" onsubmit="alert('Данные успешно приняты!');" method="POST">
<div id="unitdiv"><p>Выберите устройство: <br><select id="unitid" name="uid" required>
<option value="">---</option>
<?
$result = $mysqli->query("SELECT `uNum`,`uName`,`Serial` FROM `units_list`");
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
{
	echo "<option value=".$row['uNum'].">".$row['uName']."(".$row['Serial'].") </option>";
}
?>
</select></p></div>
<div id="sensordiv">
<p>Выберите название сенсора и калибровочный параметр<br>
	<select id="sensorid" name="sensid" required>
	<option value=""> Выберите прибор </option>
</select></p></div>
<div id="ndiv">
<p> Укажите n<br>
<select id="nid" name="n" onchange="elemt();">
<option value=0>n=0</option>
<option value=1>n=1</option>
<option value=2>n=2</option>
<option value=3>n=3</option>
<option value=4>n=4</option>
<option value=5>n=5</option>
<option value=6>n=6</option>
</select></p>
</div>
<p><div id="calibdiv"></div></p>
<p><form id="butt"><input type="submit" id="buttonok" value="Готово"></form></p>
</form></p>
 
 
</body>
</html>
 
<script type="text/javascript">
/* создание форм в зависимости от степени точности калибровки */
function elemt()
{
	var i =  Number(document.getElementById('nid').value) +  Number(1);
	$("#calibdiv").empty();
	if(i != 1)
	{
	var cnt;
	for(cnt = 0; cnt < i; ++cnt)
	{
		var inp = document.createElement('input');
		inp.type = 'number';
		inp.step= '0.0001';
		inp.name='ai'+cnt;
		inp.id = 'newinp';
		inp.required = true;
		inp.placeholder='a'+cnt;
		calibdiv.appendChild(inp);
	}
	}
}
 
$(document).ready(function () {
    $('#unitid').change(function () {
        var unitid = $(this).val();
        if (unitid == '') 
        {
            $('#sensorid').html('<option value=""> Выберите прибор </option>');
            return(false);
        }
        /* загрузка списка датчиков прибора */
        $('#sensorid').html('<option value="">загрузка...</option>');
        var url = '../../core/backend.php';
        $.get(url,"unitnow=" + unitid,function (result) {
        			if(result.back == 'error')
        			{
        				$('#sensorid').html('<option value="">  Нет данных  </option>');
        			}
        			else
        			{
                    	var options = '<option value=""> Выберите датчик </option>';
                    	$(result.sens).each(function() {
                        	options += '<option value="' + $(this).attr('title') + '">' + $(this).attr('title') + '</option>';
                    	});
                    	$('#sensorid').html(options);
                    	//$('#sensorid').attr('disabled', false);
                	}
            },"json"
        );
    });
});
 
 
</script>
 
<?
/* список уже внесённых данных калибровки */
$gg = $mysqli->query("SELECT mu.sensor,mu.timestamp,mu.ratio,mu.adr,CONCAT(li.uname,'(',li.Serial,')') as unit FROM multiplier as mu INNER JOIN (SELECT uNum,uName as uname,Serial  from units_list) as li ON li.uNum = mu.unit ORDER BY unit,sensor");
echo '<details><summary>Список данных колибровки</summary><table>';
while ($grow = mysqli_fetch_array($gg,MYSQLI_ASSOC))
{
	echo '<tr><td>'.$grow['unit'].'</td><td>'.$grow['sensor'].'</td><td>'.$grow['timestamp'].'</td><td>'.$grow['ratio'].'</td><td>'.$grow['adr'].'</tr>';
}
echo '</table></details></div></center>';
?>

excel.php

excel.php

excel.php
<? session_start ();
if (!$_SESSION['level']) die ( '<center><a href=/admin/index.php>Пройдите авторизацию</a><center>' );
if($_SESSION['level'] < 1) die ('<center><a href=/admin/index.php>Недостаточно полномочий</a><center>');
require_once '../../core/baseinfo.php';
$result = $mysqli->query("SELECT uNum, uName, Serial FROM units_list");
?>
<html>
<head>
    <meta charset="utf-8">
    <title>Выгрузка из excel</title>
 
    <script src="../../core/lib/xlsx.full.min.js"></script>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/xlsx/0.7.7/xlsx.core.min.js"></script>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <style>
    .bl { display: none;}
    .linf {
    border: 1px solid #333; /* Рамка */
    display: inline-block;
    padding: 5px 15px; /* Поля */
    text-decoration: none; /* Убираем подчёркивание */
    color: #000; /* Цвет текста */
    }
   .linf:hover {
    box-shadow: 0 0 5px rgba(0,0,0,0.3); /* Тень */
    background: linear-gradient(to bottom, #fcfff4, #e9e9ce); /* Градиент */
    color: #a00;
    }
    .exclink{
    border: 1px outset #333; /* Рамка */
    border-radius: 15px;
    background:#eaeaea;
    display: inline-block;
    padding: 5px 15px; /* Поля */
    text-decoration: none;
    }
    .exclink:hover{
 
        background: linear-gradient(to bottom, #fcfff4, #e9e9ce);
        color: red;
    }
    </style>
</head>
<body>
<center><div style="width: 600px; text-align: left; display: inline-block; vertical-align: middle;">
<form id="myForm">
Выберите устройство:<br>
<select id="klop">
<option value=""> --- </option>
<? 
while ($row = mysqli_fetch_array($result))
{
echo "<option value=".$row['uNum'].">";
echo $row['uName'].'('.$row['Serial'].')';
echo "</option>";
}
?>
</select>
</form>
<div id="toShow" class="variations_button bl">
<input accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,application/vnd.ms-excel.sheet.macroEnabled.12" type="file" id="excel" name="files"/>
<input type="submit" value="Готово" id="done"/>
</div>
</div></center>
<center><div style="position: fixed; bottom: 5%;"><a href="../../export/Standart book.xlsx" class="exclink">Excel файл со списком</a><p style="font-size: 12px"><?
$filename = '../../export/Standart book.xlsx';
if (file_exists($filename)) 
{
    echo "Обновлено: " . date ("d M y", filemtime($filename));
} ?></p></center></div>
 
<script>
 
function debug(inp)
{
    $.ajax({
    url:"../../core/jsonadd.php",
    dataType: 'json',
    type: 'POST',
    data: {fromtable: '[{"AKey":"'+document.getElementById('klop').value+'"}]'+JSON.stringify(inp) } , 
    async: true});
}
/* чтение файла эксель и формирование с помощью библиотеки JSON */
function handleFile(e) 
{
    var files = e.files;
    var i, f;
    var sus = '';
 
    //Loop through files
    for (i = 0, f = files[i]; i != files.length; ++i) 
    {
        var reader = new FileReader();
        var name = f.name;
        reader.onload = function (e) 
        {
            var data = e.target.result;
            var workbook = XLSX.read(data, { type: 'binary' });
            var sheet_name_list = workbook.SheetNames;
            sheet_name_list.forEach(function (y) 
                {
                    var result = '';
                    /* iterate through sheets */
            //Convert the cell value to Json
                var roa = XLSX.utils.sheet_to_json(workbook.Sheets[y]);
                if (roa.length > 0)
                    {
                        result = roa;
                        debug(result);
                    }
 
                });
        };
        reader.readAsArrayBuffer(f);
    }
alert("Данные успешно обработаны!");
}
  //Change event to dropdownlist
 document.getElementById('done').addEventListener('click', updateSize, false);
 
// preprocessing input data
function updateSize() 
{
   var doc = document.getElementById("excel");
    var listoftype = ['xlsx','xlsm']; // array of allowable formats
    if(($.inArray((doc.files[0].name.split('.')).pop(), listoftype)) == -1) 
    {
        alert('Выбран файл не поддерживаемого формата!\r\nПоддерживаемые форматы: '+listoftype.join(', '));
    }
    else  // 
    { 
    var resultAction = confirm("Проверьте внесённые данные: \r\n Устройство: "+ $("#klop option:selected").text() + "\r\n Файл: "+doc.files[0].name);
        if(resultAction)
        {
            handleFile(doc);
        }
    }
  doc.value = "";
}
 
/* show file-form if UNIT selected
else hiden
*/
var sel = document.getElementById('klop');
    sel.addEventListener('change', function (event) {
        if(this.value)  
        {
            document.getElementById('toShow').classList.remove('bl');
        } 
        else 
        {
            document.getElementById('toShow').classList.add('bl');
        }
    });
 
</script>
 
</body>
</html>

export.php

export.php

export.php
<? session_start ();
if (!$_SESSION['level']) die ( '<center><a href=/admin/index.php>Пройдите авторизацию</a><center>' );
if($_SESSION['level'] < 255) die ('<center><a href=/admin/index.php>Недостаточно полномочий</a><center>');
$mysqli =  mysqli_connect('address','ReadOnlyLogin', 'pass','DB') or die ("Connection error: ". mysqli_error($mysqli));
?>
<style type="text/css">
        .linf {
    border: 1px solid #333; /* Рамка */
    display: inline-block;
    padding: 5px 15px; /* Поля */
    text-decoration: none; /* Убираем подчёркивание */
    color: #000; /* Цвет текста */
    }
   .linf:hover {
    box-shadow: 0 0 5px rgba(0,0,0,0.3); /* Тень */
    background: linear-gradient(to bottom, #fcfff4, #e9e9ce); /* Градиент */
    color: #a00;
    }
</style>
<a href="/admin/admin.php" class="linf">Назад</a>
<center>
<form method="POST" action="">
		<label> Выполнить SQL запрос<br> </label>
        <textarea name="query" type="text" rows="20" style="width: 900px; height: 400px; border: 1px solid #008"/></textarea><br>
        <input type="submit" name="gotadd" value="Выполнить и скачать"/><br>
</form></center>
<?
if(isset($_POST['query']))
{
    $path = $_SERVER['DOCUMENT_ROOT'].'/export/file.csv';
	unlink($path);
	$inject = strip_tags($_POST['query']);
	if ($inject{strlen($inject)-1} == ';') { $inject = substr($inject,0,-1); }
	$result = $mysqli->query("$inject INTO OUTFILE '$path' CHARACTER SET cp1251 FIELDS TERMINATED BY ';'LINES TERMINATED BY '\r\n'") or die ("Query error: ". mysqli_error($mysqli));
	if (!mysqli_error())
	{
 	echo '<br><center><a href="http://188.35.161.31/export/file.csv">Скачать</a></center>';
 	}
mysqli_close($mysqli);
}
?>

index.php

index.php

index.php
<?php 
session_start ();
if (!$_SESSION['level']) die ( '<center><a href=/admin/index.php>Пройдите авторизацию</a><center>' );
  header('Location:/admin/admin.php');
  exit;
?>

makeurchoise.html

makeurchoise.html

makeurchoise.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>Выбор способа внесения данных</title>
	<script src="http://code.jquery.com/jquery-latest.js"></script>
	<style type="text/css">
	.linf 
	{
    	border: 1px solid #333; /* Рамка */
    	display: inline-block;
    	padding: 5px 15px; /* Поля */
    	text-decoration: none; /* Убираем подчёркивание */
    	color: #000; /* Цвет текста */
    }
    .linf:hover 
    {
    	box-shadow: 0 0 5px rgba(0,0,0,0.3); /* Тень */
    	background: linear-gradient(to bottom, #fcfff4, #e9e9ce); /* Градиент */
    	color: #a00;
    }
    .container 
    {
 		width: 90%;	
	}
	img 
	{
  		max-width: 45%;
  		display: inline-block;
  		height: auto;
	}
	@media screen and (max-width: 1000px)
	{
		img
		{
			max-width: 100%;
		}
	}
	.image
	{
		opacity: 0.7;
	}
	.image:not(:hover)
	{
		transition: 0.5s;
	}
	.image:hover
	{
 
		transition: 1s;
      	-webkit-transform: translateX(30px) translateY(-30px);
  		transform: translateX(30px) translateY(-30px);
  		opacity: 1;
	}
	.excel:hover
	{
		-webkit-box-shadow:-30px 30px 50px 25px #6bbd6c ;
		-moz-box-shadow:-30px 30px 50px 25px #6bbd6c ;
		box-shadow:-30px 30px 50px 25px #6bbd6c ;
	}
	.simple:hover
	{
		-webkit-box-shadow:-30px 30px 50px 25px #404040 ;
		-moz-box-shadow:-30px 30px 50px 25px #404040 ;
		box-shadow:-30px 30px 50px 25px #404040 ;
	}
	html, body, iframe { height: 100%; overflow: hidden;}
	</style>
</head>
<body>
 
<a href="/admin/admin.php" class="linf">Назад</a>
<center><p>
	<div id="choise" class="container">
		<img class="excel image" id="excel" src="../../core/img/excel.png" width="1025" height="550">
		<img class="simple image" id="simple" src="../../core/img/form.png" width="1025" height="550">
	</div>
	<div id="frame" style="width: 100%; height: auto;" hidden>
 
	</div></p>
</center>
</body>
</html>
<script type="text/javascript">
/* Создание фрейма с выбранной страницей */
$('img').on('click',function()
{
	var page = $(this).prop('id');
	$('#frame').html('<iframe allowtransparency="true" allowfullscreen allowscriptaccess="always" frameborder="0" scrolling="yes" style="width: 100%; height: 90vh;" src="' + page + '.php"></iframe>');
	$('#frame').removeAttr('hidden');
	$('#choise').attr('hidden','true');
});
</script>

object.php

object.php

object.php
<?php session_start ();
if (!$_SESSION['level']) die ( '<center><a href=/admin/index.php>Пройдите авторизацию</a><center>' );
if($_SESSION['level'] < 127) die ('<center><a href=/admin/index.php>Недостаточно полномочий</a><center>');
require_once '../../core/baseinfo.php';
?>
 
<style>
td {
  text-indent: 0px;
  width:200px;  
  border-collapse: collapse;
  color: #500;
  border-top: 0px solid transparent;
  padding: 2px;
  text-align:center;
}
tr{text-indent: 1px;}
		.linf {
    border: 1px solid #333; /* Рамка */
    display: inline-block;
    padding: 5px 15px; /* Поля */
    text-decoration: none; /* Убираем подчёркивание */
    color: #000; /* Цвет текста */
    }
   .linf:hover {
    box-shadow: 0 0 5px rgba(0,0,0,0.3); /* Тень */
    background: linear-gradient(to bottom, #fcfff4, #e9e9ce); /* Градиент */
    color: #a00;
    }
</style>
<a href="/admin/admin.php" class="linf">Назад</a>
<center>
<div style="display: inline-block; margin-left: 0px; vertical-align: middle;">
	<form method="POST" action="">
		<label> Добавить новый объект<br> </label>
        <input name="addobj" type="text" placeholder="Введите наименование"/><br>
        <input type="submit" name="gotadd" value="Добавить"/><br>
    </form>
</div>
 
<div style="display: inline-block; margin-left: 45px; vertical-align: middle;">
	<form method="POST" action="">
		<label> Удалить объект из базы<br> </label>
        <input name="delobj" type="text" placeholder="Введите ID"/><br>
        <input type="submit" name="gotdel" value="Удалить"/><br>
    </form>
</div>
</center>
 
<?
/* обработка удаления и внесения объектов */
if(isset($_POST['addobj']) && ($_POST['addobj']!==''))
{
	$name=strip_tags($_POST['addobj']);
	$addyet = $mysqli->query("INSERT INTO `Objects` (`NameOb`) VALUES ('$name')");
	header("Refresh:0");
}
elseif(isset($_POST['delobj']) && ($_POST['delobj']!==''))
{
	$delid=strip_tags($_POST['delobj']);
	$delyet = $mysqli->query("UPDATE `Objects` SET `NameOb`='DELETED' WHERE NumOb=$delid");
	header("Refresh:0");
}
else{}
 
Echo "<center>Список объектов:<br>";
 
$result = $mysqli->query("SELECT * FROM `Objects` WHERE `NameOb`!='DELETED'");
	Echo '<table><tr><td><P><center> ID </center></td><td><center> Object </center></P></td></tr>';
	do{
		Echo '<tr>';
		Echo '<td>'.$myrow['NumOb'].'</td>';
		Echo '<td>'.$myrow['NameOb'].'</td>';
		Echo '</tr>';
	}while ($myrow = mysqli_fetch_array($result));
	Echo '</table></center><br>';
?>

operator.php

operator.php

operator.php
<? session_start ();
if (!$_SESSION['level']) die ( '<center><a href=/admin/index.php>Пройдите авторизацию</a><center>' );
if($_SESSION['level'] < 127) die ('<center><a href=/admin/index.php>Недостаточно полномочий</a><center>');
require_once '../../core/baseinfo.php';
?>
 
<style>
td {
  text-indent: 0px;
  width:200px;  
  border-collapse: collapse;
  color: #500;
  border-top: 0px solid transparent;
  padding: 2px;
  text-align:center;
}
tr{text-indent: 1px;}
 
    .linf {
    border: 1px solid #333; /* Рамка */
    display: inline-block;
    padding: 5px 15px; /* Поля */
    text-decoration: none; /* Убираем подчёркивание */
    color: #000; /* Цвет текста */
    }
   .linf:hover {
    box-shadow: 0 0 5px rgba(0,0,0,0.3); /* Тень */
    background: linear-gradient(to bottom, #fcfff4, #e9e9ce); /* Градиент */
    color: #a00;
    }
</style>
<a href="/admin/admin.php" class="linf">Назад</a>
<center>
<div style="display: inline-block; margin-left: 0px; vertical-align: middle;">
	<form method="POST" action="">
		<label> Добавить нового оператора<br> </label>
        <input name="addoperator" type="text" placeholder="Введите имя"/><br>
        <input type="submit" name="gotadd" value="Добавить"/><br>
    </form>
</div>
 
<div style="display: inline-block; margin-left: 50px; vertical-align: middle;">
	<form method="POST" action="">
		<label> Удалить оператора из базы<br> </label>
        <input name="deloperator" type="text" placeholder="Введите ID"/><br>
        <input type="submit" name="gotdel" value="Удалить"/><br>
    </form>
</div>
</center>
 
<?
/* Обработчик добавление и удаления операторов */
if(isset($_POST['addoperator']) && ($_POST['addoperator']!==''))
{
	$name=strip_tags($_POST['addoperator']);
	$addyet = $mysqli->query("INSERT INTO `OPR_list` (`Name`) VALUES ('$name')");
	header("Refresh:0");
}
elseif(isset($_POST['deloperator']) && ($_POST['deloperator']!==''))
{
	$delid=strip_tags($_POST['deloperator']);
	$delyet = $mysqli->query("UPDATE `OPR_list` SET `Name`='REMOVED' WHERE N=$delid");
	header("Refresh:0");
}
else{}
 
Echo "<center>Список операторов:<br>";
 
$result = $mysqli->query("SELECT * FROM `OPR_list` WHERE `Name`!='REMOVED'");
	Echo '<table><tr><td><P><center> ID </center></td><td><center> Name </center></P></td></tr>';
	do{
		Echo '<tr>';
		Echo '<td>'.$myrow['N'].'</td>';
		Echo '<td>'.$myrow['Name'].'</td>';
		Echo '</tr>';
	}while ($myrow = mysqli_fetch_array($result));
	Echo '</table></center><br>';
?>

pribor.php

pribor.php

pribor.php
<?php session_start ();
if (!$_SESSION['level']) die ( '<center><a href=/admin/index.php>Пройдите авторизацию</a><center>' );
if($_SESSION['level'] < 127) die ('<center><a href=/admin/index.php>Недостаточно полномочий</a><center>');
require_once '../../core/baseinfo.php';
?>
<style type="text/css">
	    .linf {
    border: 1px solid #333; /* Рамка */
    display: inline-block;
    padding: 5px 15px; /* Поля */
    text-decoration: none; /* Убираем подчёркивание */
    color: #000; /* Цвет текста */
    }
   .linf:hover {
    box-shadow: 0 0 5px rgba(0,0,0,0.3); /* Тень */
    background: linear-gradient(to bottom, #fcfff4, #e9e9ce); /* Градиент */
    color: #a00;
    }
</style>
<a href="/admin/admin.php" class="linf">Назад</a>
<center>
<p>
<div style="display: inline-block; margin-left: 0px; vertical-align: middle;">
	<form method="POST" action="">
		<label> Добавить новый прибор<br> </label>
        <input name="uname" type="text" placeholder="Введите наименование" required/><br>
        <input name="userial" type="text" placeholder="Введите серийный ключ" required/><br>
        <input name="uakey" type="text" placeholder="Введите ключ доступа" required/><br>
        <input name="ux" type="text" placeholder="Введите координату X" required/><br>
        <input name="uy" type="text" placeholder="Введите координату Y" required/><br>
        <input name="uidobj" type="text" placeholder="Введите ID объекта" required/><br>
        <input name="uidop" type="text" placeholder="Введите ID оператора" required/><br>
        <input type="submit" name="gotadd" value="Добавить"/><br>
    </form>
</div>
<div style="display: inline-block; margin-left: 45px; vertical-align: middle;">
	<form method="POST" action="">
		<label> Обновить данные<br> </label>
        <input name="updid" type="text" placeholder="Введите ID прибора" required/><br>
        <input name="updname" type="text" placeholder="Введите новое имя"/><br>
        <input name="updx" type="text" placeholder="Введите новую координату X"/><br>
        <input name="updy" type="text" placeholder="Введите новую координату Y"/><br>
        <input name="updobj" type="text" placeholder="Введите ID нового объекта"/><br>
        <input name="updop" type="text" placeholder="Введите ID нового оператора"/><br>
        <input type="submit" name="gotdel" value="Обновить"/><br>
    </form>
</div>
<div style="display: inline-block; margin-left: 45px; vertical-align: middle;">
	<form method="POST" action="">
		<label> Удалить прибор из базы<br> </label>
        <input name="udel" type="text" placeholder="Введите ID"/><br>
        <input type="submit" name="gotdel" value="Удалить"/><br>
    </form>
</div>
</p>
</center>
 
<?
/* внесение нового устройства */
if(isset($_POST['uname']) && isset($_POST['userial']) && isset($_POST['uakey']) && isset($_POST['ux']) && isset($_POST['uy']) && isset($_POST['uidobj']) &&(isset($_POST['uidop'])) && ($_POST['uname'] !== '') && ($_POST['userial'] !== '') && ($_POST['uakey'] !== '') && ($_POST['ux'] !== '') && ($_POST['uy']!=='') && ($_POST['uidobj'] !=='') && ($_POST['uidop']!==''))
{
	$name=strip_tags($_POST['uname']);
	$serial=strip_tags($_POST['userial']);
	$akey=strip_tags($_POST['uakey']);
	$x=strip_tags($_POST['ux']);
	$y=strip_tags($_POST['uy']);
	$idobj=strip_tags($_POST['uidobj']);
	$opid=strip_tags($_POST['uidop']);
	$addyet = $mysqli->query("INSERT INTO `units_list` (`uName`,`Serial`,`Akey`,`OPid`,`x`,`y`,`IDob`) VALUES ('$name','$serial','$akey','$opid','$x','$y','$idobj')");
	header("Refresh:0");
}
/* удаление устройства */
elseif(isset($_POST['udel']))
{
 
	$delid=strip_tags($_POST['udel']);
	$delyet = $mysqli->query("UPDATE `units_list` SET `remove`='1' WHERE uNum=$delid");
	header("Refresh:0");
}
/* обновление информации о устройстве */
elseif (isset($_POST['updid']) && isset($_POST['updop']) && isset($_POST['updname']) && isset($_POST['updx']) && isset($_POST['updy']) && isset($_POST['updobj']) && ($_POST['updid'] !== '') && ($_POST['updname'] !== '') && ($_POST['updy'] !== '') && ($_POST['updobj']!=='') && ($_POST['updop']!==''))
{
	$updid=strip_tags($_POST['updid']);
	$updname=strip_tags($_POST['updname']);
	$updx=strip_tags($_POST['updx']);
	$updy=strip_tags($_POST['updy']);
	$updobj=strip_tags($_POST['updobj']);
	$updop=strip_tags($_POST['updop']);
	$addyet = $mysqli->query("UPDATE `units_list` SET `uName`='$updname',`x`='$updx',`y`='$updy',`IDob`='$updobj',`OPid`='$updop' WHERE `uNum`='$updid'");
	header("Refresh:0");
}
else{}
 
Echo '<center><div class="absolute">Список приборов:<br>';
 
$result = $mysqli->query("SELECT * FROM `units_list`");
	Echo '<center><table><tr><td><P><center> ID </center></td><td><center> Name </center></td><td><center> Serial </center></td><td><center> Access Key </center></td><td><center> Operator </center></td><td><center> Operator ID </center></td><td><center> X </center></td><td><center> Y </center></td><td><center> Object </center></td><td><center>Object ID</center></td><td><center>Removed</center></td></p></tr>';
	do{
		$objectt = $myrow['IDob'];
		$operators = $myrow['OPid'];
		$operator = $mysqli->query("SELECT `Name` FROM `OPR_list` WHERE `N`='$operators'");
		$object = $mysqli->query("SELECT `NameOb` FROM `Objects` WHERE `NumOb`='$objectt'");
		$objectt = mysqli_fetch_array($object);
		$operators = mysqli_fetch_array($operator);
		Echo '<tr>';
		Echo '<td><center>'.$myrow['uNum'].'</center></td>';
		Echo '<td><center>'.$myrow['uName'].'</center></td>';
		Echo '<td><center>'.$myrow['Serial'].'</center></td>';
		Echo '<td><center>'.$myrow['AKey'].'</center></td>';
		Echo '<td><center>'.$operators['Name'].'</center></td>';
		Echo '<td><center>'.$myrow['OPid'].'</td>';
		Echo '<td><center>'.$myrow['x'].'</td>';
		Echo '<td><center>'.$myrow['y'].'</td>';
		Echo '<td><center>'.$objectt['NameOb'].'</td>';
		Echo '<td><center>'.$myrow['IDob'].'</td>';
		Echo '<td><center>'.$myrow['remove'].'</td>';
		Echo '</tr>';
	}while ($myrow = mysqli_fetch_array($result));
	Echo "</table></center><br></div></center>";
?>

sensors.php

sensors.php

sensors.php
<?
session_start ();
if (!$_SESSION['level']) die ( '<center><a href=/admin/index.php>Пройдите авторизацию</a><center>' );
if($_SESSION['level'] < 2) die ('<center><a href=/admin/index.php>Недостаточно полномочий</a><center>');
 
require_once '../../core/baseinfo.php';
$result = $mysqli->query("SELECT `uNum`,`uName`,`Serial` FROM `Production`.`units_list` WHERE `remove` != 1");
 
?>
 
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<script src="http://code.jquery.com/jquery-latest.js"></script>
	<title> Add Sensor Page </title>
	<style type="text/css">
	th{
		text-align:center;
	}
 
	.linf {
    border: 1px solid #333; /* Рамка */
    display: inline-block;
    padding: 5px 15px; /* Поля */
    text-decoration: none; /* Убираем подчёркивание */
    color: #000; /* Цвет текста */
    }
   .linf:hover {
    box-shadow: 0 0 5px rgba(0,0,0,0.3); /* Тень */
    background: linear-gradient(to bottom, #fcfff4, #e9e9ce); /* Градиент */
    color: #a00;
    }
    input[type=number] 
	{ 
		-moz-appearance: textfield;
		width: 4em;
	}
	input[type=number]::-webkit-inner-spin-button 
	{ 
  		display: none;
	}
 
	.notvalid
	{
		background-color:rgb(245, 211, 174);
	}
 
	#insert_form:focus-within input:valid {
        border-color: green;
    }
 
    #insert_form:focus-within input:invalid {
        border-color: red;
    }
    #insert_form:focus-within select:valid {
        border-color: green;
    }
 
    #insert_form:focus-within select:invalid {
        border-color: red;
    }
 
    #update_form:focus-within .changed
    {
    	border-color:#aaf2e9;
    }
 
 
    input:read-only {
        background:none repeat 0 0 rgb(145, 145, 147);
    }
	</style>
</head>
<body>
	<a href="/admin/admin.php" class="linf">Назад</a>
 
	<!-- HEADER DIV -->
<center><div style="text-align: left; display: table; 
border-top:4px double #000000;
border-right:4px double #000000;
border-bottom:4px double #000000;
border-left:4px double #000000;"> 
 
	<!-- ADD NEW DIV -->
<div style="
text-align: left;
padding: 5px;">
 
<form id="insert_form">
<p>
<b>Устройство</b>
<select id="unitid" class="new" name="unit_id" required>
<option value="">---</option>
<?
$list = '';
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
{
	$list .= "<option value=".$row['uNum'].">".$row['uName']."(".$row['Serial'].") </option>";
}
echo $list;
unset($result);
?>
</select></p>
<div id="input_frame">
<table><tr><th>Название</th><th>Адрес сенсора</th><th>Краткое название</th><th>Заметка</th></tr>
<tr>
<td><input type="text" autocomplete="off" class="new" name="sensor" id="sensor_fullname" required></td>
<td><input type="text" autocomplete="off" class="new" name="adr" id="fill_adr"></td>
<td><input type="text" autocomplete="off" class="new" name="sensor_name" id="sensor_shortname" required></td>
<td><input type="text" autocomplete="off" class="new" name="note" id="fill_note"></td>
</tr>
</table>
</div>
<br>
<input type="button" onclick="insert_value()" name="insert_button" value="Добавить"><div id="text">
<br>
</div>
</form>
</div>
 
<div style="
text-align: left;
border-top:2px dashed #000000; padding: 5px;">
<form id="update_form">
 
<?
	$actual_data = $mysqli->query("SELECT `id`,`unit_id`,`sensor`,`adr`,`timestamp`,`sensor_name`,`note` FROM `Production`.`sensors_adr`");
	if($actual_data->num_rows)
	{
		echo '<table><tr><th>ID</th><th>ID Прибора</th><th>Название</th><th>Адрес</th><th>Дата-время</th><th>Краткое название</th><th>Заметка</th></tr>';
		while($actual = mysqli_fetch_array($actual_data, MYSQLI_ASSOC))
		{
			$search = '<option value='.$actual['unit_id'].'>';
			$edit = '<option value='.$actual['unit_id'].' selected>';
			$now = str_replace($search, $edit , $list);
			echo '<tr>';
			echo '<td><input type="text" autocomplete="off" class="def" name="ID" readonly id="'.$actual['id'].'" value="'.$actual['id'].'"></td>';
			//echo '<td><input type="number" autocomplete="off" class="def" name="unit_id" id="'.$actual['id'].'" value="'.$actual['unit_id'].'"></td>';
			echo '<td><select class="def" name="unit_id" id="'.$actual['id'].'">'.$now.'</select></td>';
			echo '<td><input type="text" autocomplete="off" class="def" name="sensor" id="'.$actual['id'].'" value="'.$actual['sensor'].'"></td>';
			echo '<td><input type="text" autocomplete="off" class="def" name="adr" id="'.$actual['id'].'" value="'.$actual['adr'].'"></td>';
			echo '<td><input type="text" autocomplete="off" class="def" name="timestamp" readonly id="'.$actual['id'].'" value="'.$actual['timestamp'].'"></td>';
			echo '<td><input type="text" autocomplete="off" class="def" name="sensor_name" id="'.$actual['id'].'" value="'.$actual['sensor_name'].'"></td>';
			echo '<td><input type="text" autocomplete="off" class="def" name="note" id="'.$actual['id'].'" value="'.$actual['note'].'"></td>';
			echo '</tr>';
		}
	}
	else
	{
		echo '<center><h3>Данных пока нет</h3></center>';
	}
?>
</table>
<br>
<button type="button" name="update_button" onclick="update_value()">Изменить</button>
<button type="button" name="defualt_value_set" onclick="default_update_value()">Сбросить</button>
<br>
</form>
 
 
</div></center>
</body>
</html>
 
<script type="text/javascript">
 
/* Загрузка списка параметров прибора и заполнение форм, если среди параметров есть адрес датчиков  */
var array_of_addr = [];
$('#unitid').on('change', function()
{
	$.get("../../core/backend.php","unit_addr_exist=" + $('#unitid').val(), function (back) 
	{
		back = JSON.parse(back);
		if(back.error == 'true')
		{
			$('#sensor_fullname').replaceWith('<input type="text" autocomplete="off" class="new" name="sensor" id="sensor_fullname" required>');
		}
		else
		{
			var options = '<select class="new" name="sensor" id="sensor_fullname" required><option value=""> --- </option>';
			$(back.data).each(function(){
				options += '<option value="' + $(this).attr('Type') + '">' + $(this).attr('Type') + '</option>';
				array_of_addr[$(this).attr('Type')] = $(this).attr('Val');
			});
			options += '</select>';
			$('#sensor_fullname').replaceWith(options);
			$('#sensor_fullname').prop('defaultValue', "").toggleClass('entered',true);
			return array_of_addr;
		} 
	});
});
 
$('body').on('change','#sensor_fullname', function()
{
	$('#fill_adr').val(array_of_addr[$('#sensor_fullname').val()]).toggleClass('entered',true);
});
 
/* Нажатие на кнопку */
function default_update_value()
{
	$('#update_form').find('.changed').each(function()
	{
		this.value = $(this).prop('defaultValue');
	});
}
 
function update_value()
{
	var data = [];
	var id = 0;
	var name = '';
	var value = 0;
	$('#update_form').find('.changed').each(function()
	{
		id = this.id;
		value = this.value;
		name = this.name;
		data[data.length] = [id,name,value];
	});
    if(data.lenght > 1)
    {
    	$.post("../../core/backend.php", { update:data });
    	alert("Данные обновлены");
    	location.reload();
    }
 
}
 
function insert_value()
{
	var data = [];
	var name = '';
	var value = 0;
	var validate = true;
	$('#insert_form').find('[required]').each(function()
	{
		if(this.value === '')
		{
			$(this).toggleClass('notvalid',true);
			validate = false;
		}
		else
		{
			$(this).toggleClass('notvalid',false);
		}
	});
 
	if(validate)
	{
		$('#text').empty();
		$('#insert_form').find('.entered').each(function()
		{
			value = this.value;
			name = this.name;
			data[data.length] = [name,value];
		});
 
		$.post("../../core/backend.php", { insert:data });
		alert("Данные внесены");
    	location.reload();
	}
	else
	{
		$('#text').html('Исправьте ошибки заполнения');
	}
 
}
 
/* изменение класса для изменённых форм */
 
$('.new').on('change', function()
{
	if($(this).prop('defaultValue') == $(this).val())
    {
    	$(this).toggleClass('entered',false);
    }
    else
    {
    	$(this).toggleClass('entered',true);
    }
 
});
 
$('.def').on('change', function()
{
    if($(this).prop('defaultValue') == $(this).val())
    {
    	$(this).toggleClass('changed',false);
    }
    else
    {
    	$(this).toggleClass('changed',true);
    }
});
 
$('select[class=def]').each(function(index,ele) 
{
    var origvalue = $(this).val(),
    defaultvalue = $(this).prop('defaultValue');
    if(!defaultvalue) {
        $(this).prop('defaultValue', origvalue);
    }
});
 
</script>

simple.php

simple.php

simple.php
<?
session_start ();
if (!$_SESSION['level']) die ( '<center><a href=/admin/index.php>Пройдите авторизацию</a><center>' );
if($_SESSION['level'] < 1) die ('<center><a href=/admin/index.php>Недостаточно полномочий</a><center>');
require_once '../../core/baseinfo.php';
?>
 
<style>
td {
  text-indent: 5px;
  border-collapse: collapse;
  color: #500;
  border-top: 0px solid transparent;
  padding: 2px;
  text-align:left;
}
tr{text-indent: 1px;}
 
input[id=newinp] 
{ 
    -moz-appearance: textfield;
    width: 4em;
}
input[id=newinp]::-webkit-inner-spin-button 
{ 
  display: none;
}
 
</style>
 
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Внесение замера</title>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <style type="text/css">
    .bl { display: none;}
    .linf {
    border: 1px solid #333; /* Рамка */
    display: inline-block;
    padding: 5px 15px; /* Поля */
    text-decoration: none; /* Убираем подчёркивание */
    color: #000; /* Цвет текста */
    }
   .linf:hover {
    box-shadow: 0 0 5px rgba(0,0,0,0.3); /* Тень */
    background: linear-gradient(to bottom, #fcfff4, #e9e9ce); /* Градиент */
    color: #a00;
    }
    input[type=number] 
    { 
    -moz-appearance: textfield;
    width: 4em;
    }
    input[type=number]::-webkit-inner-spin-button 
    { 
    display: none;
    }
    input:valid {
        border-color: green;
    }
 
    input:invalid {
        border-color: red;
    }
    select:valid {
        border-color: green;
    }
 
    select:invalid {
        border-color: red;
    }
    </style>
</head>
<body>
 
 
<center><div style="width: 600px; text-align: left;">
 
<div id="unitdiv">
Выберите устройство: <br>
<select id="unitid" name="uid" required onchange="getparams();">
<option value="">---</option>
<?
$result = $mysqli->query("SELECT `uNum`,`uName`,`Serial` FROM `units_list`");
while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
{
    echo "<option value=".$row['uNum'].">".$row['uName']."(".$row['Serial'].") </option>";
}
?>
</select>
</div>
<form id="ratform">
 
<div id="objdiv" hidden="true">
<p>
    <tr><td>object</td>
<td>
    <select name="object" required="true">
    <option value="">---</option>
    <?
    $result = $mysqli->query("SELECT `NumOb`,`NameOb` FROM `objects`");
    while($row = mysqli_fetch_array($result,MYSQLI_ASSOC))
    {
        echo "<option value=".$row['NumOb'].">".$row['NameOb']."</option>";
    }
    ?>
    </select>
</td>
</tr>
</p>
</div>
<div id="textpart" hidden="true"></div>
 
</form>
<button type="sumbit" hidden="true"  id="suc"> Готово </button>
<button type="button" hidden="true"  id="res" onclick="reset();"> Сбросить </button>
<div id="baddiv"></div>
 
 
</div></center>
</body>
</html>
 
<script type="text/javascript">
/* сброс формы */ 
function reset()
{
    $('#unitid').attr('disabled', false);
    $('#baddiv').empty();
    $('#textpart').empty();
    $('select[name="object"]').val("");
    $('#unitid').val("");
    document.getElementById('suc').hidden = true;
    document.getElementById('res').hidden = true;
    document.getElementById('textpart').hidden = true;
    document.getElementById('objdiv').hidden = true;
}
/* форма стандартного набора данных */
function defpar()
{
    $('#baddiv').empty();
    $('#textpart').empty();
    $('select[name="object"]').val("");
    var altoptions = '<tr><td>x</td><td><input type="number" step="0.0001" autocomplete="off" name="x" required value="0"></td></tr>';
    altoptions += '<tr><td>y</td><td><input type="number" step="0.0001" autocomplete="off" required name="y" value="0"></td></tr>';
    altoptions += '<tr><td>temp</td><td><input type="number" step="0.0001" autocomplete="off" required name="temp"></td></tr>';
    altoptions += '<tr><td>humidity</td><td><input type="number" step="0.0001" autocomplete="off" required name="humidity"></td></tr>';
    altoptions += '<tr><td>pressure</td><td><input type="number" step="0.0001" autocomplete="off" required name="pressure"></td></tr>';
    altoptions += '<tr><td>date</td><td><input type="date"  min="2019-01-24" required autocomplete="off" name="date"></td></tr>';
    altoptions += '<tr><td>time</td><td><input type="time" autocomplete="off" required name="time"></td></tr>';
    $('#textpart').html(altoptions);
    document.getElementById('suc').hidden = false;
    document.getElementById('res').hidden = false;
    document.getElementById('textpart').hidden = false;
    document.getElementById('objdiv').hidden = false;
 
}
/* создание форм параметров устройства */
function getparams()
{
    var forma = document.getElementById('unitid').value;
    if(forma != '')
    {
        $('#unitid').attr('disabled', true);
        var url = '../../core/backend.php';
        $.get(url,"unitnow=" + forma,function (result) {
                    if(result.back == 'error')
                    {
                        $('#baddiv').html('<p><h1> Нет данных </h1></p><p> Внести стандартный набор параметров? </p><p> <button id="yesdef" type="button" onclick="defpar();">Да</button> <button id="nodef" type="button" onclick="reset();">Нет</button></p>');
                    }
                    else
                    {
                        var options = '<tr><td>x</td><td><input type="number" step="0.0001" autocomplete="off" name="x" value="0"></td></tr>';
                        options += '<tr><td>y</td><td><input type="number" step="0.0001" autocomplete="off" name="y" value="0"></td></tr>';
                        $(result.sens).each(function() 
                        {
                            if($(this).attr('title') == 'date' || $(this).attr('title') == 'RTC_date')
                            {
                                options += '<tr><td>' + $(this).attr('title') + '</td><td><input type="date" min="2019-01-24" autocomplete="off" required name="' + $(this).attr('title') + '"></td></tr>'; 
                            }
                            else if($(this).attr('title') == 'time' || $(this).attr('title') == 'RTC_time')
                            {
                                options += '<tr><td>' + $(this).attr('title') + '</td><td><input type="time" autocomplete="off" required name="' + $(this).attr('title') + '"></td></tr>';
                            }
                            else
                            {
                                options += '<tr><td>' + $(this).attr('title') + '</td><td><input type="number" step="0.0001" autocomplete="off" required name="' + $(this).attr('title') + '"></td></tr>'; 
                            }
                        });
                        $('#textpart').html(options);
                        document.getElementById('suc').hidden = false;
                        document.getElementById('res').hidden = false;
                        document.getElementById('textpart').hidden = false;
                        document.getElementById('objdiv').hidden = false;
                    }
            },"json"
        );
    }
    else
    {
        $('#textpart').empty();
    }
}
/* проверка верности заполнения форм и формирование JSON с передачей скрипту внесения данных */
$('#suc').on('click', function (form) 
{
    form.preventDefault();
    var form_box = document.getElementById('ratform');
    var unit = document.getElementById('unitid');
    $('#unitid').attr('disabled', false);
    var arr = $(this).prev('form').serializeArray();
    $('#unitid').attr('disabled', true);
    var new_obj = {};
    $.each(arr, function(i, obj) 
    {
        if(obj.value != '')
        {
            new_obj[obj.name] = obj.value;
        }
    });
    if(form_box.checkValidity() && unit.checkValidity())
    {
        $.ajax({
        url:"../../core/jsonadd.php",
        dataType: 'json',
        type: 'POST',
        data: {fromtable: '[{"AKey":"'+unit.value+'"}][' + JSON.stringify(new_obj) + ']' } , 
        async: true});
        reset();
    }
    else
    {
        alert('Пожалуйста, заполните все поля корректно.');
    }
});
 
</script>

Архив, содержащий программный код и структуру каталогов веб-приложения.

doc/1513/643.mgul.15131-01_12_01.txt · Последние изменения: 2019/06/20 11:30 — deimozzz