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 ILR master
      Tudo bem pessoal?
       
      No código abaixo, estou fazendo uma consulta nas tabelas, banners e banners_referencia
      Meu objetivo é trazer resultados com valores iguais ao nome da cidade declarada na $cidade ou resultados com a referencia Total.
      O problema é que está trazendo todos os resultados. Tenho 10 linhas, 1 com o nome da cidade e duas com o valor Total, então o resultado teria que ser de apenas 3 linhas, mas mostra tudo.
       
      $banner = "SELECT A.*, B.* FROM banners A, banners_referencia B WHERE B.cod_referencia = A.cod_referencia AND A.cidade = '$cidade' OR B.referencia = 'Total' ORDER BY RAND()";
      $banner = mysqli_query($conexao, $banner) or die ("Banner não encontrado");
      while($busca= mysqli_fetch_array($banner)){
          print $busca['cidade'].'<br>';
      };
       
      Alguém consegue me ajudar?
    • Por Rafael_Ferreira
      Não consigo carregar a imagem do captcha do meu formulário. Foi testado com o xampp e easyphp. Também não carregou a imagem de outros captcha. 
       
       
    • Por luiz monteiro
      Olá, tudo bem?
       
      Estou melhorando meu conhecimento em php e mysql e, me deparei com o seguinte. A tabela da base de dados tem um campo do tipo varchar(8) o qual armazena números. Eu não posso alterar o tipo desse campo. O que preciso é fazer um select para retornar o números que contenham zeros a direita ou a esquerda.
      O que tentei até agora
       
      Ex1
      $busca = $conexao->prepare("select campo form tabela where (campo = :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form']);
       
      Se a direita da string $_REQUEST['campo_form'] termina ou inicia com zero ou zeros, a busca retorna vazio.
      Inseri dados numéricos, da seguinte maneira para testar: 01234567;  12345670: 12345678: 12340000... entre outros nessa coluna. Todos os valores que não terminam ou não iniciam com zero ou zeros, o select funciona.
       
       
      Ex2
      $busca = $conexao->prepare("select campo form tabela where (campo = 0340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex3
      $busca = $conexao->prepare("select campo form tabela where (campo = '02340001' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex4
      $busca = $conexao->prepare("select campo form tabela where (campo like 2340000) ");
      Esse número está cadastrado, mas não retorna.
       
      Ex5
      $busca = $conexao->prepare("select campo form tabela where (campo like '12340000') ");
      Esse número está cadastrado, mas não retorna.
       
      Ex6
      $busca = $conexao->prepare("select campo form tabela where (campo like '"12340000"' ) ");
      Esse número está cadastrado, mas não retorna.
       
       
      Ex7
      $busca = $conexao->prepare("select campo form tabela where (campo like :campo) ");
      $busca->bindParam('campo', $_REQUEST['campo_form'])
      Não retorna dados.
       
      O  $_REQUEST['campo_form'] é envio via AJAX de um formulário. 
      Usei o gettype para verificar o post, e ele retorna string.
      Fiz uma busca com número 12345678 para verificar o que o select retorna, e também retrona como string.
       
      Esse tipo de varchar foi usado porque os números que serão gravados nesse campo,  terão zeros a direita ou na esquerda. Os tipos number do mysql não gravam zeros, então estou usando esse. O problema é a busca.
      Agradeço desde já.
       
       
    • Por daemon
      Boa tarde,
       
      Eu tenho uma rotina que faz uma leitura do arquivo .xml de vários sites.

      Eu consigo pegar o tópico e a descrição, e mostrar a imagem que esta na pagina do link.
      Para isso utilizo esta função:
      function getPreviewImage($url) { // Obter o conteúdo da página $html = file_get_contents($url); // Criar um novo objeto DOMDocument $doc = new DOMDocument(); @$doc->loadHTML($html); // Procurar pela tag meta og:image $tags = $doc->getElementsByTagName('meta'); foreach ($tags as $tag) { if ($tag->getAttribute('property') == 'og:image') { return $tag->getAttribute('content'); } } // Se não encontrar og:image, procurar pela primeira imagem na página $tags = $doc->getElementsByTagName('img'); if ($tags->length > 0) { return $tags->item(0)->getAttribute('src'); } // Se não encontrar nenhuma imagem, retornar null return null; } // Uso: $url = "https://example.com/article"; $imageUrl = getPreviewImage($url); if ($imageUrl) { echo "<img src='$imageUrl' alt='Preview'>"; } else { echo "Nenhuma imagem encontrada"; }  
      Mas estou com um problema, esta funcão funciona quando coloco em uma pagina de teste.php. Preciso mostrar em uma página inicial diversas fotos de todos os links. (No caso acima só funciona 1).
×

Informação importante

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