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

Posted: 24th agosto 2010 by Vinicius Lourenço in html5, php
Tags: , ,

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.

Cursos na área de T.I – Abra sua mente!

Posted: 18th agosto 2010 by Vinicius Lourenço in String
Tags: , ,

Espero que, de coração, este post possa ajudar e abrir a mente do pessoal que está iniciando graduação na área de T.I e pretende seguir na área de programação e desenvolvimento.

Bom, conforme citado acima, se você está iniciando, ou até se já cursa há algum tempo algum curso na área de T.I e pretende atuar na programação e desenvolvimento aqui vai algumas recomendações que considero de extrema importância.

Antes de mais nada, mantenha-se atualizado, LEIA, tem informação de sóbra em revistas, livros, internet, é crucial estar antenado em novas metodologias de desenvolvimento, novas linguagens, atualizações, frameworks novos..

Desenvolva seu autodidatismo! Existirão situações em que você vai precisar aprender algo, e isso pode estar em um prazo “para ontem”,  será preciso estar adepto e acostumado á absorver de forma rápida o que for preciso. Na minha opinião, esta dica, é umas das, senão a mais importante deste post. Comece aos poucos, aprendendo com tutoriais mais didáticos, e vá evoluindo, até você ter a capacidade de aprender com a leitura de ótimos livros bem técnicos, e hands on (mãos na massa), alie a sua capacidade de aprender sozinho com a de “meter as caras”, faça, teste, aprenda com os erros, aprenda com horas quebrando a cabeça tentando resolver um erro, e quando descobrir o que é, vai ver que era uma vírgula no lugar errado, enfim.. isso vai gerar um conhecimento/experiência fantástica pra você, e tenha certeza, vai te ajudar muito.

Não vou entrar na discussão em falar de cursos de informática, isso ficará para outro post, independente da faculdade que você faz, jamais pense que SOMENTE ALI você estará aprendendo tudo que virá a ter de usar, se você estiver pensando desta forma, está enganado e muito. Infelizmente achar que apenas sabendo (Ou ás vezes nem sabendo direito ) C, Pascal e Portugol você já consegue um bom emprego, uma boa colocação, abra os olhos. Comece se especializando em alguma linguagem de programação, tanto client ou server-side, e em paralelo, vá “dando uma olhada” em outra, escolha algum banco de dados e integre suas aplicações com ele, depois continue a aprender novas linguagens, utilizar novos frameworks, monte projetos pessoais para conhecimento (Quem sabe você não inventa algo fantástico e fica rico? Rs) vá a luta, conheço muitas pessoas que fazem cursos na área, mais se acomodaram a aprender apenas o que a faculdade ensina, e com isso acaba até as vezes não conseguindo um trabalho/estágio na área, e isso, se você não gostar realmente do que está fazendo, irá acabar se aborrecendo e ás vezes até desistindo do curso/ramo.

Invista em networking, isto é, aumente sua rede de contatos, isto sem dúvidas só tende a lhe trazer benefícios.

Se puder, e ajuda muito como atalho para uma aprendizagem mais rápida, faça um curso de alguma linguagem de programação, banco de dados, framework, pois acelera a aprendizagem, e você também faz amizades.

Bom, nem preciso citar que inglês é imprescindível, se ainda não sabe, faça um curso, se já está fazendo, parabéns.

Por último, ensine, seja com um blog, seja na empresa, seja na faculdade, pois além de você estar contribuindo para o desenvolvimento de outra pessoa, você estará dando um ótimo exemplo, onde com certeza esta pessoa certamente fará o mesmo, e além do mais você aprende muito quando está ensinando.

O ciclo de tudo isso, é que você estará sempre atualizado, tanto com assuntos relacionados á tecnologia, tanto ao que acontece no mercado, terá capacidade de aprender sozinho, devido á suas noites em claro com seus testes e/ou projetos pessoais, ajudará pessoas, terá desenvolvido pró-atividade, terá ótimos reflexos na faculdade, ajudará a conseguir um ótimo emprego (pois você poderá ter diferenciais perante outras pessoas) e se caso você já trabalha, ótimo, pois vai agregar mais valor a sí próprio, onde serão reconhecidos seus esforços e conhecimento.

Agradeço muito á Deus por Ele ter me dado a oportunidade de logo ao ingressar na faculdade ter mudado pra esta área específica na empresa, isso expandiu drasticamente minha mente, por isso gostaria de contribuir com outras pessoas para que consigam iniciar sua carreira já percorrendo pelo caminho certo.

E se você quer saber mais sobre a carreira de desenvolvedor/programador, leia este post.

Boa semana á todos.
Abraços.

Olá amigos, boa noite!

Ultimamente tenho recebido alguns e-mails com estas dúvidas, sobre como contar e limitar determinada quantia de caracteres em um textarea, pensando nisso desenvolví 2 funções para resolver de vez este problema!
Vamos lá!
É muito simples, primeiramente no textarea, temos o evento “onkeyup”, ou seja, ao soltarmos uma tecla, chamamos 2 funções:

1
2
3
<textarea cols="45" id="campo" rows="5" onkeyup="mostrarResultado(this.value,140,'spcontando');contarCaracteres(this.value,140,'sprestante')"></textarea><br />
<span id="spcontando" style="font-family:Georgia;">Ainda não temos nada digitado..</span><br />
<span id="sprestante" style="font-family:Georgia;"></span>

Temos também 2 elementos “span” que servirão para exibir os resultados referentes a quantidades de caracteres.
A primeira função que chamamos é a mostrarResultado(), e nela passamos como argumentos:

  • O campo onde os caracteres são digitados;
  • O valor máximo de caracteres;
  • O id do elemento onde irei escrever os resultados.
  • No exemplo abaixo, utilizo como exemplo o número máximo de 140 caracteres para serem digitados.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    
    function mostrarResultado(box,num_max,campospan){
    	var contagem_carac = box.length;
    	if (contagem_carac != 0){
    		document.getElementById(campospan).innerHTML = contagem_carac + " caracteres digitados";
    		if (contagem_carac == 1){
    			document.getElementById(campospan).innerHTML = contagem_carac + " caracter digitado";
    		}
    		if (contagem_carac >= num_max){
    			document.getElementById(campospan).innerHTML = "Limite de caracteres excedido!";
    		}
    	}else{
    		document.getElementById(campospan).innerHTML = "Ainda não temos nada digitado..";
    	}
    }

    A propriedade “length” calcula o tamanho do que lhe é determinado, neste caso do elemento textarea, de id “campo”.
    E o que eu faço nesta função toda?
    Se o tamanho do valor que está no campo, ou seja, a quantidade de caracteres for diferente de 0, escrever no elemento “span” o total de caracteres digitados.
    Se for igual a 1, escrever a mesma frase, só que no singular.
    E se ultrapassar 140 caracteres, escrever a mensagem “Limite de caracteres excedido!”.
    Fácil não? Esta função está 100% customizável, apenas mude os argumentos passados a função de acordo com a sua necessidade.

    Agora vamos a função que irá me mostrar quantos caracteres ainda posso digitar, e quando ultrapassar este valor não deixar.
    Para tal façanha, utilizaremos a função contarCaracteres(), e passamos como argumento:

  • Novamente o campo onde os caracteres são digitados;
  • O valor limite de caracteres;
  • O id do elemento onde irei escrever os resultados.
  • Vamos lá:

    1
    2
    3
    4
    5
    6
    7
    8
    
    function contarCaracteres(box,valor,campospan){
    	var conta = valor - box.length;
    	document.getElementById(campospan).innerHTML = "Você ainda pode digitar " + conta + " caracteres";
    	if(box.length >= valor){
    		document.getElementById(campospan).innerHTML = "Opss.. você não pode mais digitar..";
    		document.getElementById("campo").value = document.getElementById("campo").value.substr(0,valor);
    	}	
    }

    Logo na primeira linha eu faço a simples conta de subtração, pego o valor limite, passado via argumentos, e subtraio dele a quantidade digitada, em seguida escrevo o resultado, exibindo quantos ainda restam para digitar.
    E se este valor for maior ou igual ao meu valor limite, escrevo “Opss.. você não pode mais digitar..” e em seguida utilizo o método substr() para me trazer exatamente o valor limite (neste caso 140) no meu campo, fazendo com que não seja permitido digitar mais..
    Esta função está 95% customizável, apenas na linha 6 coloque o id (na propriedade getElementById()) relativo ao campo em que irá ser contado e bloqueado os caracteres.

    Ainda não entendeu o que a função substr() faz?
    Vamos lá, simples..
    Digamos que dá string “Vinicius” você queira que retorne apenas “Vini”.
    Então seria:

    var string = "Vinicius";
    var resultado = string.substr(0,4);

    Isto irá me retornar “Vini”!
    Traduzindo ao pé da letra, a função é o seguinte:
    substr(caracter inicial, quantidade que quero apartir do inicial)
    Lembrando que sempre o primeiro caracter é 0!

    Veja o exemplo do contador, e pegue o código fonte, e se surgirem dúvidas, por favor, entre em contato!
    Forte abraço e boa semana!

    Olá pessoal, boa noite.
    Estes dias o nosso caro amigo #soudev Willian Mano (@willianmano) realizou um tweet inspirador, onde enviou um link sobre uma vídeo-aula ensinando como construir uma simples aplicação que utiliza a API do twitter com o Flash Builder.
    É algo que julgo extremamente animador, pois nos mostra o quanto a ferramenta é ágil e indiscutivelmente útil para desenvolvimentos.
    Quem está familiarizado com o Flex, já sabe do que ele é capaz, agora, se você não conhece, irá com certeza se espantar com a facilidade de desenvolvimento, integração com dados remotos, conexão com linguagens server-side, y otras cositas más..

    É por isso que eu volto a repetir, estudos realizados sob o Flash Builder só lhe trará benefícios, apaixone-se por esta ferramenta!!
    Link para o vídeo abaixo (Em Inglês).
    Learn how to use the new data features to build a Twitter search app in less than 2 minutes.

    Bons estudos e ótimo final de semana.
    Forte abraço.