Tweeter button
Facebook button

Por uma internet LIVRE! STOP SOPA & PIPA!

Como montar gráficos com dados dinâmicos em HTML5 via PHP e MySQL

Olá pessoal, tudo certo?
Hoje tive minha primeira experiência com o HTML 5 e posso dizer que fiquei realmente bastante satisfeito com o resultado de tudo isso.
Até então, em um sistema que desenvolví na empresa, os dados eram exibidos em forma de gráfico utilizando a biblioteca em PHP JPgraph, que por sinal muito boa, entretanto não possuia interatividade com o usuário e pecava um pouco na aparência, foi quando comecei a procurar por outras soluções, que localizei a biblioteca baseada no elemento Canvas, utilizando HTML 5, chamada RGraph. Lí a documentação, gostei do que ví, entretanto minha necessidade era trazer estes dados do banco, e com isto começa nosso post.

Utilizando gráfico em HTML5 com dados dinâmicos via PHP e MySQL!

Obs: Precisava de alguns dados para deixar nosso post ainda melhor, então perguntei 4 idades a meus queridos amigos seguidores e eles serão utilizados em nosso teste.
Abaixo a tabela, com os dados:

E agora, vamos começar o nosso processo para trazer estes dados ao gráfico.
Antes, vamos relembrar a estrutura de um documento HTML5:

1
2
3
4
5
6
7
8
<!DOCTYPE html>
<html>
    <head>
	<title></title>     
    </head>
    <body>
    </body>
</html>

Como vemos, não mudou muita coisa, certo?

Vamos dividir o post em 3 partes, ok? Primeiramente chamando os arquivos que carregam os métodos do gráfico.

1
2
3
4
5
6
7
8
<head>
    <script src="libraries/RGraph.common.core.js" ></script>
    <script src="libraries/RGraph.common.annotate.js" ></script>
    <script src="libraries/RGraph.common.context.js" ></script>
    <script src="libraries/RGraph.common.tooltips.js" ></script>
    <script src="libraries/RGraph.common.resizing.js" ></script>
    <script src="libraries/RGraph.bar.js" ></script>
</head>

Não esqueça de colocar no diretório a pasta libraries com os scripts dentro.

Em seguida, vamos trazer do banco nossos dados utilizando o php:

1
2
3
4
5
6
7
8
9
10
11
$myQuery = "SELECT twitter, idade FROM exemplo_2";
$consultar = mysql_query($myQuery);
 
$i = 1;
while($resultado = mysql_fetch_array($consultar)){
	$idade[$i] = $resultado['idade'];
	$i++;
}
 
$dadosIdades = join(",", array($idade[1],$idade[2],$idade[3],$idade[4],$idade[5]));
$dadosIdades = "[$dadosIdades]";

Agora vamos descrever todo este procedimento acima:
Primeiramente realizamos uma query normal e trazemos os dados de cada pessoa, incluindo-os nas posições de uma variável chamada idade.
Logo após, unimos todos estes dados e formamos um array só, já com as posições separadas por vírgula, e em seguida colocamos este array entre “[]“.

Feitos isso, será necessário trazer estes dados para o JavaScript, e agora?
Calma calma, não priemos cânico (Chapolin sempre, rs)
Utilizando PHP, vamos realizar esta tarefa:

1
2
3
4
5
6
7
8
echo "<script>" . "\n";
echo "var dadosIdades = $dadosIdades" . "\n";
echo "var idadevilourenco = $idade[1];";
echo "var idadembrena = $idade[2];";
echo "var idadefausto = $idade[3];";
echo "var idadegenes = $idade[4];";
echo "var idadeandre = $idade[5];";
echo "</script>"  . "\n";

Veja só, coloquei o meu array que estava em PHP na variável “dadosIdades” agora em JavaScript e cada idade de seus respectivos donos em uma variável diferente.

