Arquivo da tag: Mysql

PHP: Converter formato de data brasilera para data internacional, mysql, etc….

A mais de 7 anos atras escrevi um post aqui no blog de como tratar as datas em formato brasileiro (dd/mm/YYYY) para gringolandia (YYYY-mm-dd). Este post já se tornou obsoleto, pois a partir do PHP 5.2 existe uma maneira mais mágica de fazer, a qual lhe apresento agora.

Basta instânciar o objeto, passando como parametro o formato que a data vai chegar, e logicamente, passar a data.

1
$date = DateTime::createFromFormat('d/m/Y', $_POST['date']);

Depois de receber a data em uma variavel, neste caso, atraves de um POST, o resto é so imprimir no formato que você indicar:

1
echo $date->format('Y-m-d');

Pronto, dica rápida … no mais, documentação:
http://php.net/manual/en/datetime.createfromformat.php

Esta tão facil de entender que vou explicar so porque eu sou chato. Tanto na hora de receber, quanto na hora de imprimir a data você pode usar qualquer formato, seja:

  • d/m/y
  • d-m-y
  • y/m/d
  • y-m-d
  • Y-m-d H:i:s
  • H:i:s
    • etc…
      • etc…
        • etc…

Outros métodos não menos eficiêntes, você confere aqui e aqui.

Se quiser saber sobre o desempenho de algumas destas funções, visite o blog do Beraldo, la tem um post mais completo sobre o assunto.

no mais, have fun!

Mysql – Desafio: Relacionar 3 tabelas e exibir informações no mesmo select

E ae galerinha, prontos para o desafio? Vamos la, primeiro vamos conhecer o banco de dados, segue abaixo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
--
-- Estrutura da tabela `categorias`
--

CREATE TABLE IF NOT EXISTS `categorias` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;

--
-- Extraindo dados da tabela `categorias`
--

INSERT INTO `categorias` (`id`, `nome`) VALUES
(1, 'legal'),
(2, 'alegre'),
(3, 'inteligente'),
(4, 'divertido'),
(5, 'sorridente'),
(6, 'engraçado');

-- --------------------------------------------------------

--
-- Estrutura da tabela `relacao`
--

