terça-feira, 21 de janeiro de 2014

Exportando um ou mais registros no MySql com mysqldump

Ás vezes a gente precisa exportar só um registro de uma tabela.
Dá pra fazer assim:

 mysqldump -t -u usuario -psenha banco tabela --where=id_tabela=666 > ~/insert.sql  

Só pra lembrar: o parâmetro -p recebe a senha 'colada' nele, por exemplo, se a senha for 'estrogonofe', fica assim:

 mysqldump -t -u usuario -pestrogonofe banco tabela --where=id_tabela=666 > ~/insert.sql  

E no final, onde tem '~/insert.sql', é onde vai ser gerado o arquivo com o comando sql pra dar o insert no banco.

quarta-feira, 18 de dezembro de 2013

Trocando o wallpaper do Windows usando linha de comando

Ingredientes: Irfanview, uma pasta com imagens, e Windows.
1 - Instale o Irfanview. Talvez precise instalar o Windows antes.

2 - Crie um arquivo com a extensão .bat, com o conteúdo abaixo:

 dir D:\Wallpapers /s /b *.jpg > list.txt  
3 - Execute este arquivo para gerar a lista de imagens.

4 - Crie outro arquivo .bat, com o conteúdo abaixo. Esse arquivo é quem dá o comando pro Irfanview trocar a imagem:

 i_view32.exe /filelist=D:\wallpapers\list.txt /random /wall=0 /killmesoftly  

Happy festivus!

sexta-feira, 6 de dezembro de 2013

Plugin para 'zebrar' tabelas ou listas com jQuery

 (function( $ ){  
   $.fn.zebrar = function(options) {  
   var defaults = {  
     'par' : 'lightgrey',  
     'impar' : 'white'  
   };  
   var settings = $.extend( {}, defaults, options );  
   return this.each(function(index,elemento) {  
     if((index % 2)==0)  
     {  
       $(this).css({ background: settings.par });  
     }else{  
       $(this).css({ background: settings.impar });  
     }  
   });  
   };  
 })( jQuery );  