Ok, quase pronto, agora vamos criar nosso gráfico.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 <script>		
	        window.onload = function ()
        {
            var meuGraficoIdades = new RGraph.Bar('meuCanvasGraficoIdades', dadosIdades);
            meuGraficoIdades.Set('chart.background.barcolor1', 'white');
            meuGraficoIdades.Set('chart.background.barcolor2', 'white');
            meuGraficoIdades.Set('chart.title', 'Exemplo Idades - www.vilourenco.com.br');
            meuGraficoIdades.Set('chart.title.vpos', 0.6);
            meuGraficoIdades.Set('chart.labels', ['@vilourenco', '@monteirobrena', '@g0nc1n', '@webgenes', '@andredmolin']);
            meuGraficoIdades.Set('chart.tooltips', ['@vilourenco tem ' + idadevilourenco + ' anos', '@monteirobrena tem ' + idadembrena + ' anos', '@g0nc1n tem ' + idadefausto + ' anos', '@webgenes tem ' + idadegenes + ' anos', '@andredmolin tem ' + idadeandre + ' anos']);
            meuGraficoIdades.Set('chart.text.angle', 45);
            meuGraficoIdades.Set('chart.gutter', 35);
            meuGraficoIdades.Set('chart.shadow', true);
            meuGraficoIdades.Set('chart.shadow.blur', 5);
            meuGraficoIdades.Set('chart.shadow.color', '#aaa');
            meuGraficoIdades.Set('chart.shadow.offsety', -3);
            meuGraficoIdades.Set('chart.colors', ['#00CED1']);
            meuGraficoIdades.Set('chart.key.position', 'gutter');
            meuGraficoIdades.Set('chart.text.size', 10);
            meuGraficoIdades.Set('chart.text.font', 'Georgia');
            meuGraficoIdades.Set('chart.text.angle', 0);
            meuGraficoIdades.Set('chart.grouping', 'stacked');
            meuGraficoIdades.Set('chart.strokecolor', 'rgba(0,0,0,0)');
            meuGraficoIdades.Draw();           
        }
    </script>

Notem que no início, eu instancio minha variável meuGraficoIdade, que passa a herdar as propriedades da classe RGraph.Bar.

1
var meuGraficoIdades = new RGraph.Bar('meuCanvasGraficoIdades', dadosIdades);

O que eu fiz nesta linha?
Conforme dito, foi instanciada a variável, e em seguida eu passo como parâmetro o id do meu elemento Canvas (falaremos disto mais abaixo) onde será abrigado meu gráfico, e passo o array com os dados das idades, que foram transferidos do php para o javascript, lembra? (Explicado acima)

Ok, olhando com carinho, é possível perceber que você consegue customizar o gráfico inteiro.
Neste exemplo, utilizei apenas as propriedades:
chart.title – Para alterar o título do gráfico.
chart.labels – Para inserir o ‘nome’ das barras.
chart.tooltips – Para inserir a legenda de cada barra.
chart.colors – Alterar a cor do gráfico.
chart.text.angle – Alterar o ângulo do texto dos ‘nomes’ das barras.

Lembra-se que separei a idade de cada dono e inserí no JavaScript? Pois bem, eles servirão para informar a idade de cada um quando clicado sobre as barras, são os famosos tooltips!
Olhe aonde eu as utilizei:

1
   meuGraficoIdades.Set('chart.tooltips', ['@vilourenco tem ' + idadevilourenco + ' anos', '@monteirobrena tem ' + idadembrena + ' anos', '@g0nc1n tem ' + idadefausto + ' anos', '@webgenes tem ' + idadegenes + ' anos', '@andredmolin tem ' + idadeandre + ' anos']);

Ok, agora, voltando a parte de html, vamos inserir o elemento canvas, atribuí-lo um id para que seja reconhecido pelo script JavaScript e que seja desenhado nosso gráfico.

1
2
3
<div style="width: 450px;">
    <canvas id="meuCanvasGraficoIdades" width="700" height="350">[No canvas support]</canvas>
</div>

Relendo o script:
Este mesmo id do Canvas, foi informado na primeira linha do script responsável por montar o gráfico, ou seja, informando o local em que será desenhado.
E temos a frase “No canvas support”, que entrará em campo caso seu navegador ainda não esteja apto a utilizar HTML5.

Veja aqui o resultado.
Obs: Clique nas barras para ver os tooltips.

