Selecionar registros duplicados no banco de dados

Para localizar linhas duplicadas no MySQL você pode utilizar Having.

Exemplo abaixo:

SELECT 
	COUNT(*) AS contador,
	campo_desejado
FROM
	tabela
GROUP BY
	campo_desejado
HAVING
	COUNT(*) > 1

Desta forma, a coluna campo_desejado trará o valor que está duplicado e a coluna contador trará a quantidade de vezes que o valor se repete.

Simples assim!

Principais atributos para manipulação de objetos em JavaScript

Pensei em fazer este blog quando vi há muito tempo atrás uma tabela parecida com esta. Esta tabela representa um conteúdo que eu de tempos em tempos necessito dar uma olhada e ao mesmo tempo está organizada de uma maneira com que eu consiga buscar o que eu preciso de forma fácil e rápida; assim como todo o conteúdo deste blog.

Os principais atributos para manipular os objetos em JavaScript são:

Propriedade Tipo Descrição
nodeName String O nome do nó (tag)
nodeValue String O valor do nó
nodeType Number O tipo do nó (elemento, texto, comentário…)
parentNode Node O elemento pai
childNodes NodeList A coleção de nós filhos
firstChild Node O primeiro filho. null se não existir
lastChild Node O último filho. null se não existir
previousSibling Node O irmão anterior
nextSibling Node O irmão seguinte
attributes NamedNodeMap A coleção de atributos
ownerDocument Document O documento a que pertence o nó

Alternativa para a função LAST_DAY do MySQL

No MySQL, existe a simpática função LAST_DAY(). Como o nome sugere, ela pega o last day, o último dia do mês, de acordo com a data passada por parâmetro.

Ela é ótima para isso; ela funciona; e funciona bem!

Mas há um pequeno detalhe: LAST_DAY() está disponível a partir do MySQL 4.1.1.

A maioria das pessoas que leem este post, nunca enfrentaram e nem nunca precisarão enfrentar este problema. Porém, existem alguns desbravadores (como eu), que já passaram por isso (ou vão passar), já precisaram pegar o último dia do mês (ou vão precisar), em um servidor precário, onde existia um MySQL inferior ao 4.1.1.

São nestas horas que se consegue mostrar a criatividade!

Criei então uma alternativa ao LAST_DAY(), que também funciona muito bem, só não é tão simples. Aprecie:

DAYOFMONTH(DATE_SUB(CONCAT(YEAR(dt_nascimento),'-',MONTH(DATE_ADD(dt_nascimento,INTERVAL 1 MONTH)),'-01'),INTERVAL 1 DAY))

Hacks de CSS para todos os principais navegadores

Hacks de CSS são códigos especiais que são colocados no CSS para que determinada regra funcione apenas em determinado navegador.
Aqui está uma lista de hacks para os seguintes navegadores:

Hack para o Internet Explorer 6 (IE6)
Underline na frente do estilo. Exemplo:

ul li {
      _color:#F0F; 
}

Hack para o Internet Explorer 6 e Internet Explorer 7 (IE6/IE7)
Asterisco na frente do estilo. Exemplo:

ul li {
      *color:#F0F; 
}

Hack para o Internet Explorer 7 somente (IE7)
Deve-se aplicar o Hack acima para IE6 e IE7 e após este, aplicar o Hack IE6, retirando a propriedade. Exemplo:

ul li {
      color:#000; /* Cor preta para todos os navegadores */ 
      *color:#F0F; /* Cor rosa para o IE7 */  
      _color:#000; /* Cor preta para o IE6 */
}

Hack para o Internet Explorer 8
“Bonecão-do-posto” no final do parâmetro (é o número 0 e não a letra O). Exemplo:

ul li {
      color:#F0F\0/;
}

Hack para o Internet Explorer 9
Envolver a regra com a linha de código @media all and (min-width:0) e acrescentar o “bonecão-do-posto” no final do parâmetro. Exemplo:

@media all and (min-width:0) {
      ul li {
            color:#F0F\0/;
      }
}

Hack para Firefox
Envolver a regra com a linha de código @-moz-document url-prefix(). Exemplo:

@-moz-document url-prefix(){
      ul li {
            color: #F0F; 
      }
}

