Mudamos de endereço

ESTÁ A PROCURA DE UM BOM EMPREGO?
Tenho uma ótima dica pra você aqui.

mudamos
Ir para o novo blog

Como proteger seu aplicativo com base na data atual na web com php

Introdução

Quem trabalha com desenvolvimento de softwares está sempre procurando formas de proteger seus sistemas contra cópia e contra calote, principalmente aqueles que recebem mensalmente. Uma das formas mais eficientes de se liberar ou bloquear o uso de um aplicativo, é com base na data, mas não a data do computador do usuário, pois ele pode facilmente alterar essa data e assim burlar a proteção.

Outra necessidade pode ser a de sempre ter a hora atualizada. Às vezes pode acontecer da data e a hora do computador não acompanharem a data e a hora corretas por problemas no hardware, mais usualmente por problemas na bateria que mantem esses dados atualizados.

Alguns developers usam lincar o sistema à uma página na Internet que exiba a data e hora oficial de Brasília. Isso é bastante eficiente, mas corre-se o risco do dono da página alterar alguma coisa no script da mesma, o que pode tornar o sistema ineficiente.

O mais prático é o developer ter sua própria página em um servidor na web com a data e hora atualizadas. Dessa forma, ele sempre terá certeza de que o script estará funcionando de forma adequada. Mas devemos fugir do trivial javascript, pois ele, por ser uma linguagem client-side, ou seja, que funciona no computador de quem está acessando a página, irá considerar a data e a hora atual do computador em questão. O mais correto é utilizar uma página desenvolvida em uma linguagem server-side, ou seja, que funciona no servidor. Essa página pode ser desenvolvida em php, asp ou qualquer outra que funcione no lado servidor.

Hoje em dia, há ótimos serviços de hospedagem até gratuitos que oferecem suporte ao PHP. Eu indico a Hostinger, que alem do PHP, tem suporte ao MySql e diversos outros serviços no seu plano gratuito.

Aqui irei demonstrar como integrar uma página php na web a um sistema que utilize VBA no Access. O mesmo esquema pode ser utilizado em Visual Basic ou qualquer outra linguagem desktop.

Como não haverá a necessidade da data e hora serem atualizadas constantemente, poderemos utilizar PHP puro, pois esses dados serão verificados apenas no momento da requisição.

Iniciando no PHP

Antes de tudo, vamos falar um pouco sobre a sintaxe do php para quem ainda não a conhece. Essa linguagem é parecida com html na forma de se iniciar e finalizar o script. Como você deve saber, uma página html começa com a tag <html> e finaliza com </html>. No caso do php, há duas formas de se indicar que estamos iniciando um bloco php. São elas: <? e <?php. Para finalizar o bloco, utilizamos ?>. Assim, a sintaxe elementar de uma página php seria:

<?

instruções

?>

ou:

<?php
instruções
?>

Por razões de compatibilidade, aconselho a usar a segunda forma de inicialização <?php, pois, dependendo das configurações do php, a primeira, <?, pode não funcionar.

Esses elementos podem ficar em uma linha só tambem:

<?php instruções ?>

Para fins de melhor visualização e entendimento do que estamos fazendo, é aconselhável deixar cada elemento em uma linha. E para melhorar ainda mais na hora de analisarmos um bloco de códigos, é aconselhável indentar as linhas hierarquicamente:

<?php
instruções
?>

O php possui várias instruções para imprimir texto em uma página. Entre elas o print, o sprint e o echo. Textos devem ser escritos entre aspas, podendo elas serem simples ou compostas e devem finalizar com um ponto e vírgula:

<?php
echo "Meu primeiro texto";
?>

Quando precisarmos utilizar scripts que tambem ficam entre aspas dentro de um bloco de texto, aí precisaremos mudar o tipo das aspas. É interessante você elaborar um padrão e segui-lo sempre, assim, não se perderá durante o processo de programação da página.

Trabalhando com data e hora no PHP

Para recuperar a data e a hora atual, o php utiliza a variável date. Veja o que usar para cada elemento da data:

ddia com dois dígitos: 01 a 31;

mmês com dois dígitos: 01 a 12;

yano com dois dígitos: 13;

Yano com quatro dígitos: 2013;

hhora com período de doze horas: 01 a 12 am e 01 a 12 pm;