Bom pessoal, espero que tenham gostado do post, darei início a vários posts falando sobre esta maravilha que é o HTML 5 e ensinando sobre novos tipos de gráficos.
Lembrando que, eu de forma alguma estou contra ou desmerecendo o nosso querido e velho Flash, mas, como diria @vedovelli: “Tenho que estar atento a tecnologia que pagará minhas contas”.

E se você gostou, detestou, amou, adorou, deixeu seu feedback, eu prezo por um post que seja agradável de ler e entender, e sua ajuda contribuirá para essa constante melhora.

Um grande abraço e boa semana.

MySQL Workbench 5.2.25

Olá pessoal, tudo certo?
Hoje vou falar sobre uma ferramenta “GUI” (Graphical User Interface, ou Interface Gráfica ao Usuário) para manipulação e administração de bases de dados no MySQL.
Não é nada que venha para destruir com o nosso bom e velho PhpMyAdmin, mas sim algo que possa melhorar certos pontos..

A descoberta ocorreu em uma de minhas buscas sobre como otimizar processos e atividades, não fiz uma análise crítica completa no software, apenas uma visualizada rápida, mais posso dizer que achei muito interessante e que vou passar a usá-lo com mais empenho.
Segue abaixo algumas imagens (Clique para aumentar) sobre o software, e ao final do post o link para baixá-lo.

(Tela inicial)

(Visualização de tabelas)

(Visualização de dados em uma tabela)

(Realizando Querys)

(Alerta para query incorreta)

Download:

Link para página com algumas informações referente ao software. – (Em Inglês)
Link direto para o dowload.

Espero que tenham gostado da ferramenta e que sirva de grande utilização para vocês.
Abraços.

PHP – Como exportar dados do MySQL para o Excel (*.XLS)

Olá pessoal, como vão?

Hoje vamos aprender a selecionar dados de uma tabela e exportar para Excel (*.xls), recurso bastante útil para relatórios, informativos e etc..

Bom, como um digno #soudev que sou, rs, o recheio da minha tabela será os nomes de nossos amigos desenvolvedores, e além de ser utilizada para o exemplo, no final do post, ao clicar no link para o algoritmo entrar em ação você vai ganhar uma planilha com nomes e os respectivos perfis no twitter para você seguir!

Aqui tenho minha tabela:
A lógica do algoritmo será em basicamente executar uma query no banco, trazer os dados, inserir em um array e forçar o download. Simples né?
Vou explicar separadamente parte por parte e no final disponibilizo o algoritmo inteiro, ok?

Parte 1:
Realizamos uma query no banco, e no caso como quero todos os dados da tabela não será preciso impor condições na query.
A variável ‘$contar’ usarei para contar todas as linhas retornadas da consulta, por meio da função mysql_num_rows(), utilizaremos mais pra frente!

$query = "SELECT * FROM exemplo_1";
$executar_query = mysql_query($query);
$contar = mysql_num_rows($executar_query);

Parte 2:
Agora faremos um loop, usando um for para criar o cabeçalho da nossa planilha, utilizará a posição [0] do array ‘$html’.

1
2
3
4
5
6
7
8
9
for($i=0;$i<1;$i++){   
$html[$i] = "";
    $html[$i] .= "<table>";
    $html[$i] .= "<tr>";
    $html[$i] .= "<td><b>Nome</b></td>";
    $html[$i] .= "<td><b>Twitter</b></td>";
    $html[$i] .= "</tr>";
    $html[$i] .= "</table>";
}

Parte 3:
Nesta parte, vamos trazer os dados do banco em forma de array, utilizando a função mysql_fetch_array() como normalmente fazemos, as únicas diferenças são que: logo no início eu declaro que minha variável ‘$i’ agora vale 1, pois este será o ponteiro para indicar em que posição do array ‘$html’ eu vou inserir as tabelas HTML, e como no loop anterior eu coloquei o cabeçalho na posição [0], agora preciso inserir os dados da posição [1] em diante..
Seguindo então a execução do algoritmo:
Meu ‘$i’ vale 1 e enquanto houver dados vindos do banco, a minha variável ‘$retorno_nome’ corresponderá a posição ['nome'] e ‘$retorno_twitter’ a posição ['twitter'] dentro do array (trata-se de arrays associativos). Na sequência alimento a tabela com as variáveis ‘$retorno_nome’ e ‘$retorno_twitter’ dentro do array ‘$html’ na posição correspondente ao valor atual da variável ‘$i’, ao final disso somo 1 a nossa tão útil variável ‘$i’.

