Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

NeyViana

[Resolvido] Gráfico em PHP com MYSQL

Recommended Posts

É a primeira vez que escrevo em um fórum ainda mais em algo que não domino, então estou aqui para pedir a ajuda de como posso colocar esse php que deveria mostrar um gráfico aparecer o gráfico, pois ao executar o php não exibe nada fica uma tela em branco. O select funciona me retorna duas colunas(DATA e SOMA), sendo a DATA com os dias do mês de 1 a 31 e a SOMA é o total de registros efetuados no dia segue um exemplo abaixo:

DATA | SOMA

    1          52

    2          35

    3          49

 

Segue o conteúdo do arquivo que estou executando:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Teste de Gráfico</title>
<?php 
$dia = array();
$total = array();
$cor = array();
$cor[0] = "#0000CD";
$cor[1] = "#FF1493";
$cor[2] = "#7FFFD4";
$cor[3] = "#FF0000";

$mysqli = new mysqli("localhost", "root", "", "dados");
$select = $mysqli->query("SELECT DAY(dt) AS 'DATA', COUNT(*) AS 'SOMA' FROM dbtickets WHERE MONTH(dt) = 3 AND YEAR(DT) = 2018 GROUP BY DAY(dt)");
$row = $select->num_rows;
if($row){
    while($get = $select->fetch_array()){
        $coluna1 = $get['DATA'];
        $coluna2 = $get['SOMA'];
        array_push($total, $coluna2);
        array_push($dia, $coluna1);
    }
}
?>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
      <script type="text/javascript">
        google.charts.load("current", {packages:['corechart']});
        google.charts.setOnLoadCallback(drawChart);
        function drawChart() {
          var data = google.visualization.arrayToDataTable([
            ["Dia", "Total", { role: "style" } ],
            <?php
            for($i = 0; $i < count($dia); $i++){ ?>
            ['<?php echo $dia[$i] ?>', <?php echo $total[$i] ?>, '<?php echo $cor[$i] ?>'],
            <?php
            }
            ?>
          ]);

          var view = new google.visualization.DataView(data);
                view.setColumns([0, 1,
                    { calc: "stringify",
                    sourceColumn: 1,
                    type: "string",
                    role: "annotation" },
                    2]);

          var options = {
            title: "GRAFIO DE CHAMADOS POR DIA MARÇO - 2018",
            width: 600,
            height: 400,
            bar: {groupWidth: "95%"},
            legend: { position: "none" },
          };
          var chart = new google.visualization.ColumnChart(document.getElementById("columnchart_values"));
          chart.draw(view, options);
      }
      </script>
    <div id="columnchart_values" style="width: 900px; height: 300px;"></div>
</head>
<body>
    <div id="chart_div"></div>
</body>
</html>

 

Desde já agradeço a ajuda!

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ative a exibição de erros, conforme informado no seguinte tópico:

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como citei no meu primeiro post sou leigo no assunto, mas ativei a exibição dos erros conforme seu auxilio e mesmo assim continua aparecendo uma tela em branco a não ser que eu tenha colocado no local errado, porem pesquisei e obtive a informação que deve colocar acima do php em questão e foi onde coloquei.

 

Pesquisando mais um pouco, consegui que apareça o resultado do select, agora falta montar o gráfico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será preciso alterar no php.ini então. Você tem acesso as configurações do servidor?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faça o seguinte.

 

  • Crie um arquivo e adicione apenas o seguinte código nele:
<?php
echo php_ini_loaded_file();
  • Acesse ele pelo navegador. Deve aparecer um caminho de arquivo. Esse arquivo é o php.ini;
  • Acesse o php.ini e altere os seguintes valores:
error_reporting = E_ALL // Define quais tipos de erro serão exibidos. E_ALL = Todos

log_errors = On // Define se os erros irão para o log
  
html_errors = On // Define se os erros utilizarão formatação HTML (específico para funções terceiras)
  
display_errors = On // Define se os erros serão exibidos para o usuário (Produção = Off e Desenvolvimento = On)
  • Após alterá-las, reinicie o apache;
  • Teste novamente seu código para verificar a existência de erros.

 

