sexta-feira, 6 de novembro de 2009

Arquivo .php não é interpretado pelo Apache

Olá pessoal,

Está aqui uma solução encontrada para um problema que pode ser muito comum quando há a instalação do PHP5 + Apache2.2 no Linux, que é o não reconhecimento dos arquivos .php. Ao executar o caminho do arquivo (ex.: http://localhost/index.php), o browser abre uma janela pedindo para abrir ou salvar o arquivo.

No meu caso, a distribuição usada foi Debian (mas serve para Ubuntu também).

Segue a solução (digitar no Terminal):

sudo a2enmod php5
sudo /etc/init.d/apache2 restart

terça-feira, 27 de outubro de 2009

Usando as funções indexOf e charAt no javascript

Olá a todos!

Iniciamos hoje com um exemplo prático usando as funções indexOf() e chatAt() do Javascript.

  1. Validando uma PLACA de CARRO:
     /* Primeiramente, devemos saber que uma placa de carro deve ter exatamente 7 caracteres (os 3 primeiros devem letras e os 4 últimos devem ser números). Iremos fazer uma função chamada "validaPlaca", que pega como parâmetro uma String qualquer e verifica se a mesma é ou não uma placa válida. */

var validaPlaca = function(placa) {
        try {
            var letras = "abcdefghijklmnopqrstuvwxyz"; // declaramos as letras válidas
            var numeros = "0123456789"; // declaramos os números
            placa = placa.toLowerCase(); // deixamos com que a String fique toda em letras-minúsculas para padronizar a validação

            if (placa.length != 7) { // placa deve conter exatamente 7 caracteres!
                throw "A placa digitada não contêm 7 dígitos! Verifique!"; //lançamento de exceção usando throw
                return false;
            }

            var tresPrimeiros = placa.substr(0,3); // pegamos os 3 primeiros caracteres da string, para verificar se são letras
            var quatroUltimos = placa.substr(3,4); // pegamos os 4 últimos caracteres da string, para verificar se são números

            for (var i = 0; i < tresPrimeiros.length; i++) {
                if (letras.indexOf(tresPrimeiros.charAt(i)) < 0) { //verificamos com chatAt() cada um dos 3 caracteres, e com indexOf(), se o caracter está contido na variável "letras"
                    throw "Os três primeiros caracteres devem ser letras! Verifique!";
                    return false;
                }
            }

            for (var i = 0; i < quatroUltimos.length; i++) {
                if (numeros.indexOf(quatroUltimos.charAt(i)) < 0) { //verificamos com chatAt() cada um dos 4 caracteres, e com indexOf(), se o caracter está contido na variável "numeros"
                    throw "Os quatro últimos caracteres devem ser números! Verifique!";
                    return false;
                }
            }

            return true;
        } catch (e) {
            alert(e); // mostramos a possível exceção na tela
        }
    }


Copie esta função e cole em um arquivo .html para testar.
Logo em seguida da função, coloque o seguinte código:
var digita = prompt("Digite uma placa:");
    if (validaPlaca(digita)) {
        alert("A placa é válida! ");
    }
  

quinta-feira, 22 de outubro de 2009

Retorno do Ajax vem com problema de codificação no IE 6

Estou fazendo um sistema da faculdade em PHP, usando AJAX em algumas consultas. Ao requisitar a função Ajax, a página do "response" vinha com a codificação correta no Firefox, porém vinha falhada no IE; ao invés dos acentos, vinham símbolos.

Para funcionar no Firefox, eu havia usado a seguinte linha na função Ajax, antes de chamar XMLHttp.send(null);

XMLHttp.overrideMimeType("text/xml;charset=iso-8859-1");

 Porém, como eu disse, essa alternativa não funcionou para o IE 6, causando um erro no Javascript.

A única solução que encontrei foi desistir de arrumar a codificação pelo Javascript ou pelo HTML, e sim configurar na própria página do response, pelo PHP, usando a seguinte linha (no início da página):

header("Content-Type: text/html; charset=iso-8859-1",true);

Dúvidas, só deixar um comentário!

quinta-feira, 8 de outubro de 2009

Retornar único resultado com a função MAX

Para retornar um registro todo do banco de dados PostgreSQL, com um dos campos com seu valor máximo, podemos usar a função de agregação MAX, na cláusula WHERE na nossa consulta.

Por exemplo:
Tabela tbl_alunos
matricula
nome
nota
1
Jose da Silva
72.6
2
Fulano da Silva Sauro
55.2
3
Beltrano dos Santos
97.2

Quero retornar o aluno com nota máxima, mas não somente a nota, quero saber sua matrícula e seu nome também.

A consulta fica dessa maneira:
SELECT * FROM tbl_alunos WHERE nota = (SELECT MAX(nota) FROM tbl_alunos);

Mais informações sobre a função MAX no PostgreSQL em: http://www.postgresql.org/docs/8.1/static/tutorial-agg.html

Imagens PNG no IE

Já se deparou com imagens PNG que no IE aparecem com fundo preto ou cinza?! o.O Isso acontece porque o Internet Explorer não consegue interpretar as camadas de transparência da imagem .png (quando há transparência).

Esse site resolve o problema, tem um scriptzinho para download que você inclui na sua página para as imagens aparecerem normalmente: http://homepage.ntlworld.com/bobosola/index.htm

Só não funciona se as imagens PNG estão incluídas no seu arquivo CSS (com background-image, por exemplo)... Isso eu não consegui resolver até hoje. Sei que tem umas formas de "amenizar" o problema, mas agora não estou lembrada. Qualquer hora eu posto aqui!

creatElement não funciona no IE

Como é esperado, o IE sempre dá uma pauleira desgraçada na hora do desenvolvimento, ainda mais quando o assunto é Javascript.

Há um tempo atrás, no meu outro trabalho, tive que criar uma tag input do HTML a partir de um Javascript, segundo as especificações DOM para ECMAScript. No Firefox, sem problemas. Mas o IE não conseguia fazer o mesmo. (O teste foi feito no IE 6, 7)...

Eis o problema:
<script type="text/javascript">
  var novoCampo = document.createElement('input');
  novoCampo.setAttribute('name', 'endereco');
  //setando outros atributos...
  //adicionando no DOM
  document.getElementsByTagName('form')[0].appendChild( novoCampo );
</script>
 O IE não seta o name! ¬¬
A solução pra corrigir esse bug é verificar qual browser que a pessoa está usando e fazer uma verificação:

<script type="text/javascript">
  //verificação p/ ver se é IE ou Opera 
  var isOpera, isIE = false;
  if(typeof(window.opera) != 'undefined'){isOpera = true;}
  if(!isOpera && navigator.userAgent.indexOf('Internet Explorer')){isIE = true);

  var novoCampo = null;
  if(!isIE){
    novoCampo = document.createElement('input');
    novoCampo.setAttribute('name', 'endereco');
  } else {
    novoCampo = document.createElement('<input name="endereco"/>');
  }
  //setando os outros atributos do input...
  //adicionando no DOM
  document.getElementsByTagName('form')[0].appendChild( novoCampo );
</script>

Toda solução pro IE fica meio porca, mas, assim funfa!

Beijos, até a próxima.

Introdução

Olá a todos!

Resolvi fazer esse blog para compartilhar meu conhecimento (e minhas lutas!) do dia-a-dia com a programação ou qualquer coisa relacionada a desenvolvimento de softwares. Aqui vou colocar algumas dicas, alguns problemas que encontrei e como solucioná-los. Um dia, você pode também se deparar com a mesma situação que eu!

Beijos e até!