$i = 1;
while($ret = mysql_fetch_array($executar_query)){
    $retorno_nome = $ret['nome'];
    $retorno_twitter = $ret['twitter'];
    $html[$i] .= "<table>";
    $html[$i] .= "<tr>";
    $html[$i] .= "<td>$retorno_nome</td>";
    $html[$i] .= "<td>$retorno_twitter</td>";
    $html[$i] .= "</tr>";
    $html[$i] .= "</table>";
    $i++;
}

Parte 4:
Bom, nesta altura já temos todos os dados do banco dentro do nosso array ‘$html’, prontos para usarmos.
Agora vamos informar ao php qual será o nome do nosso .XLS, para isso criamos a variável $arquivo que receberá este nome.

$arquivo = 'soudev.xls';

Parte 5:
Em seguida iremos passar parâmetros a função header() que irá, na ordem:
Determinar até quando este arquivo ficará em cache;
Indicar a data de última modificação;
Indicar que o arquivo não deverá ficar no cache, forçando o seu reprocessamento.
Mudar o tipo do arquivo;
Forçar o download, informando o nome do arquivo, no nosso caso será a variável ‘$arquivo’.

1
2
3
4
5
6
7
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header ("Content-type: application/x-msexcel");
header ("Content-Disposition: attachment; filename={$arquivo}" );
header ("Content-Description: PHP Generated Data" );

Parte 6:
E por final, realizo outro loop para imprimir este array no nosso arquivo XLS, nesta altura já posso substituir o valor do nosso ponteiro ‘$i’, pois não irá afetar em nada.
Lembra-se que no ínicio, declarei uma variável ‘$contar’? (Caso não lembre, veja lá em cima), bom nesta variável temos o valor de todas as linhas retornadas da consulta, sendo assim informo pro meu loop até onde ele deve parar, e escrevo cada posição do array.

1
2
3
for($i=0;$i<=$contar;$i++){  
    echo $html[$i];
}

Feito, ao acessar esta página você receberá o arquivo XLS, sem nenhuma página sendo exibida, ou seja, este algoritmo deverá ser a página link de por exemplo, um botão de exportar dados.
Existem diversas maneiras de exportarmos dados de um banco para XLS, CSV e esta é uma delas, espero que tenham entendido e gostado, caso exista dúvidas fiquem a vontade em perguntar.

Clique aqui para visualizar o arquivo XLS gerado com este exemplo.

E abaixo segue o algoritmo completo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
<?
include 'conexao.php';
 
$query = "SELECT * FROM exemplo_1";
$executar_query = mysql_query($query);
$contar = mysql_num_rows($executar_query);
 
for($i=0;$i<1;$i++){   
$html[$i] = "";
    $html[$i] .= "<table>";
    $html[$i] .= "<tr>";
    $html[$i] .= "<td><b>Nome</b></td>";
    $html[$i] .= "<td><b>Twitter</b></td>";
    $html[$i] .= "</tr>";
    $html[$i] .= "</table>";
}
 
$i = 1;
while($ret = mysql_fetch_array($executar_query)){
    $retorno_nome = $ret['nome'];
    $retorno_twitter = $ret['twitter'];
    $html[$i] .= "<table>";
    $html[$i] .= "<tr>";
    $html[$i] .= "<td>$retorno_nome</td>";
    $html[$i] .= "<td>$retorno_twitter</td>";
    $html[$i] .= "</tr>";
    $html[$i] .= "</table>";
    $i++;
}
 
$arquivo = 'soudev.xls';
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header ("Last-Modified: " . gmdate("D,d M YH:i:s") . " GMT");
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
header ("Content-type: application/x-msexcel");
header ("Content-Disposition: attachment; filename={$arquivo}" );
header ("Content-Description: PHP Generated Data" );
 
for($i=0;$i<=$contar;$i++){  
    echo $html[$i];
}
?>

Forte Abraço!
E vamos lá, amanhã Brasil 4 x 0 Portugal, rs.

Go back to top