Hhora com perído de 24 horas: 00 a 23;

i: minuto com dois dígitos: 00 a 59;

s: segundos com dois dígitos: 00 a 59.

Como iremos utilizar strings e a variável date, precisaremos saber como concatenar esses elementos em php. No VB utilizamos &. No php, podemos utilizar um ponto( . ).

Implementando a parte PHP do sistema

Podemos utilizar várias formas de se recuperar a data e a hora da página dentro do nosso aplicativo desktop, entre as quais fazer uma pesquisa por algum termo do texto, utilizando o innerText, o outerText. A mais prática de todas é identificando os elementos html dentro da página através de um nome ou de uma id. Esse elemento pode ser um campo, uma div, um span ou qualquer outro. Veja nossa página completa em php. As três linhas iniciais, das quais não falamos, estão comentadas. A barra dupla em php indica início de um comentário:

<?php

header ('Content-type: text/html; charset=UTF-8'); // define a codificação do texto
setlocale(LC_TIME, "pt_BR.utf8"); // define a localidade
date_default_timezone_set('America/Sao_Paulo'); // define o fuso horário

echo "<span id='horaatual'>" . date('H:i:s') . "</span>";
echo "<span id='dataatual'>" . date('d/m/Y') . "</span>";
?>

Na primeira linha, instruímos o php a utilizar a codificação de texto UTF-8, que é a mais própria para o nosso idioma.

Na segunda linha, indicamos nossa localidade, o Brasil.

Na terceira linha, definimos o nosso fuso horário.

Na quarta linha criamos um elemento com id “horaatual”, o qual exibirá a hora atual.

Na quinta linha fazemos o mesmo, mas utilizando a id “dataatual” e retornando a data atual.

São esses dois ids, horaatual e dataatual, que iremos utilizar no nosso aplicativo desktop.

No lugar de span, pode-se ainda usar div ou campos texto ou mesmo uma tabela, na qual os ids ficariam dentro das células, identificando-as.

A função VBA do sistema

Há várias formas de fazer isso. Uma das mais simples é utilizando um componente webbrowser que abrirá a nossa página na web para assim disponibilizar os elementos de pesquisa que precisamos para capturar a data e a hora.

Então, a primeira coisa que faremos é inserir um controle webbrowser no nosso formulário. Esse controle poderá ficar oculto caso ache necessário. Vou utilizar como exemplo para o webbrowser o nome de wbDataHora. Então, no evento “Ao carregar” do formulário, utilizaremos as linhas abaixo:

Private Sub Form_Load()
Me.wbDataHora.Navigate "www.seusite.com.br/datahora.php"
Do While wbDataHora.Busy
DoEvents
Loop
Do While wbDataHora.ReadyState <> 4
DoEvents
Loop
Me.txtDataOficial = Me.wbDataHora.Document.getElementById("dataatual").innerText
Me.txtHoraOficial = Me.wbDataHora.Document.getElementById("horaatual").innerText
End Sub
A primeira linha é responsável por carregar o controle webbrowser com a página que contem a data e a hora.
Os dois blocos Do While fazem o código aguardar até que a página esteja completamente carregada.
As duas últimas linhas carregam a data e a hora nos campos txtDataOficial e txtHoraOficial.
Explicando os elementos das linhas responsáveis por capturar esses dados e coloca-los nos devidos campos:
Document: indica que iremos acessar o documento que está carregado no controle webbrowser;
getElementById: indica que será feita uma pesquisa nos elementos cujo id tenha o nome indicado entre parênteses;
innerText: indica que o texto no interior desses elementos serão printados nos devidos campos do formulário.
Pronto, é isso. Agora tempos a data e a hora oficial e poderemos utilizá-las para liberar ou bloquear o uso da aplicação ou para corrigir a data e a hora do computador.

Vídeo – Como colocar Atalho na barra de tarefas do Windows 7

No vídeo abaixo demonstro como colocar atalhos na barra de tarefas do Windows 7 de forma a abrir o arquivo ou pasta pretendidos e não abrir somente o programa associado ao arquivo ou a pasta raiz do Explorer.

Calcular idade de forma simples e eficiente em VBA

Hoje vou mostrar uma forma bem simples de se calcular a idade com precisão. Geralmente, para esse cálculo, subrtaímos o ano de nascimento do ano atual, certo? Certo. Só que se a pessoa ainda não fez aniversário no ano atual, precisamos diminuir um ano nessa subtração, certo? Certo.

