Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Boa noite pessoal,
estou montando um grafico em tempo real de dados que sao inseridos em uma tabela MYSQL...
Estou com dificuldades de colocar as variaveis do banco de dados em um grafico de linha em javascript ou qualquer outro grafico, desde que seja um grafico de linha que eu consiga atualizar a cada 30 segundos automaticamente com o refresh da pagina (ou refresh do grafico).
Alguem pode me ajudar por favor?
Segue os campos da minha tabela, e o tipo de grafico que preciso criar:
mysql> select * from tempdat;
+-----+------------+----------+-----------+-------------+---------+----------------------------+
| id | tdate | ttime | zone | temperatura | umidade | image |
+-----+------------+----------+-----------+-------------+---------+----------------------------+
| 7 | 2017-04-22 | 00:00:07 | principal | 24 | 45 | photo-21-04-2017.23.59.jpg |
| 8 | 2017-04-22 | 00:10:03 | principal | 24 | 45 | photo-22-04-2017.00.09.jpg |
| 9 | 2017-04-22 | 00:20:10 | principal | 24 | 44 | photo-22-04-2017.00.19.jpg |
| 10 | 2017-04-22 | 00:30:03 | principal | 24 | 46 | photo-22-04-2017.00.29.jpg |
| 11 | 2017-04-22 | 00:40:02 | principal | 24 | 44 | photo-22-04-2017.00.39.jpg |
| 12 | 2017-04-22 | 00:50:02 | principal | 24 | 45 | photo-22-04-2017.00.49.jpg |
| 13 | 2017-04-22 | 01:00:02 | principal | 24 | 45 | photo-22-04-2017.00.59.jpg |
| 14 | 2017-04-22 | 01:10:04 | principal | 24 | 46 | photo-22-04-2017.01.09.jpg |
| 15 | 2017-04-22 | 01:20:02 | principal | 26 | 43 | photo-22-04-2017.01.19.jpg |
| 16 | 2017-04-22 | 01:30:02 | principal | 25 | 44 | photo-22-04-2017.01.29.jpg |
os dados de data, tempo (hora), temperatura e umidade preciso incluir em um grafico em uma pagina php onde seja atualizado a cada 30s ou 1 min. (na tabela os dados sao incluidos a cada 10min por enquanto).
Com a pagina abaixo eu consigo imprimir todos esses dados da tabela em uma pagina, utilizando comandos php e mysql... agora como posso colocar isso em um grafico json, javascript ou qualquer um que funcione? alguem pode me ajudar por favor??? ja tentei diversos graficos em javascript e json mas quando tento incluir as variaveis em php tenho problemas, nao estou conseguindo.
$host="localhost";
$username="monitor";
$password="password";
$db_name="temps";
$tbl_name="tempdat";
mysql_connect("$host", "$username", "$password") or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$pagina=(isset($_GET['pagina']))? $_GET['pagina'] : 1;
$sql="SELECT * FROM $tbl_name ORDER BY tdate DESC, ttime DESC";
$data=mysql_query($sql);
$total=mysql_num_rows($data);
$registros=10;
$numPaginas=ceil($total/$registros);
$inicio = ($registros*$pagina)-$registros;
$cmd="SELECT * FROM $tbl_name ORDER BY tdate DESC, ttime DESC limit $inicio,$registros";
$data=mysql_query($cmd);
$total=mysql_num_rows($data);
while($row = mysql_fetch_array($data)){
echo "<tr><td align=center> ";
echo $row['tdate'] . " </td><td align=center> " . $row['ttime'] . " </td><td align=center> " .
$row['temperatura'] . " </td><td align=center> " . $row['umidade'] . " </td><td align=center><a onclick=popupCenter('/camera/" . $row['image'] . "','myPop1','450','450'); href=javascript:void(0);><img src=/camera/" . $row['image'] . " width=60 height=60></a></td>";
echo "</td></tr>";
}
echo "</table>";
echo "<p>";
for($i = 1; $i < $numPaginas + 1; $i++) {
echo "<font size=2 face=Arial><a href='dados_grafico.php?pagina=$i'>".$i."</a></font> ";
}
echo "</center>";
mysql_close();
?>
Obrigado desde já pessoal!
Abraços!!>
15 horas atrás, JacsJacob disse:
Obrigado amigo, tentei aqui dar uma lida e pegar alguns exemplos mas está meio complicado.
Tenho problemas em escrever em javascript e colocar as variaveis do array dentro da tag <script>.
Tenta usar um plugin para gráficos, eu geralmente uso esse:
[https://www.highcharts.com/demo/](https://www.highcharts.com/demo/)
Na documentação e nas demos existem exemplos de gráficos que atualizam com tempo (SEM REFRESH!!), e de todos os tipos que plugins possui, se não conseguir manda um salve que eu passo um exemplo de como preencher o gráfico com JS + PHP.>
12 horas atrás, Rapadura disse:
Caso não conheça esses sites recomendo muito para consultar e estudar sobre desenvolvimento web
https://www.w3schools.com/js/default.asp
https://developer.mozilla.org/pt-BR/
Obrigado... dei uma olhada e estou estudando como fazer... mas ainda nao funciona o grafico... :/
Ainda estou apanhando pra fazer o grafico, alguem consegue dar uma força???
Estou usando este grafico abaixo... com esse codigo eu consigo imprimir na tela (usando php com mysql) os dados que quero que seja apresentado no grafico, porem, nao estou conseguindo colocar as variaveis PHP dentro das tags <script> corretamente, fazendo com que o grafico nao funcione. Alguem poderia ajudar?
<?php
$host="localhost";
$username="monitor";
$password="password";
$db_name="temps";
$tbl_name="tempdat";
mysql_connect("$host", "$username", "$password") or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$pagina=(isset($_GET['pagina']))? $_GET['pagina'] : 1;
$sql="SELECT * FROM $tbl_name ORDER BY tdate DESC, ttime DESC";
$data=mysql_query($sql);
$total=mysql_num_rows($data);
$registros=10;
$numPaginas=ceil($total/$registros);
$inicio = ($registros*$pagina)-$registros;
$cmd="SELECT * FROM $tbl_name ORDER BY tdate DESC, ttime DESC limit $inicio,$registros";
$data=mysql_query($cmd);
$total=mysql_num_rows($data);
while($row = mysql_fetch_array($data)){
echo $row['tdate'] . " " . $row['ttime'] . " " .
$row['temperatura'] . " " . $row['umidade'] . "<br>";
}
echo "<p>";
mysql_close();
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Termometro</title>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<style type="text/css">
${demo.css}
</style>
</head>
<body>
<script src="https://code.highcharts.com/highcharts.js"></script>
<script src="https://code.highcharts.com/modules/exporting.js"></script>
<div id="container" style="min-width: 160px; height: 250px; margin: 0 auto"></div>
<script type="text/javascript">
// Data retrieved from [http://vikjavev.no/ver/index.php?spenn=2d&sluttid=16.06.2015.](http://vikjavev.no/ver/index.php?spenn=2d&sluttid=16.06.2015.)
Highcharts.chart('container', {
chart: {
type: 'spline'
},
title: {
text: 'Dados'
},
subtitle: {
text: 'Gráfico Temperatura e Umidade'
},
xAxis: {
type: 'datetime',
labels: {
overflow: 'justify'
}
},
yAxis: {
title: {
text: 'Temperatura / Umidade'
},
minorGridLineWidth: 0,
gridLineWidth: 0,
alternateGridColor: null,
plotBands: [{ // Light air
from: 0.3,
to: 10,
color: 'rgba(68, 170, 213, 0.1)',
label: {
text: '',
style: {
color: '#606060'
}
}
}, { // Light breeze
from: 11,
to: 22,
color: 'rgba(0, 0, 0, 0)',
label: {
text: '',
style: {
color: '#606060'
}
}
}, { // Gentle breeze
from: 23,
to: 35,
color: 'rgba(68, 170, 213, 0.1)',
label: {
text: '',
style: {
color: '#606060'
}
}
}, { // Moderate breeze
from: 36,
to: 47,
color: 'rgba(0, 0, 0, 0)',
label: {
text: '',
style: {
color: '#606060'
}
}
}, { // Fresh breeze
from: 48,
to: 60,
color: 'rgba(68, 170, 213, 0.1)',
label: {
text: '',
style: {
color: '#606060'
}
}
}, { // Strong breeze
from: 61,
to: 75,
color: 'rgba(0, 0, 0, 0)',
label: {
text: '',
style: {
color: '#606060'
}
}
}, { // High wind
from: 76,
to: 100,
color: 'rgba(68, 170, 213, 0.1)',
label: {
text: '',
style: {
color: '#606060'
}
}
}]
},
tooltip: {
valueSuffix: ' '
},
plotOptions: {
spline: {
lineWidth: 4,
states: {
hover: {
lineWidth: 5
}
},
marker: {
enabled: false
},
pointInterval: 300000, // each 5 minutes
}
},
series: [{
name: 'Temperatura Celcius',
data: [25.2, 26.8, 29.8, 27.8, 27, 28.3, 26.5, 26.9, 25.9, 26.6, 26.6, 26, 26, 26.6, 25.5, 26.2, 26.5, 25.5, 26, 26.1, 26.7, 26, 26.7, 26.3, 26.3, 26.1, 26.7, 26.1, 26.6, 26.1, 26.8, 26.6, 26.2, 26, 26.9, 26.5 ]
}, {
name: 'Umidade %',
data: [38, 41, 38.6, 38.9, 38.8, 38.2, 38, 38, 38, 38.1, 40.6, 40.7, 40.8, 40.6, 40.2, 40, 40.1, 43.3, 44.3, 44, 44.1, 44, 44, 44, 44.2, 44.1, 44, 44.3, 44, 44.1, 44.2, 44.1, 44.3, 44.3, 44, 44.1 ]
}],
navigation: {
menuItemStyle: {
fontSize: '10px'
}
}
});
</script>
</body>
</html>
<center><a href="dados_grafico.php">Dados</a></center>
As infos de temperatura e de umidade foram incluidas na mao para testar, o grafico funciona, agora preciso transformar a variavel php em uma variavel que o <script> consiga entender, como eu faço isso?
abraçosTenho um exemplo de um gráfico com esse plugin funcionando recebendo dados json do PHP:
<script>
$(document).ready(function () {
var data_a = $('.data_chart_dashboard_fiscal').val();
var regime = $('.filtro_por_regime_chart_dashboard_fiscal').val();
$.ajax({
url: 'callFunctions.php',
type: 'POST',
data: {funcao: 'chart_por_regime_dashboard_fiscal', regime: regime, resposta: 'feitos', data_relacionada: data_a},
async: true,
dataType: "json",
success: function (data) {
var dados = data;
//var categorias = data['categoria'];
$.ajax({
url: 'callFunctions.php',
type: 'POST',
data: {funcao: 'chart_por_regime_dashboard_fiscal', regime: regime, resposta: 'nao_feitos', data_relacionada: data_a},
async: true,
dataType: "json",
success: function (data2) {
var dados2 = data2;
//var categorias = data['categoria'];
elementosData(dados, regime, dados2);
}
});
}
});
});
function elementosData(dados, regime, dados2) {
if (regime === '3' || regime === '4') {
$('#containerChart').highcharts({
chart: {
type: 'column'
},
title: {
text: 'Entrega das obrigações'
},
xAxis: {
categories: ['Sped fical', 'Sped Contrib.', 'DCTF', 'Retenções']
},
yAxis: {
title: {
text: '%'
}
},
series: [{name: 'concluido', data: dados}, {name: 'Não concluido', data: dados2}]
});
}
if (regime === '1' || regime === '2') {
$('#containerChart').highcharts({
chart: {
type: 'column'
},
title: {
text: 'Entrega das obrigações'
},
xAxis: {
categories: ['Sintegra', 'Recibo Simples', 'Difal / DeSTDA', 'PGDAS', 'Retenções / CPOM']
},
yAxis: {
title: {
text: '%'
}
},
series: [{name: 'concluido', data: dados}, {name: 'Não concluido', data: dados2}]
});
}
}
</script>
E a parte do php: tem que retornar nesse formato: (Não vou mandar minha parte do php porque vai complicar mais pra você entender)
<?php
//Essas váriaveis possuem os numeros que eu trouxe do banco de dados
if ($resposta == 'feitos') {
$retorno = "[$total_porc_sintegra,$total_porc_recibo_simples,$total_porc_difal_destda,$total_porc_pgdas,$total_porc_retencoes_cpom]";
} elseif ($resposta == 'nao_feitos') {
$retorno = "[$tot_porc_neg_sintegra,$tot_porc_neg_recibo_simples,$tot_porc_neg_difal_destda,$tot_porc_neg_pgdas,$tot_porc_neg_retencoes_cpom]";
}
header("Content-type: text/json");
echo $retorno;
PS: No caso ali eu fiz uma gambiarra com uma requisição ajax dentro da outra pra conseguir cruzar os dados, acredito que exista um modo melhor, mas ainda não parei pra pensar nisso.>
4 horas atrás, AnthraxisBR disse:
Tenho um exemplo de um gráfico com esse plugin funcionando recebendo dados json do PHP:
<script>
$(document).ready(function () {
var data_a = $('.data_chart_dashboard_fiscal').val();
var regime = $('.filtro_por_regime_chart_dashboard_fiscal').val();
$.ajax({
url: 'callFunctions.php',
type: 'POST',
data: {funcao: 'chart_por_regime_dashboard_fiscal', regime: regime, resposta: 'feitos', data_relacionada: data_a},
async: true,
dataType: "json",
success: function (data) {
var dados = data;
//var categorias = data['categoria'];
$.ajax({
url: 'callFunctions.php',
type: 'POST',
data: {funcao: 'chart_por_regime_dashboard_fiscal', regime: regime, resposta: 'nao_feitos', data_relacionada: data_a},
async: true,
dataType: "json",
success: function (data2) {
var dados2 = data2;
//var categorias = data['categoria'];
elementosData(dados, regime, dados2);
}
});
}
});
});
function elementosData(dados, regime, dados2) {
if (regime === '3' || regime === '4') {
$('#containerChart').highcharts({
chart: {
type: 'column'
},
title: {
text: 'Entrega das obrigações'
},
xAxis: {
categories: ['Sped fical', 'Sped Contrib.', 'DCTF', 'Retenções']
},
yAxis: {
title: {
text: '%'
}
},
series: [{name: 'concluido', data: dados}, {name: 'Não concluido', data: dados2}]
});
}
if (regime === '1' || regime === '2') {
$('#containerChart').highcharts({
chart: {
type: 'column'
},
title: {
text: 'Entrega das obrigações'
},
xAxis: {
categories: ['Sintegra', 'Recibo Simples', 'Difal / DeSTDA', 'PGDAS', 'Retenções / CPOM']
},
yAxis: {
title: {
text: '%'
}
},
series: [{name: 'concluido', data: dados}, {name: 'Não concluido', data: dados2}]
});
}
}
</script>
E a parte do php: tem que retornar nesse formato: (Não vou mandar minha parte do php porque vai complicar mais pra você entender)
<?php
//Essas váriaveis possuem os numeros que eu trouxe do banco de dados
if ($resposta == 'feitos') {
$retorno = "[$total_porc_sintegra,$total_porc_recibo_simples,$total_porc_difal_destda,$total_porc_pgdas,$total_porc_retencoes_cpom]";
} elseif ($resposta == 'nao_feitos') {
$retorno = "[$tot_porc_neg_sintegra,$tot_porc_neg_recibo_simples,$tot_porc_neg_difal_destda,$tot_porc_neg_pgdas,$tot_porc_neg_retencoes_cpom]";
}
header("Content-type: text/json");
echo $retorno;
PS: No caso ali eu fiz uma gambiarra com uma requisição ajax dentro da outra pra conseguir cruzar os dados, acredito que exista um modo melhor, mas ainda não parei pra pensar nisso.
Obrigado pela resposta amigo!
Tenho uma duvida... como eu declaro as variaveis em PHP e depois passo dentro da tag <script> do grafico as variaveis que eu criei??? Estou pecando muito nessa parte... :/
Abraços!!@JacsJacob vou tentar explicar de um prático:
Primeiro, você não vai declarar as variáveis PHP dentro da tag <script>, o que você vai fazer é uma requisição ajax para um pagina .PHP, e nessa página, a única coisa que ela deve retornar ao ajax é o dados que serão colocados no gráfico, essa página não pode responder nem uma vírgula errada, senão o gráfico não é exibido corretamente.
Começa assim, aqui nos fazemos com que a requisição seja chamada quando a pagina com o gráfico for carregada:
>
Citar
$(document).ready(function () {
Após o evento ser disparado, nós fazemos a requisição dos dados:
>
Citar
$.ajax({
url: 'pagina_com_os_dados.php',
type: 'POST',
async: true,
dataType: "json",
success: function (data) {
var dados = data;
gerarGrafico(dados);
}
});
O arquivo PHP responsável por exibir os dados, deverá devolver algo como isso:
>
Citar
$retorno = "[10,2,34,25,17]";
header("Content-type: text/json");
echo $retorno;
E depois de ter os dados, nós chamamos a função que executará o gráfico:
>
Citar
function gerarRelatorio(dados) {
$('#containerChart').highcharts({
chart: {
type: 'column'
},
title: {
text: 'Entrega das obrigações'
},
xAxis: {
categories: ['dado 1', 'dado 2', 'dado3', 'dado 4', 'dado 5']
},
yAxis: {
title: {
text: '%'
}
},
series: [{name: 'Dados', data: dados}]
});
}
Acho que não consigo pensar em uma forma melhor de explicar isso kk>
2 horas atrás, AnthraxisBR disse:
@JacsJacob vou tentar explicar de um prático:
Primeiro, você não vai declarar as variáveis PHP dentro da tag <script>, o que você vai fazer é uma requisição ajax para um pagina .PHP, e nessa página, a única coisa que ela deve retornar ao ajax é o dados que serão colocados no gráfico, essa página não pode responder nem uma vírgula errada, senão o gráfico não é exibido corretamente.
Começa assim, aqui nos fazemos com que a requisição seja chamada quando a pagina com o gráfico for carregada:
Após o evento ser disparado, nós fazemos a requisição dos dados:
O arquivo PHP responsável por exibir os dados, deverá devolver algo como isso:
E depois de ter os dados, nós chamamos a função que executará o gráfico:
Acho que não consigo pensar em uma forma melhor de explicar isso kk
Cara to tentando aqui mas ta dificil... vamos la...
Estou criando um arquivo só para consulta ao mysql em PHP chamado data.php e o do grafico chama test.php ok???
No codigo data.php estou colocando esses dados para consulta no meu banco de dados para pegar as infos de uma coluna chamada 'temperatura' com 10 registros:
$tbl_name="tempdat";
mysql_connect("$host", "$username", "$password") or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$pagina=(isset($_GET['pagina']))? $_GET['pagina'] : 1;
$sql="SELECT * FROM $tbl_name ORDER BY tdate DESC, ttime DESC";
$data=mysql_query($sql);
$total=mysql_num_rows($data);
$registros=10;
$numPaginas=ceil($total/$registros);
$inicio = ($registros*$pagina)-$registros;
$cmd="SELECT * FROM $tbl_name ORDER BY tdate DESC, ttime DESC limit $inicio,$registros";
$data=mysql_query($cmd);
$total=mysql_num_rows($data);
$n=0;
while($row = mysql_fetch_array($data)){
$retorno[$n] = $row['temperatura'];
$n++;
}
print_r($retorno);
mysql_close();
Este codigo me printa na tela o array com os dados... legal... funciona e me mostra a seguinte saida na pagina:
Array ( [0] => 22 [1] => 21 [2] => 23 [3] => 23 [4] => 21 [5] => 21 [6] => 21 [7] => 20 [8] => 22 [9] => 22 )
Agora onde eu declaro as informaçoes que voce me passou? em qual das paginas??? e como ele pega a variavel e qual é a variavel???
$(document).ready(function () {
e
$.ajax({
url: 'pagina_com_os_dados.php',
type: 'POST',
async: true,
dataType: "json",
success: function (data) {
var dados = data;
gerarGrafico(dados);
}
});
Obrigado mais um vez!
AbraçossConsegui amigo!!! obrigadoo!!! :)
Obrigado amigo, tentei aqui dar uma lida e pegar alguns exemplos mas está meio complicado.
Tenho problemas em escrever em javascript e colocar as variaveis do array dentro da tag <script>.