Невозможно принять динамическое значение "date" в запросе MySQL, используя php - PullRequest
0 голосов
/ 30 апреля 2018

Я пытаюсь добавить фильтр диапазона дат, чтобы нарисовать диаграмму (используя диаграмму Google) на моей веб-странице с помощью php. Эта веб-страница используется для отображения значений моего датчика, извлеченных из базы данных.

Вот мой код: -

</p>

    <?php
    $DB_NAME = 'temp_database';
    $DB_HOST = 'localhost';
    $DB_USER = 'root';
    $DB_PASS = '';
  $mysqli = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
  if (mysqli_connect_errno()) {
    printf("Connect failed: %s\n", mysqli_connect_error());
    exit();
  }
    global $dateFrom;
    global $dateTo;
    $dateFrom = new DateTime($_GET['datepickerFrom']);
    $dateTo = new DateTime($_GET['datepickerTo']);
    $dateFrom = mysqli_real_escape_string($mysqli, $dateFrom->format('Y-m-d'));
    $dateTo = mysqli_real_escape_string($mysqli, $dateTo->format('Y-m-d'));



  if($dateFrom && $dateTo !=NULL)
  {
    $result = $mysqli->query('SELECT datetime,temperature FROM tempLog where datetime between "dateFrom%" and "dateTo%" /*"2018-03-19%" AND "2018-03-27%"*/ order by datetime ASC');   
    print_r($result);
  }
  else
   {
    $result = $mysqli->query('SELECT datetime,temperature FROM tempLog');  
   } 


      echo "$dateFrom<br/>";    
      echo "$dateTo<br/>";    




  //Check if the array is empty
  $yes=is_array($result);
  echo "$yes";


  $rows = array();
  $table = array();
  $table['cols'] = array(



    array('label' => 'Date-Time', 'type' => 'string'),
    array('label' => 'Temperature', 'type' => 'number')

);
    /* Extract the information from $result */
    foreach($result as $r) {

      $temp = array();



      $temp[] = array('v' => (string) $r['datetime']); 

      // Values of the each slice

      $temp[] = array('v' => (float) $r['temperature']); 
      $rows[] = array('c' => $temp);
    }

$table['rows'] = $rows;

// convert data into JSON format
$jsonTable = json_encode($table);
//echo $jsonTable;

header("Refresh: 50");   //Put the seconds after which the page needs to be refreshed

?>


<html>
  <head>
    <!--Load the Ajax API-->
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.5/css/bootstrap.min.css" rel="stylesheet" />
    <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
  <link rel="stylesheet" href="/resources/demos/style.css">
    <script type="text/javascript" src="https://www.google.com/jsapi"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

    <script type="text/javascript">

    // Load the Visualization API and the piechart package.
    google.load('visualization', '1', {'packages':['corechart']});

    // Set a callback to run when the Google Visualization API is loaded.
    google.setOnLoadCallback(drawChart);

    /*$(window).on("throttledresize", function (event) {
    drawChart();
});*/

    function drawChart() {

      // Create our data table out of JSON data loaded from server.
      var data = new google.visualization.DataTable(<?=$jsonTable?>);
      var options = {
                      title: 'Temperature Record updated every 5 seconds',
                      //is3D: 'true',
                      curveType: 'function',

                      width: "100%",
                      height: 500,
                      //legend: 'top',
                      axisTitlesPosition: 'out',
                       'isStacked': true,
                       //pieSliceText: 'percentage',
                       colors: ['#0598d8', '#f97263'],
                       chartArea: {
                           left: "15%",
                           top: "5%",
                           bottom:"40%",
                           height: "100%",
                           width: "100%"
                       },
  vAxis:{
    title:'Temperature'
  },
  hAxis: { 
    title:'Date',
    minValue: 0,
     maxValue: 50 },
  //curveType: 'function',
  pointSize: 3,
  dataOpacity: 0.6

        };

            function resize() {
    var chart = new google.visualization.LineChart(document.getElementById('chart_div'));
    chart.draw(data, options);
  }
  window.onload = resize();
  window.onresize = resize;

}


    </script>
<style type="text/css">
  body {
    width:100%;
    height: 100%;
    margin:5% auto auto auto;
    //background:#e6e6e6;
}
</style>
  </head>

  <body>

  <form id="dateselect" action="date.php">
      <center>From: <input type="text" id="datepickerFrom">
      To: <input type="text" id ="datepickerTo">
      <input type="submit">
      </center>
  </form>

    <div class = "container" id="chart_div"></div>  <!--Load bootstrap container for responsiveness-->


  </body>
</html>

Проблема:

Что происходит, когда я помещаю постоянное значение вместо "$ dateFrom" и "$ dateTo" в моем sql-запросе, это работает .. Моя диаграмма генерируется для этих двух дат правильно.

НО, когда я помещаю «$ dateFrom» и «$ dateTo» вместо константных значений ($ datefrom и $ dateTo берутся динамически через форму), это не работает для любых дат и даже для тех же дат, заданных ранее как константные значения .. Моя диаграмма не показывает значений и использование print_r ($ result) дает мне 0 результатов.
Я не могу понять, что я делаю неправильно, так как я все еще новичок в MySQL и PHP.

Что касается Записи, я уже упомянул здесь , здесь & здесь но, похоже, ничего не работает. Возможно, я делаю очень глупую ошибку, но, как я уже сказал, я все еще новичок.

Спасибо за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...