sexta-feira, 4 de janeiro de 2008

Formatar Números com PHP

Com o PHP é possível formatar números com casas decimais, vírgulas e pontos. A função utilizada para isto é a number_format().

Vale lembrar que esta função aceita somente 1, 2 ou 4 parâmetros.

Segue alguns exemplos da utilização da função:

$valor = 123456;

echo number_format($valor); # 123,456
echo number_format($valor, 2, ",", " "); # 123 456,00
echo number_format($valor, 2, ".", ""); # 123456.00
echo number_format($valor, 2, ",", "."); # 123.456,00

O JavaScript possui funções específicas para obter a resolução da tela do usuário. O seguinte código obtém a altura e largura da resolução do monitor:

<script type="text/javascript">
function getResolucao()
{
if (self.screen)
{
largura = screen.width;
altura = screen.height;
}
}
</script>


Dessa forma as variáveis largura e altura irão possuir respectivamente a largura e a altura da resolução do monitor.

quinta-feira, 3 de janeiro de 2008

Desabilitar Botão Direito do Mouse

Com JavaScript é possível desabilitar o menu contextual que aparece quando se clica com o botão direito do mouse em um site. Vale ressaltar que este é apenas um método para incrementar a segurança, não sendo referência definitiva no quesito segurança. Qualquer usuário com um pouco mais de conhecimento pode desabilitar ou burlar esta função.

O seguinte código desabilita o menu contextual exibido a partir do clique com o botão direito do mouse:

<script language=JavaScript>
function desabilitaConexto()
{
alert("Tratamento qualquer para a chamada da função.");
return false;
}

document.onContextMenu = desabilitaConexto();
</script>

Lembrando que qualquer script deve estar entre as tags <head> e </head>.

O termo "validação em JavaScript" é um pouco incorreto para descrever o processo de amparar os usuários no momento de preencher corretamente formulários. Na verdade, a linguagem server-side adotada executa a validação - JavaScript meramente provê uma assistência. Mas quando a validação e a assistência não vem da mesma origem, não faz mais do que confundir as pessoas.

Formulários web são os meios pelos quais o HTML se faz interativo - é através destes formulários que as aplicações web recebem dados dos usuários. As vezes estes dados podem não possuir restrições. Em outras ocasiões, os dados devem ser avaliados para garantir que os dados inseridos estão no formato correto, particularmente informações como endereços de e-mail, URLs e cartões de crédito. É sabido que a chave para dados bem formatados é a validação no lado do servidor, e o JavaScript apenas ajuda o usuário a saber o formato correto desejado sem ter que esperar por um processamento no lado do servidor. Desenvolvedores têm combinado funcionalidades do JavaScript com validações no lado do servidor. Contudo, a maioria das formas de validação realizam a mesma tarefa, usando tecnologias diferentes. Um sistema bem implementado e relativamente seguro implementa validações no lado do servidor e utiliza JavaScript para melhorar a interatividade com o usuário.

Estritamente falando a validação com JavaScript não é uma validação - apenas auxilia na entrada de dados. Qualquer um pode burlar o JavaScript; é uma ajuda, não a palavra final. Ele simplesmente ajuda a dar confiança para o usuário no momento de pressionar o botão para submeter as informações.

JavaScript fornece assistência quando construído separadamente à validação no lado do servidor, mas não é o ideal. Na pior das hipóteses, as duas validações irão funcionar diferentemente, e o que é válido no cliente não é válido no servidor. Na melhor das hipóteses, as validações irão trabalhar corretamente. Mas com a validação em vários locais, há uma crescente probabilidade de que apenas uma irá receber os dados atualizados quando mudanças forem requeridas, obtendo neste ponto resultados inconsistentes.

Um exemplo da obrigatoriedade do uso de validações no lado do servidor é quando da entrada de dados pelo usuário, onde tais dados interagem com o banco de dados. Dependendo de como os scripts do aplicativo web foram construídos, existe a possibilidade de tentar uma invasão indireta. Suponha que uma página tenha um campo que permite ao usuário digitar um palavra a ser buscada. Quando insere os dados e envia ao servidor, o script cria uma consulta simples:

SELECT * FROM tabela WHERE campo = 'padrao';

Como neste caso o caractere delimitador usado é o apóstrofo, pode-se enganar o sistema digitando algo como:
"padrao'; DELETE * FROM tabela;"

O resultado disto é que todos os dados da tabela "tabela" serão apagados. Ou seja, se existe apenas um mecanismo de validação em JavaScript que impessa de entrar com caracteres especiais SQL, este mecanismo pode ser facilmente burlado e a string contendo funções SQL irá para o servidor e será executada.

Finalmente, a validação no lado do servidor é requerida. JavaScript auxilia de maneira agradável. Se você busca segurança, pense primeiro em todas as possibilidades de validações no lado do servidor e só então valide com JavaScript.

Livre tradução de JavaScript: It's Just Not Validation!
Adaptado por Anderson Dias

O Internet Explorer leva em conta não a altura indicada de um elemento, mas sim as alturas dos elementos desse elemento.

Com o código abaixo é possível fazer com que a altura indicada em porcentagem para uma DIV seja respeitada no Internet Explorer, ou seja, se uma DIV é pra ter 100% de altura, então ela terá!

Testei este código no Internet Explorer, Firefox e Opera, funcionou em todos. Provável que funcione para qualquer nevegador.

<style type="text/css">
html {
height: 100%;
}
body {
margin:0;
padding:0;
height:100%;
}
#camadaTeste {
min-height:100%;
height:auto;
width:100px;
background:#FFCC00;
}
/* Para Internet Explorer */
* html #camadaTeste {
height:100%;
}
</style>

<div id="camadaTeste">Conteúdo</div>


