Вот изменённый мной код для примера.
Из того что изменил:
- Вынес формирование запроса на создание таблицы в отдельную функцию.
- Добавил простую проверку на пустые значения
- Добавил проверку на соответствие передаваемых в запросе параметров тем, что должны на самом деле обрабатываться. Для исключения создания ненужных таблиц.
- Теперь обрабатываются как POST так и GET запросы.
В обработчике формы я специально не использую DebMes а вывожу ошибки с пом. echo, т.к. скрипт проверяю не в мажордоме.
htmlПоказать
Код: Выделить всё
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>test form</title>
</head>
<body>
<div style="border:1px solid #000000;padding:0.5em;">
<h3>Тест формы получения данных с датчиков</h3>
<form action="narod_mon.php" method="post">
<label for="idesp">idesp: id устройства</label><input type="text" id="idesp" name="idesp" /><br />
<label for="hostname">hostname: имя устройства</label><input type="text" id="hostname" name="hostname" /><br />
<label for="dhtt1">dhtt1: данные с датчика DHT 1</label><input type="text" id="dhtt1" name="dhtt1" /><br />
<label for="dhth1">dhth1: данные с датчика DHT 1</label><input type="text" id="dhth1" name="dhth1" /><br />
<label for="dhtt2">dhtt2: данные с датчика DHT 2</label><input type="text" id="dhtt2" name="dhtt2" /><br />
<label for="dhth2">dhth2: данные с датчика DHT 2</label><input type="text" id="dhth2" name="dhth2" /><br />
<label for="bmpt">bmpt: данные с датчика BMP</label><input type="text" id="bmpt" name="bmpt" /><br />
<label for="bmpp">bmpp: данные с датчика BMP</label><input type="text" id="bmpp" name="bmpp" /><br />
<label for="dswX">dswX: данные с датчиков ds18b20(X -номер датчика)</label><input type="text" id="dswX" name="dswX" /><br />
<label for="dswX">dsw2: данные с датчиков ds18b20(X -номер датчика)</label><input type="text" id="dsw2" name="dsw2" /><br />
<label for="light">light: данные с датчика BH1750</label><input type="text" id="light" name="light" /><br />
<input type="submit" value="Test" />
</form>
</div>
</body>
</html>
обработчикПоказать
Код: Выделить всё
<?php
define("MYSQL_HOST", 'localhost');
define("MYSQL_LOGIN", 'user');
define("MYSQL_PASSWORD", 'pass');
define("MYSQL_DATABASE", 'dubmon');
@mysql_connect(MYSQL_HOST, MYSQL_LOGIN, MYSQL_PASSWORD)
or die("Connect SQL error!");
$db_name = MYSQL_DATABASE;
@mysql_select_db($db_name) or die("Select DB error!");
/**
* Create Table Query by tableName
* @param string $tableName Table name
* @return string
*/
function GetCreateTableQuery($tableName)
{
$create_table = <<<LABEL
CREATE TABLE `$tableName`
(`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT ,
`value` DOUBLE NOT NULL ,
`date` DATETIME NOT NULL ,
PRIMARY KEY ( `id` ) ,
UNIQUE (
`id`
)) ENGINE = MYISAM;
LABEL;
return $create_table;
}
/**
* Simple validation
* @param mixed $paramValue input parameter
* @return bool
*/
function IsValidValue($paramValue)
{
if (empty($paramValue))
return false;
return true;
}
/**
* Проверка параметров на соответствие с ожидаемыми параметрами
* Чтобы не заздавать ненужных таблиц
* @param string $key Param key
* @return bool
*/
function IsValidKey($key)
{
$arrayKey = array("hostname", "idesp", "dhtt1", "dhth1", "dhtt2", "dhth2", "bmpt", "bmpp", "light");
if (in_array($key, $arrayKey))
return true;
if (preg_match('/^dsw\d/',$key))
return true;
return false;
}
foreach(array_keys($_REQUEST) as $key)
{
if (!IsValidKey($key))
{
// название параметра не прошло проверку: переходим к следующему параметру
echo "Key: " . $key . " not valid<br />";
continue;
}
$value = $_REQUEST[$key];
if (!IsValidValue($value))
{
// Пустое значение. При вставке в таблицу произойдет ошибка т.к. поле в таблице NOT NULL
// переходим к следующему сенсору
echo "Ошибка: Значение " . $key . "пустое!<br />";
continue;
}
// формируем запрос к бд на вставку записи в таблицу
$sql="INSERT INTO `". $key . "` (`id`, `value`,`date`) VALUES (NULL,'" . $value . "', NOW());";
echo $sql . "<br />";
if($result = mysql_query($sql) === false)
{
$create_table = GetCreateTableQuery($key);
if($result = mysql_query($create_table) === false)
{
die("CREATE TABLE ERROR! - " . $key);
}
else mysql_query($sql);
}
}
?>