CREATE TABLE IF NOT EXISTS `relacao` (
  `usuario` int(11) NOT NULL,
  `categoria` int(11) NOT NULL,
  UNIQUE KEY `usuario` (`usuario`,`categoria`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

--
-- Extraindo dados da tabela `relacao`
--

INSERT INTO `relacao` (`usuario`, `categoria`) VALUES
(1, 1),
(1, 5),
(1, 6),
(2, 2),
(2, 4),
(2, 5),
(3, 5),
(3, 6),
(4, 1),
(4, 4),
(4, 6);

-- --------------------------------------------------------

--
-- Estrutura da tabela `usuarios`
--

CREATE TABLE IF NOT EXISTS `usuarios` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `nome` varchar(100) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- Extraindo dados da tabela `usuarios`
--

INSERT INTO `usuarios` (`id`, `nome`) VALUES
(1, 'magno'),
(2, 'diogo'),
(3, 'daniel'),
(4, 'tayna');

Devidamente apresentado o banco de dados, vamos as explicações. Como da pra perceber, são 3 tabelas contendo respectivamente uma lista de categorias, uma lista de relacionamentos e uma lista de usuários. Mas porque três tabelas e não duas? Porque sim! ;P~ Porque cada usuário pode ter N categorias relacionadas.

Ai esta o desafio, fazer um select que mostre a lista de usuários (sem repetir o usuário) e suas categorias relacionadas em apenas uma linha (um select). Como por exemplo:

1
2
3
4
5
NOME | CATEGORIAS
----------------------------
magno | legal, sorridente, engraçado
diogo | alegre, divertido, sorridente
etc...

Prêmio: Uma caneca exclusiva da Brainatwork TI (enviamos para qualquer lugar do mundo)

Caneca Brainatwork TI

O desafio esta lançado… e não esqueça de preencher os comentários com seu e-mail correto.

have fun!

Retorno Automático de Dados do PagSeguro em PHP/MySQL (com produtos) – Versão 2.0

Enfim, como prometido a nova versão do Retorno de dados do Pagseguro. As maiores novidades ficaram por conta da utilização a nova URL do PagSeguro para validação e a captura completa dos produtos.

Agora ficou mais fácil a instalação do mesmo, basta baixar o script abaixo, descompactar e editar  o PagSeguroRetornoConfig.php inserindo os dados solicitados. Depois basta configurar o banco de dados Mysql e utilizar o arquivo SQL disponível para criar as tabelas.

Download do script de Retorno de Dados Automatico do Pagseguro 2.0

 

Você deve configurar a sua conta no PagSeguro para ativar o Retorno Automático de dados, para isso, entre no seu PagSeguro, nas opcao Preferencias > Retorno Automatico de Dados. Basta ativar a URL de retorno e colocar o endereço completo da URL do arquivo. Neste mesmo local é onde você vai gerar o seu Token, solicitada no arquivo de configurações.

Feito isso, o seu Retorno já esta funcional.

Para testar seu script não é preciso fazer um pagamento, basta abrir o arquivo TestarCompra.php colocar o seu e-mail e enviar para o seu FTP. Feito isso, é so acessar o arquivo, gerar uma compra aleatoria e escolher BOLETO BANCARIO para pagamento. Depois de confirmar a compra por boleto e aguardar o tempo solicitado, as suas tabelas já terão os dados da compra, bem como os produtos gerados.

Ps: Se você não é programador, não faça perguntas, peça um orçamento atraves do contato.

É isso ae! La pergunta?

Copiar dados de um tabela para outra em MySQL

Hoje precisei copiar dados de uma tabela para outra. Mas como fazer isso facilmente atraves de linha de comando? … vou dizer, mas antes vamos as premissas:

* Não quero registros repetidos, neste caso o e-mail

* Não quero todos os dados da tabela Servidor (onde vou pegar os dados).

* So quero os e-mails começados com a letra “a”.

Então, vamos a dica:

1
INSERT INTO tabela2  (nome, email) SELECT nome, email FROM tabela1 WHERE (email LIKE 'a%') GROUP BY email

Logico que os dados acima são fictícios, mas funciona. A explicação basica é:

1- O comando INSERT como outro qualquer na tabela2 (a que vai receber os dados)

2- Em seguida vem um SELECT normal tambem, com os campos que desejo importar na mesma ordem que eu coloquei para inserir.

3- O WHERE para a condição dos e-mails começando com a letra “a”.

4- O GROUP BY para não repetir os e-mails. Poderia usar tambem o DISTINCT ou similar, fica a critério do fregues.

Se tiver alguma duvida sobre MySQL pode perguntar, se eu souber irei responder com certeza.

Retorno Automático PagSeguro em PHP/MySQL funcionando

ATENÇÃO: Já esta disponivel a versão 2.0 deste script, mais segurança e agora coletando informações dos produtos, clique aqui.

Que o PagSeguro é realmente um dos melhores meios de pagamento da web, isso ninguem dúvida. Mas como integra-lo ao seu sistema de e-commerce? O site de ajuda do PagSeguro tenta ser claro e explicativo, mas o fato é, o script disponível no site simplismente não funciona.

ATENÇÃO: Já esta disponivel a versão 2.0 deste script, mais segurança e agora coletando informações dos produtos, clique aqui.

Vamos aos erros…

No script PHP do PagSeguro eles usam uma função que se chama, tep_not_null() que não é uma função nativa do PHP, ou seja, o seu script não irá funcionar. Esta função pode ser encontrada no OsCommerce (que não recomendo) ou em outros scripts pela internet. Bola fora, porque este exemplo dado por eles serve justamente para implantar em outros sistemas, ja que os modulos para esses scripts prontos estão disponíveis no proprio site.

Erro apresentado: Fatal error: Call to undefined function tep_not_null() in /teste/pagseguro.php on line 53

… existem outras melhorias que podem ser feitas no script PHP oferecido pelo PagSeguro, não irei comentar, irei implementar mais abaixo, ok?

No script de criação de tabelas MySQL do PagSeguro existe alguns erros básicos e curiosidades tambem. O primeiro é o seguinte, para que existe a tabela PagSeguroTransacoesProdutos sendo que em nenhum dos scripts de linguagem oferecidos por ele existe a inclusão de dados nesta tabela? Com certeza fail. Na outra tabela PagSeguroTransacoes, esta sim é utilizada, mesmo assim com erros gritantes. Como por exemplo, o campo TransacaoID como chave primaria. Porque erro? Porque o PagSeguro faz um post cada vez que é atualizado a transação, desta maneira que esta apenas a primeira inclusão será feita no MySQL, as confirmações de pagamento, cancelamento ou outro status diferente da transação que será postado posteriormente serão ignoradas pelo MySQL pois so pode existir um registro com cada chave primária. Trocando em miudos, você não sabe quem pagou ou não, pois a transanção não será atualizada.

Erro apresentado: #1062 – Duplicate entry ‘TransacaoID’ for key 1

Ta bom ou quer mais? Mais? tem muita coisa, como falta de um campo data para saber quando aconteceu a confirmação, um campo de flag para saber o que você ja atualizou no sistema ou não, etc. Essas implementações eu irei fazer a seguir.

Coloquei o dedo na ferida, e agora? E agora vamos a…

 

Implementação

Tentei comentar o código de forma simples e sucinta, então qualquer explicação seria chuver no molhado, vamos lá.

N/D

Basicamente, ele se conecta no MySQL, depois checa através do CURL se foi realmente o PagSeguro que enviou a postagem, recebe os dados via post e grava os dados na tabela.

… mas que tabela? Ahh sim… vamos a criação da tabela do MySQL.

1
 

N/D

Na tabela acima todos os campos são basicamente os dados recebidos do PagSeguro. Existem mais campos adicionais que vem em POST tambem que não quis colocar, se você tiver conhecimento basta ler o manual do PagSeguro e adicionar os campos.

Os indices que coloquei foram 3. O primeiro de tipo UNIQUE em TransacaoID e StatusTransacao para evitar que um registro seja enviado mais de uma vez, isso pode ocorrer em servidores com conexão lenta, é melhor remediar, pois estamos falando de transações financeiras. Os outros dois são indices de chave (KEY) apenas, para indexar e deixar sua busca pelos registros mais rapidas. O primeiro é na Referencia, campo que você envia ao PagSeguro na hora da compra para vincular o pagamento a ele, seria nossa chave. O segundo é um campo criado por mim, status que nada mais é que uma flag que uso no meu sistema, para saber quando ja usei aquele registro ou não, por padrão, todos os registros inseridos tem status zero.

Legal ter o código aberto no blog, mas eu gosto de facilidade quando busco em outros blogs, por isso a partir de hoje, qualquer código estará disponivel tambem para download.

ATENÇÃO: Já esta disponivel a versão 2.0 deste script, mais segurança e agora coletando informações dos produtos, clique aqui.

download Faça download do código aqui.

… bem, acho que depois de um longo tempo sem atualizar o blog devido a uma cirurgia de redução de estomago (vou falar sobre isso depois), é uma postagem importante e relevante para os desenvolvedores da área. Espero que tenham gostado.

Have Fun!

ATENÇÃO: Já esta disponivel a versão 2.0 deste script, mais segurança e agora coletando informações dos produtos, clique aqui.