UPDATE

#camadaTeste: removida a propriedade height:100% e acrescentada min-height:100%; height:auto;
Acrescentada a correção para casos de conteúdo extenso que necessitem de redimensionamento automático:

/* Para Internet Explorer */
* html #camadaTeste {
height:100%;
}


Valeu "Anônimo" pela observação!

Utilizando folhas de estilo CSS é possível centralizar uma DIV verticalmente e horizontalmente na tela, independente da resolução que está sendo usada. Segue o código e posteriormente a explicação.

#idCamada {
background:#FF0000;
position:absolute;
left:50%;
top:50%;
margin-top:-150px;
margin-left:-300px;
width:600px;
height:300px;
}


Com o código CSS acima é possível centralizar horizontalmente e verticalmente uma DIV. Basta criar a DIV <div id="idCamada">Conteúdo</div>.

A margem esquerda margin-left deve assumir o valor negativo da metade da largura width, ou seja, como width é 600, margin-left assume o valor -300. O mesmo se aplica à margem superior margin-top em relação à sua altura. Sendo a altura 300, margin-top assume o valor -150 (atente para o valor negativo).

sexta-feira, 28 de dezembro de 2007

Barra de Favoritos do Firefox com Múltiplas Linhas

Por padrão o Firefox exibe apenas uma linha na barra de favoritos. Existe uma forma na qual é possível habilitar várias linhas para a barra de favoritos do Firefox.

Para fazer com que o Firefox tenha mais de uma linha na barra de favoritos, é necessário criar um arquivo chamado userChrome.css dentro do diretório chrome na pasta onde o Firefox foi instalado. Dentro do arquivo userChrome.css é inserido o seguinte código:


#bookmarks-ptf
{
display:block;
}
#bookmarks-ptf toolbarseparator
{
display:inline;
}

Feito isso, reinicie o Firefox e adicione os endereços à barra de favoritos.

segunda-feira, 17 de dezembro de 2007

O (Des) conhecimento da Televisão

Em reportagem do dia 16/12/2007 o Fantástico (programa dominical da Rede Globo) mostra dados e fraudes em comércio eletrônico e ao fim da reportagem aponta dicas para escapar de tais golpes.

A sugestão dada pelo programa é a de que só se compre em sites que apresentem no endereço a seqüência HTTPS, como o próprio programa diz "se a página for segura tem que começar com HTTPS".

Durante a reportagem é informado ao telespectador que só compre em sites que apresentem um cadeado e esteja em HTTPS ("na hora da compra, deve aparecer um cadeado na barra inferior no navegador").

O problema está justamente aí, "na hora da compra" é muito subjetivo, cada pessoa pode ter uma definição própria do que seria a "hora da compra". Acessar a página inicial do site já é considerada "hora da compra"? Escolher um produto? Confirmar dados pessoais? Confirmar compra e ser redirecionado para o site do banco ou meio de pagamento escolhido? Essas são apenas algumas das interpretações para "hora da compra".

Na verdade essa reportagem do Fantástico só serviu para desinformar o povo. Na realidade, só se usa HTTPS (conexão segura) quando é realmente necessário, ou seja, quando há transação com dados sigilosos ou que exijam autenticação entre servidor e cliente. O simples fato de navegar em um site não exige HTTPS, uma vez que essa utilização implica em um processamento a mais, que é a encriptação e a decriptação dos dados, além de não ficarem guardados em cache, o que significa percorrer todo o caminho entre o servidor e o cliente a cada pedido (navegação mais lenta).

Do jeito que o Fantástico falou, só o fato de não ter o cadeado ou não estar em HTTPS, independente de qual página ele está visitando, já faz com que o site não seja seguro, o que é errado. Sites apenas em HTTP podem ter certificado digital para conexão segura (via SSL) mas que é usado apenas quando necessário (transferência de dados sigilosos ou que necessitem autenticação entre cliente e servidor).

Para o usuário pouco importa quando é necessário conexão segura (HTTPS), do jeito que mostrou a reportagem, ele vai querer entrar no site e de cara ver um HTTPS e um cadeado!

Resumindo, a televisão desinforma e quem paga o pato somos nós!

domingo, 16 de dezembro de 2007

Aumentar Tempo de Execução no PHP

O PHP por padrão determina um tempo de 30 segundos para a execução de um script. Caso o script não possa ser processado neste tempo, ele é então encerrado.

No entanto há uma forma de aumentar este tempo sem que tenha necessariamente que mexer nos arquivos de configuração do PHP. Existe a função ini_set, que define o valor de uma opção de configuração indicada. A opção de configuração irá manter o novo valor durante a execução do script e será restaurado ao final da execução do script. Nem todas as opções disponíveis podem ser modificadas usando a função ini_set. Há uma lista de todas as opções disponíveis no PHP apêndice.

Voltando ao assunto, para alterar o tempo de execução de um script no PHP basta alterar o valor da variável max_execution_time para o tempo desejado, por exemplo:

<?php
ini_set("max_execution_time", 60);
?>
Dessa forma o tempo de execução de um script PHP passou de 30 para 60 segundos.

O Documento de Requisitos é criado a partir das necessidades dos stakeholders. Ele reflete as funcionalidades esperadas no sistema.

Aqui apresento um modelo detalhado de especificação de Requisitos Funcionais. A especificação dos Requisitos Não-Funcionais pode seguir a mesma idéia.

Disponibilizo o mesmo modelo em 3 formatos diferentes de arquivo:

  1. Documento no formato DOC (61Kb)
  2. Documento no formato ZIP (11Kb)
  3. Documento no formato PDF (122Kb)
Lembrando que este é um modelo básico que deve ser adaptado às necessidades de cada projeto.