Utiliza assim:

 <script src="js/zebrar.js"></script>  
 <script>  
      $(function(){  
           $('ul li').zebrar();  
      )  
 </script>  
 <style>  
 ul{  
      list-style-type:none;  
      padding:0;  
      margin:0;  
 }  
 ul li{  
      display:block;  
 }  
 </style>  
 <ul>  
      <li><a href="#">Nunc tincidunt</a></li>  
      <li><a href="#">Proin dolor</a></li>  
      <li><a href="#">Aenean lacinia</a></li>  
 </ul>  

Também dá pra passar os parâmetros para as cores das linhas, assim:

 $('ul li').zebrar({par:'blue',impar:'red'});  

Nota: deixar de ser preguiçoso e usar o github pra códigos grandes.

terça-feira, 3 de dezembro de 2013

Verificando se a variável existe em javascript

Existem aproximadamente 362,57 jeitos diferentes de se verificar se uma variável em javascript existe ou não.
Esse é o que eu vou usar:

 if (typeof variavel!== "undefined")  

Pronto, agora não preciso mais pesquisar cada vez que precisar disso.

quinta-feira, 31 de outubro de 2013

Redirecionando o usuário para um subdomínio

No .htacces na pasta pública:

 RewriteEngine on  
 RewriteCond %{HTTP_HOST} ^dominio.com [NC]  
 RewriteRule ^(.*)$ http://www.dominio.com/$1 [R=301,L]  

sexta-feira, 18 de outubro de 2013

Avisar se o usuário esqueceu de gravar o formulário

Primeiro, criamos uma variável:
 var alguem_mexeu_no_meu_queijo = false;  

No evento change de qualquer elemento, alteramos essa variável, para sabermos que o usuário mexeu no formulário:
 $('select, input, textarea').change(function(){  
      alguem_mexeu_no_meu_queijo = true;  
 });  

Depois, no evento beforeunload da janela, precisamos ver se a variável foi alterada.
Se sim, damos o alerta, perguntando se ele quer mesmo sair.
 window.onbeforeunload = function(){  
      if(alguem_mexeu_no_meu_queijo==true)  
      {  
           return 'Alguém mexeu no meu queijo.';  
      }  
 }  


Ah, quando o usuário envia o formulário, precisamos setar a variável como true, para que não apareça o alerta.
Se tu tiver usando o jquery validation, fica assim:
 $('#form').validate({  
           , submitHandler: function(form) {  
                alguem_mexeu_no_meu_queijo = false;  
                form.submit();  
           }  
      });  

quinta-feira, 17 de outubro de 2013

Aumentando o tamanho do array _POST

No .htaccess, assim:
php_value max_input_vars 3000

Claro que o jeito certo é não deixar um formulário com 1000 inputs, que é o valor padrão, mas é mais fácil fazer isso do que revisar mais scripts jurássicos feitos por terceiros e quartos.

sexta-feira, 11 de outubro de 2013

Relógio em javascript

Um pequeno relógio em javascript:

 <form name="crono" style="margin:0px;">  
      <input id="relogio" width="30" />  
      <script language="JavaScript">  
           var data = new Date();  
           function data_inicial(ano,mes,dia,hora,minuto,segundo){  
                data.setFullYear(ano)  
                data.setMonth(mes-1)  
                data.setDate(dia)  
                data.setHours(hora)  
                data.setMinutes(minuto)  
                data.setSeconds(segundo)  
           }  
           function zeros(number) {  
                if (number < 10) {   
                     number = ("0"+number);   
                }  
                return number;  
           }  
           function Relogio() {  
                var formato = zeros(data.getDate())+'/'+zeros(data.getMonth()+1)+'/'+zeros(data.getFullYear())+' '+zeros(data.getHours())+':'+zeros(data.getMinutes())+':'+zeros(data.getSeconds());  
                data.setSeconds(data.getSeconds()+1)  
                document.getElementById('relogio').value = formato;  
                setTimeout("Relogio()",1000);  
           }   
           data_inicial(2013, 09, 12, 15, 09, 05); //comente para começar com a data atual 
           Relogio();  
      </script>  
 </form>  

Utilizando jquery-ui tabs + jquery validation plugin

Quando o plugin encontra um elemento com erro, o elemento automaticamente ganha foco.
Mas quando o elemento está em uma aba que não está habilitada no momento, não acontece nada.

Pra que o elemento ganhe foco e a aba passe a ser a ativa, segue a função:
 $('#formulario').validate({  
           ignore: "",//para validar os elementos que estão nas abas desabilitadas  
           highlight: function(element, errorClass, validClass) {  
                var div = $(element).parents('.ui-tabs-panel').attr('id');//encontra a div em que está o elemento inválido  
                var index = $('#tabs ul li a').index($('a[href="#'+div+'"]')); //encontra o indice nos links  
                $("#tabs").tabs( "option", "active", index ); //seta a aba como ativa  
           }  
      });  


quinta-feira, 3 de outubro de 2013

Quando se usa o editor tinyMCE junto com o jquery.validate, acontece um problema que o usuário precisa clicar duas vezes no botão de salvar, por um motivo que não lembro qual é.

Pra resolver isso, precisa chamar a função triggerSave no clique no botão de enviar, mais ou menos assim:

 $('button.salvar').click(function(){  
     if (tinyMCE) tinyMCE.triggerSave();  
 });  

terça-feira, 17 de setembro de 2013

Validando datas em pt-br com jQuery Validate

assim:
 $.validator.addMethod(  
      "date",  
      function(value, element) {  
           var check = false;  
           var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;  
           if( re.test(value)){  
                var adata = value.split('/');  
                var gg = parseInt(adata[0],10);  
                var mm = parseInt(adata[1],10);  
                var aaaa = parseInt(adata[2],10);  
                var xdata = new Date(aaaa,mm-1,gg);  
                if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) )  
                     check = true;  
                else  
                     check = false;  
           } else  
                check = false;  
           return this.optional(element) || check;  
      },  
      "Insira uma data válida"  
 );  

sexta-feira, 16 de agosto de 2013

Escrevendo a data e hora atuais do servidor

Mexer com datas e php parece ser uma arte, algo que poucos dominam.

Eu, por exemplo, não sou um deles. Mas eu vou tentando.

Primeiro, precisamos setar o locale do servidor para nosso querido idioma:

 setlocale(LC_ALL, 'pt_BR.utf8'); 


Se o servidor for windows, só pra variar, tem que ser de um jeito diferente:
 setlocale(LC_ALL, 'ptb');  


Depois, usamos strftime pra escrever a data atual.

 echo strftime('%A, %d de %B de %Y, %H:%M');  

O resultado fica:
sexta-feira, 16 de agosto de 2013, 15:02

segunda-feira, 15 de julho de 2013

Ou algo assim

Como todo mundo sabe, uma caipirinha se faz misturando limão, cachaça e gelo.
Se trocar a cachaça por vodca, a bebida muda pra 'caipiroska'.
Mas não deveria ser 'caipivodca'? Digo, de onde surgiu a 'roska'?
Talvez se a bebida fosse inventada pelo Paulinho Moska, poderia ser CaipiMoska, o que seria mais próximo de 'caipiroska' (e mais nojento também).

Se misturar saquê, fica 'caipisaquê'. Ou seja, qualquer porcaria que se misturar com limão e gelo, vira 'caipi'+algumacoisa. Logo, pepsi com limão seria 'caipsi', e com coca-cola, 'caipicoca' (ou 'caipicola').

Ou algo assim.

sexta-feira, 21 de junho de 2013

Setando cabeçalhos no Apache

Às vezes, o Internet Explorer decide ignorar os cookies em iframes.
Pra resolver isso, normalmente a gente seta os cabeçalhos p3p no php, assim:

 header('p3p: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');  