Essas propriedades não estarão juntas e muito menos na mesma ordem. Tome cuidade, pois, elas aparecerão mais de uma vez (pois, aparecem em comentários também). Quando, no inicío da linha possuir um ponto e vírgula (;) ou sustenido (#), significa que a linha está comentada e ela não é interpretada. Dessa forma, pesquise o próximo valor. Caso for até final do arquivo e alguma propriedade não está em uso, você pode descomentá-la para ser utilizada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Criei o arquivo teste.php e coloquei o conteúdo conforme informado e apareceu o caminho do php.ini, abrindo o arquivo pesquisei a localização de cada item que você citou e todos estão iguais, porem não sei se muda algo pq estão sem o espaço entre o = 

 

Em seguida parei e iniciei o apache e executei o código e aparece exatamente igual a ultima vez q mexi nele exibe apenas o resultado do select

Compartilhar este post


Link para o post
Compartilhar em outros sites
53 minutos atrás, NeyViana disse:

[...] exibe apenas o resultado do select

 

Como assim? Mostre-me como fica.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A alteração que fiz para exibir o resultado do select foi que inclui o  printf("%s %s <br>", $row[0], $row[1]);

Exibe o conteudo abaixo:

1 52 
2 28 
5 39 
6 44 
7 40 
8 34 
9 40 
12 43 
13 39 
14 46 
15 44 
16 44 
19 49 
20 39 
21 37 
22 48 
23 34 
26 32 
27 51 
28 51 
29 44

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vá no navegador e aperte CTRL + SHIFT + J. Deve exibir o console e, em consequência, os erros do JavaScript.

 

Caso não aparecer nenhum. Aperte CTRL + U e cole aqui o HTML que foi gerado.

Compartilhar este post


Link para o post
Compartilhar em outros sites
1 52 <br>2 28 <br>5 39 <br>6 44 <br>7 40 <br>8 34 <br>9 40 <br>12 43 <br>13 39 <br>14 46 <br>15 44 <br>16 44 <br>19 49 <br>20 39 <br>21 37 <br>22 48 <br>23 34 <br>26 32 <br>27 51 <br>28 51 <br>29 44 <br>

<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>

<script type="text/javascript">

google.charts.load("current", {packages:['corechart']});

google.charts.setOnLoadCallback(drawChart);

function drawChart() {

var data = google.visualization.arrayToDataTable([

["Dia", "Total", { role: "style" } ],

['1', 52, '#ff3300'],

['2', 28, '<br />

<b>Notice</b>: Undefined offset: 1 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['5', 39, '<br />

<b>Notice</b>: Undefined offset: 2 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['6', 44, '<br />

<b>Notice</b>: Undefined offset: 3 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['7', 40, '<br />

<b>Notice</b>: Undefined offset: 4 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['8', 34, '<br />

<b>Notice</b>: Undefined offset: 5 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['9', 40, '<br />

<b>Notice</b>: Undefined offset: 6 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['12', 43, '<br />

<b>Notice</b>: Undefined offset: 7 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['13', 39, '<br />

<b>Notice</b>: Undefined offset: 8 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['14', 46, '<br />

<b>Notice</b>: Undefined offset: 9 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['15', 44, '<br />

<b>Notice</b>: Undefined offset: 10 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['16', 44, '<br />

<b>Notice</b>: Undefined offset: 11 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['19', 49, '<br />

<b>Notice</b>: Undefined offset: 12 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['20', 39, '<br />

<b>Notice</b>: Undefined offset: 13 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['21', 37, '<br />

<b>Notice</b>: Undefined offset: 14 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['22', 48, '<br />

<b>Notice</b>: Undefined offset: 15 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['23', 34, '<br />

<b>Notice</b>: Undefined offset: 16 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['26', 32, '<br />

<b>Notice</b>: Undefined offset: 17 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['27', 51, '<br />

<b>Notice</b>: Undefined offset: 18 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['28', 51, '<br />

<b>Notice</b>: Undefined offset: 19 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

['29', 44, '<br />

<b>Notice</b>: Undefined offset: 20 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><br />

'],

]);



var view = new google.visualization.DataView(data);

view.setColumns([0, 1,

{ calc: "integer",

sourceColumn: 1,

type: "int",

role: "annotation" },

2]);



var options = {

title: "GRAFICO DE CHAMADOS POR DIA MARÇO - 2018",

width: 600,

height: 400,

bar: {groupWidth: "95%"},

legend: { position: "none" },

};

var chart = new google.visualization.ColumnChart(document.getElementById("columnchart_values"));

chart.draw(view, options);

}



</script>

<div id="columnchart_values" style="width: 900px; height: 300px;"></div>

<body>

<div id="chart_div"></div>

</body>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja que o código javascript estava mascarando os erros:

Citar

<b>Notice</b>: Undefined offset: 1 in <b>E:\xampp\htdocs\Tickets\monitor\manutencao\5.php</b> on line <b>27</b><b

 

A partir do 0, não há mais nada na variável $cor. Corrija isso e deve resolver seu problema.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicionei mais algumas cores e ficou assim:

$cor = array();
$cor[0] = '#ff3300';
$cor[1] = "#FF1493";
$cor[2] = "#7FFFD4";
$cor[3] = "#FF0000";
$i = 0;

Salvei e executei e continua exibindo a mesma coisa só o select

Se eu tirar o printf que esta abaixo do while não exibe nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicione diretamente neste trecho de código

['<?php echo $dia[$i] ?>', <?php echo $total[$i] ?>, '#0000CD']

E, então, a variável $cor pode ser removida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito!!!

Gabriel, muuuuuito obrigado mesmo de coração antes de publicar aqui no fórum estava tentando fazer esse gráfico a uns 20 dias como não domino essa área estava pesquisando e vendo videos mas nada estava me dando um caminho.

Agradeço mais uma vez pela sua paciência e ajuda.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por violin101
      Caros amigos do grupo, saudações e um feliz 2025.
       
      Estou com uma pequena dúvida referente a Teclas de Atalho.

      Quando o Caps Lock está ativado o Comando da Tecla de Atalho não funciona.
      ou seja:
      se estiver para letra minúscula ====> funciona
      se estiver para letra maiúscula ====> não funciona
       
      Como consigo evitar essa falha, tanto para Letra Maiúscula quanto Minúscula ?

      o Código está assim:
      document.addEventListener( 'keydown', evt => { if (!evt.ctrlKey || evt.key !== 'r' ) return;// Não é Ctrl+r, portanto interrompemos o script evt.preventDefault(); });  
      Grato,
       
      Cesar
    • Por ILR master
      Fala galera, tudo certo?
       
      Seguinte: No servidor A estou tentando fazer uma consulta com o servidor B, mas está dando erro.
      Estou usando o mesmo código de conexão do servidor B que funciona perfeitamente, mas no servidor A, dá erro.
      Segue código:
       
      $host = 'servidor B';
      $user = 'user';
      $pass = '********';
      $db   = 'banco';
       
      // conexão e seleção do banco de dados
      $conexao = mysqlI_connect($host, $user, $pass, $db);
      mysqlI_set_charset($conexao,"utf8");
      //print "Conexão rodando e OK!"; 
      //mysqlI_close($conexao);
       
      Alguém pode me ajudar?
    • Por violin101
      Caros amigos, saudações.
       
      Por favor, poderiam me ajudar.

      Estou com a seguinte dúvida:
      --> como faço para para implementar o input código do produto, para quando o usuário digitar o ID o sistema espera de 1s a 2s, sem ter que pressionar a tecla ENTER.

      exemplo:
      código   ----   descrição
           1       -----   produto_A
       
      Grato,
       
      Cesar
    • Por violin101
      Caros amigos, saudações.
       
      Humildemente peço desculpa por postar uma dúvida que tenho.

      Preciso salvar no MySql, os seguinte Registro:

      1 - Principal
      ====> minha dúvida começa aqui
      ==========> como faço para o Sistema Contar Automaticamente o que estiver despois do 1.____?
      1.01 - Matriz
      1.01.0001 - Estoque
      1.01.0002 - Oficina
      etc

      2 - Secundário
      2.01 - Loja_1
      2.01.0001 - Caixa
      2.01.0002 - Recepção
      etc
       
      Resumindo seria como se fosse um Cadastro de PLANO de CONTAS CONTÁBEIL.

      Grato,


      Cesar









       
    • Por violin101
      Caros amigos, saudações.

      Por favor, me perdoa em recorrer a orientação dos amigos.

      Preciso fazer um Relatório onde o usuário pode Gerar uma Lista com prazo para vencimento de: 15 / 20/ 30 dias da data atual.

      Tem como montar uma SQL para o sistema fazer uma busca no MySql por período ou dias próximo ao vencimento ?

      Tentei fazer assim, mas o SQL me traz tudo:
      $query = "SELECT faturamento.*, DATE_ADD(faturamento.dataVencimento, INTERVAL 30 DAY), fornecedor.* FROM faturamento INNER JOIN fornecedor ON fornecedor.idfornecedor = faturamento.id_fornecedor WHERE faturamento.statusFatur = 1 ORDER BY faturamento.idFaturamento $ordenar ";  
      Grato,
       
      Cesar
       
       
       
       
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.