Tweeter button
Facebook button

Por uma internet LIVRE! STOP SOPA & PIPA!

PHP – Trabalhando com datas – Somando dias.

Pessoal, hoje vou compartilhar aqui algo muito simples, que pode ser realizado de diversas formas, e é extremamente útil.
Explicarei como somar dias á data atual utilizando o PHP, e apartir desta lógica é possível realizar diversas outras funcionalidades.

Abaixo o código-fonte comentado e abaixo o link para acesso ao exemplo.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
extract($_POST); //Extraio o $_POST das variáveis dos forms.
$dataAtual = date('d/m/Y'); // Armazeno nesta variável a data atual do servidor.
echo 'Hoje é ' . $dataAtual . '<br>'; 
 
$quebrarDatas = explode("/", $dataAtual); // Utilizando a função explode(), separo em um array os caracteres separados por "/".
list($dia, $mes, $ano) = $quebrarDatas; // Com a função list(), listo nas respectivas variáveis os dados na ordem das posições do array $quebrarDatas. Agora passo a ter dia, mes e ano em variáveis diferentes.
 
if($btn <> ""){ // Ao clicar no botão..
    if ($campo == "") { $campo = 0; } // Caso a variável seja vazia, recebe o valor 0.
 
    // Com a função mktime(), retorno os dados de data em timestamp Unix, note que os parâmetros são as variáveis das datas atuais, neste momento perceba que eu somo os dias (variável $dia) com a variável $campo do textinput relativo ao meu form.
    // Na função date(), transformo o resultado da função mktime() no formato de data, especificamente em 'dia/mes/ano'.
    // A variável $dataNova recebe o valor da função date().
    $dataNova = date('d/m/Y', mktime(0,0,0, $mes, $dia + $campo, $ano));
    echo 'Foram somados ' . $campo . ' dias, resultado: ' . $dataNova; // Escrevo a frase concatenando minhas strings e variáveis.
}
?>

Abaixo o meu pequeno form.

1
2
3
4
<form method="post" action="">
<input type="text" name="campo" maxlength="3" size="6" />
<input type="submit" value="Somar dias" name="btn"/>
</form>

Neste caso, utilizei a soma de dias, mas você pode realizar este mesmo procedimento para somar meses e anos.
Clique aqui para ver o exemplo.

Em caso de dúvidas, entrem em contato.

Forte abraço.

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.

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.

PHP – Encriptando dados com a função md5()

Olá meus caros, hoje vou falar sobre algo relativamente muito simples, e muito útil também.
Pode ser que muitos conheçam, outros não, mais é algo indispensávelmente útil.

Trata-se da encriptação de strings utilizando a função md5();
(Obs: O php possui mais duas funções para encriptar strings: crypt e a extensão mcrypt.)

Mas peraí, o que essa função necessariamente faz?
“O MD5 (Message-Digest algorithm 5) é um algoritmo de hash de 128 bits unidirecional desenvolvido pela RSA Data Security, Inc., descrito na RFC 1321, e muito utilizado por softwares com protocolo ponto-a-ponto (P2P, ou Peer-to-Peer, em inglês), verificação de integridade e logins.” Fonte: Wikipédia

Uma vez que o dado está encriptado não é mais possível desencriptá-lo, o resultado será um conjunto de 32 caracteres. Se passou pela sua cabeça que no seu ambiente de login, onde as senhas todas estariam encriptadas, como você faria a estrutura de acesso? Simples, ao invés (o que não é possível) de Selecionar senha no banco -> Desencriptar -> Comparar com dado de entrada, você fará: Encriptar dado de entrada -> Comparar com dado no banco já encriptado.

Muito fácil, veja:

$encriptado = md5($_POST['pegar']); // pegar é o nome do meu campo text

Simples assim..
Esta única linha de código irá encriptar a string do campo pegar, e jogará este valor na variável $encriptado.

Fiz este post o mais didático possível, e com foco no pessoal que está começando na programação, mais se caso você tiver dúvidas, por favor não tenha receio em perguntar, fique á vontade!

Segue este exemplo de dados sendo encriptados: clique aqui.

Forte abraço

Go back to top