запись полученых данных в sql

Всё, что не подходит под вышеперечисленные разделы

Модератор: immortal

LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: запись полученых данных в sql

Сообщение LutsenkoDenis » Пт апр 10, 2015 5:05 pm

так, стоп....изначально речь шла о POST запросе....ну или я так понял.

Вот изменённый мной код для примера.
Из того что изменил:
  • Вынес формирование запроса на создание таблицы в отдельную функцию.
  • Добавил простую проверку на пустые значения
  • Добавил проверку на соответствие передаваемых в запросе параметров тем, что должны на самом деле обрабатываться. Для исключения создания ненужных таблиц.
  • Теперь обрабатываются как POST так и GET запросы.
В html части находится простая форма для отправки post запроса. В форме один параметр специально указан "левый".
В обработчике формы я специально не использую 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);
   }
}


?>
За это сообщение автора LutsenkoDenis поблагодарили (всего 2):
swp (Пт апр 10, 2015 10:20 pm) • avu2015 (Вт июл 07, 2015 6:00 pm)
Рейтинг: 2.33%
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
swp
Сообщения: 6
Зарегистрирован: Чт апр 09, 2015 11:21 am
Благодарил (а): 2 раза
Поблагодарили: 0

Re: запись полученых данных в sql

Сообщение swp » Пт апр 10, 2015 10:20 pm

LutsenkoDenis Спасибо за помощь этот скрипт полноценно работает
Ответить