Podemos fazer isso utilizando condições que irão avaliar o mês atual e se for maior que o mês de nascimento, faz o cálculo normal. Se for menor que o mês de nascimento, dimimui um ano na subtração do ano de nascimento para o ano atual. Mas, e se o mês for igual? Aí precisamos verificar o dia de nascimento. Se for menor ou igual ao dia atual, faz o cálculo normal. Se for maior que o dia atual, diminuímos mais um na subtração do ano de nascimento para o ano atual. Nesse caso, teríamos um If aninhado dentro de outro If, certo?Certo?

Bem, podemos fazer isso de forma simplificada verificando mês e dia ao mesmo tempo. Se a junção de mês e dia de nascimento for menor ou igual à junção de mês e dia atuais, fazemos o cálculo normalmente, caso contrário, diminuímos mais um ano na subtração, pois a pessoa ainda não teria feito aniversário no ano atual.

Vamos considerar a data atual como 11/04/2013 e três datas de nascimento, sendo 25/02/1990, 11/04/1992 e 25/07/2000.

A junção do mês e dia atuais, 11/04/2013, é 411.

A junção do mês e dia da primeira data de nascimento, 25/02/1990, é 225. Isso significa que a pessoa já fez aniversário no ano atual, pois 411 é maior do que 225.

A junção do mês e dia da segunda data de nascimento, 11/04/1992, é 411. Isso significa que a pessoa já fez aniversário no ano atual, pois 411 é igual a 411.

A junção do mês e dia da terceira data de nascimento, 25/07/1990, é 725. Isso significa que a pessoa ainda não fez aniversário no ano atual, pois 411 é menor do que 725.

No primeiro e segundo caso, basta fazer a subtração do ano atual para o ano de nascimento. Já no segundo caso, teremos que fazer essa subtração e diminuir mais 1. Sabendo que podemos utilizar a junção do mês e o dia, podemos fazer uma verificação simples pegando o Integer dessas junções. Vamos supor que temos um aplicativo no Access, no qual tem um formulário aonde queremos fazer esse cáluculo. Nesse formulário temos os campos txtNascimento e txtIdade. No campo txtNascimento consta a data de nascimento e o campo txtIdade deverá mostrar a idade. Se formos utilizar o VBA, podemos ter algo assim:

If Int(Month(Date) & Day(Date)) < Int(Month(Me.txtNascimento) & Day(Me.txtNascimento)) Then
    Me.txtIdade = DateDiff("yyyy", Me.txtNascimento, Date) - 1
Else
    Me.txtIdade = DateDiff("yyyy", Me.txtNascimento, Date)
End If
Tambem podemos fazer esse cálculo na fonte do controle txtIdade:
=Iif(Int(Month(Date) & Day(Date)) < Int(Month([txtNascimento]) & Day([txtNascimento]));DateDiff("yyyy";[txtNascimento];Date()) - 1;DateDiff("yyyy";[txtNascimento];Date))
E então, é ou não é uma coisa extremamente simples de se fazer? Você pode aproveitar essa dica e adaptá-la para qualquer linguagem de programação ou mesmo para uma planilha de Excel ou outro semelhante.
É isso. Espero que tenha gostado e que seja útil.
Abraço e até a próxima.

Vídeo – Calcular e validar DV de CPF em VBA no Access

No vídeo abaixo, demonstro como calcular e validar os dígitos verificadores do CPF via VBA no Access.
Veja ainda algumas curiosidades e macetes sobre a sequência numérica desse documento.

Testes de performance no Access

O Microsoft Access tem sofrido, ao longo do tempo, a desconfiança de muitos programadores que o consideram fraco ou uma ferramenta de pouca expressão no ramo de banco de dados e de programação. Hoje iremos analisar mais a fundo os motivos que levaram-o a essa condição.

O Access foi criado para ser uma ferramenta que permitisse a qualquer usuário criar bancos de dados com facilidade. A própria Microsoft sempre procurou enfatizar isso. Por esse motivo, usuários que nunca tiveram contato com esse tipo de aplicativo, achou que poderiam criar soluções completas para qualquer tipo de necessidade. A Microsoft não explicou a diferença entre uma agendinha de contatos e uma aplicação comercial completa, com relacionamentos entre tabelas, integridade referencial entre outros parâmetros.