Mas pra isso funcionar, o arquivo com esse comando deveria ser chamado em todo o sistema, o que em sistemas macarrônicos dificilmente acontece.
Nesse caso, usamos o .htaccess do Apache, na pasta mais acima que puder:

 Header set p3p 'CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"'  

A resposta, para todas requisições abaixo da pasta que estiver o arquivo, sai assim:

 p3p:CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"  


Podemos, inclusive, setar nossos próprios cabeçalhos, pra, seilá, servir como um amuleto de boa sorte:

 SecretNumbers:4, 8, 15, 16, 23 42  



quarta-feira, 12 de junho de 2013

Trocando obrigatoriedade de campo com jQuery Validate

Temos um campo obrigatório e, ao lado dele, um checkbox que, se estiver marcado, faz com que o campo não seja obrigatório.

A regra fica assim:


 $("#form_cadastro").validate({  
           rules: {  
                senha: {  
                     minlength:8  
                },  
                repetir_senha: {  
                     equalTo: "#senha"  
                },  
                campo_obrigatorio: {  
                      required: function(element) {  
                          return $('#campo_checkbox:checked').length < 1  
                      }  
                }  
           }  
      });  

terça-feira, 21 de maio de 2013

Time is never on my side

Pegando uma data do banco, adicionando dias e retornando ela formatada:
 $vcto = new DateTime($item['data']);  //$item['data'] contém uma data no formato YYYY-MM-DD HH:mm:ss
 $vcto->modify('+1 month');  //período de tempo para adicionar
 echo $vcto->format('d/m/Y');  //escrevendo a data no formato d/m/Y

Não sei quem inventou que as datas tem que ser escritas com o ano na frente.
Acho que isso só faz sentido se o programador acabou de acordar de um coma de seilá, 5 anos, e a primeira coisa que ele fez foi consultar a hora no servidor usando a função NOW().

sexta-feira, 17 de maio de 2013

Dois jquery em um

Eu sempre esqueço como se utiliza a função append() do jQuery várias vezes seguidas, então lá vai:

 $('#senha')  
                .append(  
                     $('<li>').addClass('item')  
                     .append(  
                          $('<input>').attr({type:'password',name:'senha',id:'senha'})  
                     )  
                     .append(  
                          $('<label>').text('(preencha somente se quiser trocar)').addClass('obs')  
                     )  
                )  

Outra coisa,  é quando se cria um formulário de troca de senha.
Por padrão, o Chrome vai preencher o campo da senha automaticamente, mas nem sempre ele vai preencher o campo de repetir a senha.
Aí, pra não encher o saco do usuário, que teria que digitar a senha no campo de repetir-senha, a gente coloca um valor qualquer no campo de senha e no de repetir-senha:

 <input type="password" name="senha" id="senha" class="" value="$password" />  
 <input type="password" name="repetir_senha" id="repetir_senha" class="" value="$password" />  


Depois, com jQuery, a gente limpa o value desses campos. O detalhe é que não funciona se simplesmente fizer assim:

 $(document).ready(function(){  
      $('#senha,#repetir_senha').val('')  
 })  


Precisa dar um tempo após o evento ready, senão o Chrome vai perceber e o negócio não vai funcionar. Então, precisa usar o setTimeout, para dar um atraso na execução:
 $(document).ready(function(){  
      window.setTimeout("$('#senha,#repetir_senha').val('')",100);  
 })  

sábado, 11 de maio de 2013

História do Burrito

Nos tempos da revolução mexicana (1910 - 1921) no bairro da Bella Vista em Cd. Juarez, Chihuahua, México, havia um senhor de nome Juan Mendez que tinha uma barraquinha de comida típica mexicana perto do Rio Bravo. Esse rio separa a fronteira do México com os Estados Unidos. Do lado americano em El Paso, no bairro de Sunset Heights, viviam muitos mexicanos que haviam fugido da revolução. 

Algumas pessoas paravam à beira do Rio Bravo e conversavam com Juan. Perguntavam sobre as noticias da “Revolución” e elogiavam a sua comida. O cheiro da comida de Juan era tão gostoso que conseguia atravessar o longo rio.

Muitos mexicanos, saudosos da comida de sua terra natal, faziam encomendas a Juan. Para a comida não esfriar, ele teve a idéia de fazer tortillas de trigo grandes e colocar os recheios dentro dela (arroz, feijão, carne, etc.). Depois ele as enrolava em sacolas para mantê-las quentinhas. 

Os pedidos eram tantos que decidiu comprar um burro, pois só assim conseguiria cruzar o Rio Bravo. As comidas de Juan eram então transportadas nas costas do "burrito"

O sucesso foi tão grande que, com o tempo, começaram a chegar mexicanos e gringos de todas as partes do Texas perguntando pela comida do "burrito".
Foi assim que o invento de Juan Mendez cruzou a fronteira e encantou não somente seus conterrâneos, mas o mundo.