Hack para Chrome e Safari
Envolver a regra com a linha de código @media screen and (-webkit-min-device-pixel-ratio:0). Exemplo:

@media screen and (-webkit-min-device-pixel-ratio:0){
      ul li {
            color:#F0F;
      }
}

Hack para Opera
Envolver a regra com a linha de código @media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0). Exemplo:

@media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0)
{
      ul li {
            color: #F0F; 
      }
}

Observação: Na minha modesta opinião, todas as coisas podem ser feitas em todos os navegadores sem o uso de hacks (com raras exceções). Mas isto, somente a experiência e o tempo podem dar a capacitação.

Buscar registro anterior e próximo no MySQL

A necessidade é a seguinte: Preciso pegar o id anterior e o próximo id de certo registro em questão; necessário em um blog, por exemplo. Infelizmente não existem no MySQL as funções NEXT() e PREV()… Poderiam existir não é?

Mas, não existindo, me obrigou a pesquisar. Não encontrando nada de bom por aí, me obrigou a pensar e encontrei a solução, utilizando subquerys. Considerando que 2 é o id atual em questão, fica assim:

SELECT * FROM tabela WHERE id = 2 OR id = (SELECT MAX(id) FROM tabela WHERE id < 2) OR id = (SELECT MIN(id) FROM tabela WHERE id > 2)

No caso de serem ids sequenciais, o retorno seriam os dados cujo ids fossem 1, 2 e 3. Se por exemplo o id 3 tivesse sido excluído, o retorno então seria 1, 2 e 4… E assim por diante.

Foi útil para você?

Lista completa de manipuladores de eventos (Event Handler)

Trago aqui a lista completa dos manipuladores de eventos do Javascript e a/ou atributos do XHTML, com sua definição:

  • onAbort – É acionado quando o usuário cancela o carregamento de uma imagem.
  • onBlur – É acionado quando o usuário sai de um elemento do formulário, janela ou frame (quando este perde o foco).
  • onChange – É acionado quando o usuário sai de um elemento do formulário com o seu valor alterado (quando este perde o foco com o sofrimento de mudanças).
  • onClick – É acionado quando o elemento de um formulário ou link é clicado (pressionado).
  • onDblClick – É acionado quando o elemento de um formulário ou link recebe clique-duplo.
  • onDragDrop – É acionado quando o usuário solta um objeto (uma imagem, por exemplo) dentro da janela do navegador.
  • onError – É acionado quando o carregamento de uma imagem ou documento não é completado (por causa de um erro).
  • onFocus – É acionado quando um elemento de um formulário, janela ou frame é selecionado (recebe foco).
  • onKeyDown – É acionado no momento em que o usuário aperta (pressiona) uma tecla.
  • onKeyPress – É acionado quando o usuário pressiona ou mantém uma tecla pressionada.
  • onKeyUp – É acionado no momento em que o usuário solta uma tecla.
  • onLoad – É acionado quando o navegador termina o carregamento da janela ou dos frames.
  • onMouseDown – É acionado no momento em que o usuário pressiona um botão do mouse.
  • onMouseMove – É acionado quando o usuário move o cursor.
  • onMouseOut – É acionado quando o cursor do mouse sai de um link ou uma área.
  • onMouseOver – É acionado quando o cursor passa por cima (se move sobre) um objeto ou uma área.
  • onMouseUp – É acionado quando o usuário solta o botão do mouse.
  • onMove – É acionado quando o usuário ou um script move uma janela ou frame.
  • onReset – É acionado quando o usuário reinicia um formulário (“reseta”, apaga o preenchimento de todos os campos).
  • onResize – É acionado quando o usuário ou script redimensiona uma janela ou frame (altera o tamanho).
  • onSelect – É acionado quando o usuário seleciona parte de um texto de um input ou textarea.
  • onSubmit – É acionado quando o usuário envia (“submita”) o formulário.
  • onUnload – É acionado quando o usuário sai de um documento.

Fonte: irt.org

Melhor forma de redirecionar de uma página para um outro endereço

Existem algumas formas simples de se redirecionar um site para uma outra url. Esta técnica é útil em várias situações, como por exemplo, voltar para a página de listagem, logo após salvar uma informação.

Vamos para as formas de se fazer; a primeira forma é utilizando o simples HTML, através da tag <meta>, combinada com o atributo http-equiv=”refresh”:

<meta http-equiv="refresh" content="5 url=https://thiagobfiorenza.wordpress.com">

O atributo content=5 é o tempo (5 segundos) de espera para ser redirecionado. Geralmente neste tempo, coloca-se uma mensagem para que o usuário veja, do tipo “O site está sendo redirecionado em 5 segundos. Caso não aconteça clique aqui.”

A segunda solução é a seguinte, utilizando Javascript:

<script type="text/javascript">
location.href = "https://thiagobfiorenza.wordpress.com";
</script>

O único requisito que exige essa forma é que o navegador do usuário possua o Javascript habilitado.

A última e minha preferida para este fim (redirecionar sem espera de tempo) é utilizando o clássico PHP:

header('location:https://thiagobfiorenza.wordpress.com'); die();

O único cuidado que se deve ter para utilizar-se do PHP para o redirecionamento é que este deve vir antes de qualquer código escrito na tela (echos, prints ou códigos HTML). O die() que aparece no final deste código é para garantir que o header() seja processado no exato momento em que foi chamado, e não após todo o processamento da página.

E, como diriam os desenhos do Pernalonga, That’s all Folks (Isto é tudo, pessoal)!

Melhor forma de se obter extensão de arquivo em PHP

Em algum momento na sua vida de programador você terá que obter / encontrar / separar / isolar a extensão de um certo arquivo (não estou me referindo ao mime-type dos arquivos neste post). Existe pelo menos 3 formas práticas de solucionar este caso.

A primeira, e talvez a mais utilizada, é com a função substr(), que pega os caracteres de um texto a partir da posição das letras (valor negativo, conta de trás para frente). A aplicação se faz desta forma:


$arquivo = 'nome.txt';

echo substr($arquivo, -3);

//escreve 'txt'

O problema de utilizar este modo é que quando a extensão do arquivo for de mais de três caracteres, a extensão fica cortada:


$arquivo = 'nome.mpeg';

echo substr($arquivo, -3);

//escreve 'peg'

A adaptação para este problema ficaria assim:


$arquivo = 'nome.mpeg';

$arquivo = substr($arquivo, -4);

if($arquivo[0] == '.'){

      $arquivo = substr($arquivo, -3);

}

echo $arquivo;

//escreve 'mpeg'

Porém, ainda assim, se existir uma extensão com mais de quatro caracteres, esta solução não funciona.

A segunda forma é utilizando a função strrchr() que retorna o que vem depois de um caractere estipulado, ficando:


$arquivo = 'nome.mpeg';

echo strrchr($arquivo, '.');

// escreve '.mpeg'

Se o objetivo é trazer a extensão juntamente com o ponto, esta é a melhor forma. Porém, se não é este o objetivo, deve-se contar então com o auxílio da função str_replace():


$arquivo = 'nome.mpeg';

echo str_replace('.','',strrchr($arquivo, '.'));

// escreve 'mpeg'

E finalmente, a minha forma preferida de se adquirir a extensão de um arquivo. É através da função explode() para separar o nome do ponto e a função end() para encontrar a última posição do array formado, que no caso é o que vem depois da vírgula:


$arquivo = 'nome.mpeg';

echo end(explode(".", $arquivo));

//escreve 'mpeg'

Tanto a segunda quanto a terceira solução funcionam muito bem e podem ser usadas junto com a função strtolower() que transforma o nome inteiro do arquivo para letras minúsculas, ideal para urls:


$arquivo = 'Nome.MPEG';

echo strtolower(end(explode(".", $arquivo)));

//escreve 'mpeg'

Na maioria dos sistemas não Windows (como as distribuições Linux), os arquivos não necessitam possuir necessariamente uma extensão formal com ponto. Neste caso o único meio de se obter o tipo do arquivo é através de seu mime-type, que será visto em um post futuro.

Até a próxima questão, abraços!

Alô Mundo…

Olá, a partir de agora você poderá encontrar soluções simples para aquelas questões que geralmente todo desenvolvedor web faz de uma forma diferente ou sempre se perguntam como fazer, ou ainda, a MELHOR forma e mais SIMPLES de se fazer.

Simplicidade em XHTML, CSS, PHP, JavaScript… jQuery, Programação Orientada a Objetos, entre outros.

Até o primeiro post. Abraço!