За последние 24 часа нас посетили 68926 программистов и 11934 робота. Сейчас ищут 2827 программистов ...

функция preg_match

Тема в разделе "PHP для новичков", создана пользователем serenityLA, 28 дек 2017.

  1. serenityLA

    serenityLA Новичок

    С нами с:
    28 дек 2017
    Сообщения:
    2
    Симпатии:
    0
    Друзья, есть html страница, которая, в частности, выводит такую информацию:
    Код (Javascript):
    1. <h1>SENSOR 1</h1><hr><center>temperature: "+String(t)+ ". </center>
    (показывает переменную температуры )

    и есть php скрипт, который должен эту переменную "вырезать" и заносить в БД.

    Не могу понять, почему не считывает, и заносит NULL.

    PHP:
    1. preg_match("/\<span id='temperature: '\>(.*)\<\/span\>/imsuU", $res, $matches);
    2. if(!empty($matches['1'])) { $sensor_temperature = "'".mysqli_real_escape_string($db, $matches['1'])."'"; }
    Спасибо
     
    #1 serenityLA, 28 дек 2017
    Последнее редактирование модератором: 30 дек 2017
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    парсишь прогноз погоды ?
    --- Добавлено ---
    даже не буду говорить что ожидается массив место строки, так как парсинг/слизывание у своего соседа, не есть хорошо.
     
  3. serenityLA

    serenityLA Новичок

    С нами с:
    28 дек 2017
    Сообщения:
    2
    Симпатии:
    0
    лол, нет. Стоят датчики в теплице, хочу сделать мониторинг через веб.

    Вот полный код:

    PHP:
    1. <?php
    2.   $db_server    =    "192.168.14.102";
    3.   $db_username    =    "arduino";
    4.   $db_password    =    "arduinotest";
    5.   $db_database    =    "arduino";
    6.   $db = mysqli_connect($db_server, $db_username, $db_password, $db_database);
    7.   if(!$db) { print "MySQL Error: ".mysqli_connect_error(); exit; }
    8.   $sensors = array(
    9.     array(
    10.         'name'        => '#SENSOR 1',
    11.         'address'    => 'http://192.168.14.104/',
    12.     ),
    13.     /*array(
    14.         'name'        => '#2 (South)',
    15.         'address'    => 'http://192.168.100.2/',
    16.     ),
    17.     array(
    18.         'name'        => '#3 (West)',
    19.         'address'    => 'http://192.168.100.3/',
    20.     ),
    21.     array(
    22.         'name'        => '#4 (North)',
    23.         'address'    => 'http://192.168.100.4/',
    24.     ),
    25.     array(
    26.         'name'        => '#5 (Center)',
    27.         'address'    => 'http://192.168.100.5/',
    28.     ),*/
    29.   );
    30.   foreach($sensors as $num=>$sensor) {
    31.     print "Request sensor ".($num+1)."/".count($sensors).": ".$sensor['name']." - ";
    32.     $sensor_temperature = 'NULL';
    33.     $sensor_humidity='NULL';
    34.     $ctx = stream_context_create( array('http' => array('timeout' => 1) ) );
    35.     $res = @file_get_contents($sensor['address'], 0, $ctx);
    36.     if($res) { print "ON";
    37. //for debug
    38. //$res = "text<span id='temperature'>11.22</span>text<span id='humidity'>33.44</span>text";
    39.      preg_match("/\<span id='temperature: '\>(.*)\<\/span\>/imsuU", $res, $matches);
    40.      if(!empty($matches['1'])) { $sensor_temperature = "'".mysqli_real_escape_string($db, $matches['1'])."'"; }
    41.      preg_match("/\<span id='humidity:'\>(.*)\<\/span\>/imsuU", $res, $matches);
    42.      if(!empty($matches['1'])) { $sensor_humidity = "'".mysqli_real_escape_string($db, $matches['1'])."'"; }
    43.     }else{ print "OFF"; }
    44.    print " = ".$sensor_temperature.", ".$sensor_humidity.".".PHP_EOL;
    45.    $sql  = "INSERT INTO `serenity` (`sensor`, `temperature`, `humidity`, `datetime`) ".
    46.        "VALUES ('".mysqli_real_escape_string($db, $sensor['name'])."', ";
    47.    $sql .= $sensor_temperature.", ".$sensor_humidity.", NOW()); ";
    48.    mysqli_query($db,$sql);
    49.    $error = mysqli_error($db);
    50.    if($error) { print "MySQL Error: ".$error; exit; }
    51.   } //foreach
    52. print "Done.";
     
    #3 serenityLA, 28 дек 2017
    Последнее редактирование модератором: 30 дек 2017
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    print_r ( $matches['1'] );
    --- Добавлено ---
    а по хорошему бы пропачтить датчики чтобы выдавали json
     
  5. Emilien

    Emilien Активный пользователь

    С нами с:
    30 июн 2016
    Сообщения:
    246
    Симпатии:
    156
    PHP:
    1. preg_match("#<center>temperature: (.*)</center>#imsuU", $res, $matches);
     
  6. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    Коллеги, а если я использую для разбора XML функции для работы с XML а не регулярные выражения - я становлюсь представителем разноцветных радужных меньшинств?
     
    [vs] нравится это.
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Мне вообще интересно, зачем датчики генерят html? Это никак нельзя поменять?
     
  8. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.593
    Симпатии:
    362
    Кэп намекает, что всё зависит от датчиков...
    Ну и html ведь - частный случай xml...