Autor Zpráva
mfr
Profil
Ahoj,
Snažím se zprovoznit Google Annotation chart. Mám ale stále problém s typem čísla... Value1 mám jako INT.
Časová osa se mi už vykresluje ok, ale hodnoty ne.

vibroguard.cz/test/ano.php

Nad grafem je výpis json tabulky.

Nevěděl bystě někdo, kde může být problém?

<?php
$connect = mysqli_connect("xxx", "xxx", "xxx", "xxx");
$query = '
SELECT
Value1,
UNIX_TIMESTAMP(CONCAT_WS(" ", Value1_Date, Value1_Time)) AS datetime
FROM SAVE_DATA

';
$result = mysqli_query($connect, $query);
$rows = array();
$table = array();

$table['cols'] = array(
 array(
  'label' => 'Date Time',
  'type' => 'datetime'
 ),
 array(
  'label' => 'mm/s',
  'type' => 'number'
 )
);

while($row = mysqli_fetch_array($result))
{
 $sub_array = array();
 $datetime = explode(".", $row["datetime"]);
 $sub_array[] =  array(
      "v" => 'Date(' . $datetime[0] . '000)'
     );
 $sub_array[] =  array(
      "v" => $row["Value1"]
     );
 $rows[] =  array(
     "c" => $sub_array
    );
}
$table['rows'] = $rows;
$jsonTable = json_encode($table);
echo $jsonTable;
?>


<html>
 <head>
  <script type='text/javascript' src='https://www.gstatic.com/charts/loader.js'></script>
    <script type='text/javascript'>
      google.charts.load('current', {'packages':['annotatedtimeline']});
      google.charts.setOnLoadCallback(drawChart);
      function drawChart() {
    var data = new google.visualization.DataTable(<?php echo $jsonTable; ?>);

    var options = {
     title:'Sensors Data',
     legend:{position:'bottom'},
     chartArea:{width:'95%', height:'65%'},
    };

    var chart = new google.visualization.AnnotatedTimeLine(document.getElementById('chart_div'));

    chart.draw(data, {displayAnnotations: true});
   }
  </script>
  <style>
  .page-wrapper
  {
   width:1000px;
   margin:0 auto;
  }
  </style>
 </head>
 <body>
  <div class="page-wrapper">
   <br />
   <h2 align="center">Display Google Line Chart with JSON PHP & Mysql</h2>
   <div id="chart_div" style="width: 100%; height: 500px"></div>
  </div>
 </body>
</html>
Firibix
Profil
Reakce na mfra:
Všimni si, že ve výsledném JSONu nemáš čísla jako čísla, ale jako řetězce, což způsobuje tu chybu. MySQLi z databáze vrátí vždycky datový typ string, nehledě na to, jaký typ je nastavený na sloupci v databázi. To znamená, že na řádku 33 přiřazuješ do "v" řetězec a funkce json_encode ho jako řetězec zakóduje, i když ten řetězec ve skutečnosti obsahuje číslo.

Stačí přetypovat na integer a všechno by mělo začít fungovat:

$sub_array[] =  array(
    "v" => (integer) $row["Value1"]
);
mfr
Profil
Firibix:

Děkuju moc za nakopnutí, funguje perfektně!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0