Com a falta de conhecimentos nesses quesitos, era de se esperar que os aplicativos criados com o Access apresentassem um baixo desempenho e vários outros problemas que levam até mesmo ao corrompimento de dados. Sem conhecer a fundo as funcionalidades e características da ferramenta, vemos usuários criando sistemas com consultas complexas que só fazem com que o sistema demore muito mais do que o necessário para exibir um simples resultado.

Como participante ativo de fóruns e comunidades sobre o Access, vejo usuários que tiveram seu primeiro contato com uma ferramenta de banco de dados e já acham que podem criar sistemas comerciais e viver disso e quando se deparam com o mais grosso mesmo da coisa, recorrem aos fóruns. Já vi frases do tipo:

“Acabei de ter meu primeiro contato com o Access e estou criando um programinha que preciso entregar essa semana. Já criei as tabelas e os formulários mas não consigo ligar o formulário com o subformulário. O que eu tenho que fazer?”

E a pessoa está criando o aplicativo para uma empresa. Não sabe nem relacionar os campos do formulário e subformulário e certamente nem criou os relacionamentos entre as tabelas. E quando a gente pergunta se o fez, a pergunta que vem de volta é “o que é um relacionamento?” E pior que tem bizarrices ainda maiores do que essa. Depois, dentro de pouco tempo, o sistema começa a apresentar lentidão e outros problemas mais graves ainda e o “programador” abandona a empresa e o sistema. Aí vem outro programador que nem se deu ao trabalho de estudar o Access a fundo e logo diz “tinha que ser Access. Isso é uma bomba mesmo.” E então todo mundo embarca na ideia de que a ferramenta não presta sem nem mesmo testá-la em toda sua plenitude.

Com o conhecimento que tenho adquirido ao longo dos anos, digo sem medo que não existe ferramenta limitada. Existe programador limitado ou que não se interessa em ampliar seus conhecimentos em outras áreas. O Access é uma das ferramentas de programação mais versáteis que conheço e que conta com a melhor ferramenta de relatórios entre todas. Limitações existem, claro, assim como existem tambem em todas as outras plataformas. Cabe ao programador superá-las. A maior limitação do Access, ao meu ver, é a capacidade de apenas 2 gigabytes que um arquivo pode ter. Mas isso tambem pode ser superado com a astúcia do programador.

Como esse artigo tem por finalidade discorrer sobre as várias formas de se trabalhar com registros e identificar as mais rápidas, vamos falar sobre as formas de se trabalhar com inserção, consulta e exclusão de registros, entre outras coisas.

Os dados de um banco de dados Access podem ser manipulados em campos de um formulário vinculado à uma tabela ou pode ser manipulado via código VBA. Quando o formulário e consequentemente os campos estão vinculados à tabela e aos campos da tabela, as alterações são feitas automaticamente e tem tempo real. Quando o formulário é desvinculado, essas alterações ou inserção de registros são feitas ao se clicar em um botão por exemplo. É nessa segunda alternativa que estaremos trabalhando.

É possível inserir, alterar e excluir registros de várias formas, bem como é possível fazer consultas tambem utilizando vários métodos. Tanto para inserção de registros quanto para atualização ou exclusão, podemos utilizar um objeto Recordset ou cláusulas SQL. Para cada uma das tarefas, um método diferente pode ser mais eficaz, como demonstrado no vídeo abaixo, no qual vemos ainda outros testes envolvendo listboxes, testes esses que podem ser estendidos às comboboxes:

Como você percebeu pelo vídeo, cabe ao programador saber qual a forma mais eficaz de se trabalhar com cada tipo de tarefa.

O aplicativo que utilizei no vídeo está disponível para download para que você possa testá-lo e entender como os procedimentos foram executados. Faça o download do mesmo e estude as funções VBA para aprender como tudo foi feito.

Os links para baixar o aplicativo está nas descrições do vídeo no youtube, no link http://youtu.be/6uAsxNmjfOs

Ainda existem outros tipos de métodos que podem ser utilizados, dependendo do caso. Agora caberá a você pesquisar mais sobre o assunto.

Espero que esse artigo tenha sido útil. Dúvidas, sugestões e críticas construtivas podem ser postadas.

%d blogueiros gostam disto: