DGmike

DGmike

Calma! não entre em pânico! Amanhã (talvez) tem novo post…

  • Alice Andrade
  • Rafael Zamana
Você está aqui: dgmike » php

  • Home
  • Guia Rápido jQuery
  • Códigos prontos
    • PHP: Função __auloload()
    • Classe sqlsimples e sql – PHP
    • Bancos, bancos e mais bancos…
  • PagSeguro
  • Artigos
    • JavaScript (parte 1)
  • Quem é dgmike?

Api de teste do meadiciona.com

Posted in Programação, php by DGmike
Jun 01 2010
TrackBack Address.

Desde que o Ederson @peka me apresentou o meadiciona.com adotei como ferramenta de gerenciamento de contas e sempre passei, nos meus e-mails e contatos, o meu perfil do programa. Mas como desenvolvedor, sempre achei que deveria existir uma maneira de conseguir resgatar esses dados de forma fácil.

meadiciona.com o seu cartão de visitas online

O meAdiciona.com é uma ferramenta desenvolvida com o intuito de facilitar sua vida. Tudo que você precisa dizer é meadiciona.com/voce.

Não aguentando mais esperar por uma API definitiva, resolvi escrever uma própria parseando o código html[bb] do meu perfil e verificando o perfil de alguns amigos, que poderiam ter menos ou mais informações diversas. Descobri também que os contatos como e-mail e texto puro são trabalhados de forma diferente no html gerado no site, sendo que o e-mail simplesmente não é gerado. Ele é passado por um protocolo de segurança não fácil de interpretar (a partir de AJAX[bb]) para que robôs (como o meu) não peguem facilmente. Decidi deixar de lado em prol da segurança do meadiciona. Então esta API não foi projetada para pegar os e-mails, ok?! :D

Para usar, basta requisitar a URL http://util.dgmike.com.br/meadiciona/[perfil].json. Hoje estou liberando apenas JSON e não pretendo liberar outra forma por enquanto, já que esta me serve com bastante tranquilidade. Veja como é fácil pegar essa informação via PHP[bb].

1
2
3
4
5
6
7
8
9
10
11
12
13
$saida = file_get_contents('http://util.dgmike.com.br/meadiciona/dgmike.json');
$perfil = json_decode($saida);
if ($perfil->r) {
    echo '<h3>'.$perfil->data->nome.'</h3>';
    echo '<p>'.$perfil->data->desc.'</p>';
    foreach ($perfil->data->servicos as $servico) {
      if (!$servico->url) continue;
      echo "<a href='{$servico->url}' style='float:left; width: 190px; height:35;text-align:center'>";
      echo "<img src='{$servico->img}' title='{$servico->title}' height='32' />";
      echo "</a>";
    }
    echo '<br style="clear:both;" /><small>Powered by <a href="http://meadiciona.com/dgmike">meadiciona.com</a></small>';
}

O código de como usar a API do meadiciona.com não oficial está disponível no gist do github, caso você queira passá-lo adiante. O resultado está logo abaixo, com o meu perfil, é claro!

Michael Granados (dgmike)

Falar de mim é como falar de você, só que um pouco diferente…


Powered by meadiciona.com

3 Comments »
Tagged as: api, biblioteca, código, dica, meadiciona, php, Programação, simples, solução, Tutorial

Palestra PagSeguro na Impacta

Posted in Programação, Semântica, Tecnologia, Trabalho, eventos, html, icephp, pagseguro, php, sql by DGmike
Feb 05 2010
TrackBack Address.

No sábado passado realizei uma palestra na Impacta sobre como implementar uma loja virtual do nada com ajuda do PagSeguro da UOL. Esta palestra já está na terceira versão, eu já a apresentei no PHP-Minas e PHPConference no ano passado. Eu sempre dou um upgrade entre uma apresentação e outra ou corto coisas que não são importantes, mas o conteúdo é basicamente o mesmo.

Foram abordados os temas controle de versão, PDO, Frameworks, motivação, KISS (keep it simple, stupid!) e desenvolvimento ágil.

Eu gosto muito dessa palestra em particular porque demonstra como você pode (e deve) ter sistemas grandes implementados com poucas linhas de código, bastando usar a essência do PHP. Hoje o PHP pode ser considerado uma linguagem bem estável e com grandes recursos que em muitos casos usar um Framework completo é algumas vezes perda de tempo, valendo mais a pena usar a essência da linguagem.

Sala cheia (duas) na palestra sobre PagSeguro na Impacta

Sala cheia (duas) na palestra sobre PagSeguro na Impacta

Também gosto pra caramba de implementar PagSeguro em palestras por ser simples. Em menos de vinte minutos explicativos é possível demonstrar como implementar PagSeguro com direito a retorno automático e dicas de segurança na hora de implementar. É muito satisfatório ver o quanto é rápido, simples e fácil implementar vários meios de pagamento de uma só vez. Com a segurança de “pishing”, fraude, reembolso e muitas outras vantagens que o PagSeguro disponibiliza.

A palestra esteve bem cheia, foram necessárias duas salas e uma conexão de áudio e vídeo para que todos possam ver a palestra. Dentre o pessoal consegui ver o @caferrari – dono do projeto vortice framework, e o @rodrideme – ex-funcionário da Visie e sua namorada @alazanscarol. Muito bom ver esse pessoal.

Enfim a palestra foi ótima e o código-fonte do projeto está no trac para qualquer um estudar. Para ver a palestra, basta vê-la no SlideShare. Espero que tenha mais palestras como esta pois acredite em mim, não é a mesma coisa assistir a palestra e vê-la no SlideShare, é completamente diferente.

Da argila ao forte: como desenvolver uma loja com PagSeguro
View more presentations from Michael Castillo Granados.

5 Comments »
Tagged as: controle de versão, desenvolvedor, ecommerce, ice-baby, impacta, implementação, loja, pagseguro, palestra, pdo, php, subversion, SVN, trac

O PagSeguro mudou a URL de retorno automático, e agora?

Posted in Chrome, Cotidiano, Firefox, Internet Explorer, Navegadores, Programação, Semântica, Tecnologia, Trabalho, Tutorial, eventos, jQuery, javascript, pagseguro, php, plugin, python, yui by DGmike
Nov 02 2009
TrackBack Address.

Nesta sexta-feira, dia 30 de outubro, o PagSeguro mudou a sua homepage e com ela muitas coisas novas aconteceram. Inclusive rolou uma palestra para 70 pessoas do twitter que acompanharam as mudanças do Twitter. A palestra foi ministrada pelo Dennis Ferreira e pela Valéria Santos. Pessoas que tive a oportunidade de conhecer de perto e eles são pessoas responsáveis e estão conscientes das mudanças e do impacto que esta mudança causa.

PagSeguro - Uma empresa UOL

PagSeguro - Uma empresa UOL

Tem bastante gente falando sobre as novidades do novo site do PagSeguro por aí, então se quiser saber o que exatamente, recomendo os slides da palestra e uma busca no oráculo.

Mas, e na parte de códigos? O que muda? Você precisa atualizar seus códigos para essa nova plataforma? A resposta é simples e óbvia: NADA. Sim você não precisa atualizar seu código correndo achando que sua URL mudou. O PagSeguro deixou de ser implementado em ASP e passou a ser implementado em JAVA, o que deixou a aplicação muito mais robusta e segura, com isso a URL do retorno automático mudou. No site do PagSeguro eles indicam uma nova URL para o retorno automático ( https://pagseguro.uol.com.br/pagseguro-ws/checkout/NPI.jhtml ) mas a URL anterior continua funcionando normalmente e continuará por um longo tempo.

O pessoal do PagSeguro fez todas as alterações no seu sistema e antes de por no ar fez uma longa bateria de testes e só foi para o ar após verificar se todas as bibliotecas oficiais continuavam funcionando normalmente. Então, as URL de retorno automático continuará funcionando normalmente. Com o passar do tempo, é óbvio que a URL anterior morra, mas isso acontecerá muito tempo depois, até perceberem que ninguém mais utiliza a URL antiga.

A mudança vai ser longa e sutil, com o tempo iremos alterar todos os scripts para a nova URL, mas você não precisa sair desesperado para trocar suas URLs. O PagSeguro pensou bem nisso quando alterou a url de retorno automático. Eu mesmo fiz testes hoje de tarde para comprovar isso, já que recebi algumas dúvidas de alguns clientes e algumas pessoas reclamaram disso no twitter. Portanto, não se preocupe, você não precisa alterar nada no seu script de retorno automático do PagSeguro.

8 Comments »
Tagged as: Code, código, integração, javascript, novo pagseguro, pagseguro, php, python, rails, retorno automático, RoR, ruby on rails, Tecnologia, url

PDO e classe de resultados

Posted in icephp, php, sql by DGmike
Oct 22 2009
TrackBack Address.

Estava fazendo alguns testes com PDO e SQLite e descobri uma coisa muito interessante sobre o PDO: classe de resultados. O que isso quer dizer, que quando você faz um fetchObject você pode usar sua própria classe com seus próprios métodos.

Atenção! Este post é totalmente NERD e destinado para programadores com algum conhecimento em PHP e banco de dados. Caso este não seja seu perfil aconselho a desistir enquanto é tempo.

Caixa, guarde o que é seu

O código começou mais ou menos assim, eu queria desenvolver um model específico para o ICEPHP, e com o advento do PDO decidi usá-lo como base. Então precisei de alguns definitions: diretório onde se encontra o arquivo (script) e o separador de pastas que em linux é barra e no windows é contra-barra. Também criei duas tabelas no banco de dados, post e categoria:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
define('DS', DIRECTORY_SEPARATOR);
define('ICE_DIR', dirname(__FILE__));
 
$bd = new PDO('sqlite:'.ICE_DIR.DS.'banco.db');
# A conexão do PDO não é linda?!

$bd->query("
    CREATE TABLE IF NOT EXISTS categoria (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        nome VARCHAR(40),
        slug VARCHAR(40)
    );
");
$bd->query("
    CREATE TABLE IF NOT EXISTS post (
        id INTEGER PRIMARY KEY AUTOINCREMENT,
        titulo VARCHAR(40),
        slug VARCHAR(40),
        post TEXT,
        data TIMESTAMP
    );
");

Após isso fiz um select no banco de dados e se não me retornasse resultados, inseri um dado no banco de dados:

1
2
3
4
5
6
7
8
9
10
11
12
$c=$bd->query("SELECT COUNT(*) as c FROM post;");
 
if (!$c->fetchObject()->c) {
    $bd->query("
        INSERT INTO post (titulo, slug, post, data) VALUES (
            'Apenas um teste',
            'apenas-um-teste',
            'Este post é apenas um teste do novo Framework: ICEPHP',
            CURRENT_DATE
        );
    ");
}

Com isso eu consigo usar o resultado de forma linda (orientado a objetos):

1
2
3
4
5
$c=$bd->query("SELECT * FROM post;");
$r = $c->fetchObject();
echo $r->titulo;
 
// Isto retorna "Apenas um teste"

Lendo a documentação sobre o fetchObject do PDO vi que é possivel passar como parâmetro uma string com o nome da Classe que você deseja que seja utilizado para o resultado, lembrando que (!), o padrão é o stdClass. Entao passei minha classe resultado como exemplo e o que descobri. Coisas lindas de se fazer. Eis a classe Resultado:

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
class Resultado
{
    var $_data = array();
    var $_updated = false;
 
    function __toString()
    {
        return "O resultado é: ".$this->titulo . ' ('.date('d-m-Y h:i:s', $this->data).")\n";
    }
 
    function __get($k)
    {
        return $this->_data[$k];
    }
 
    function __set($k, $v)
    {
        if (isset($this->_data[$k]) AND $this->_data[$k] != $v) {
            $this->_updated = true;
        }
        $this->_data[$k] = $v;
    }
 
    function salvaPost()
    {
        global $bd;
 
        $sql = "UPDATE post SET ";
        foreach ($this->_data as $k=>$v) {
            if ($k!='id' || $k != 'data') {
              $sql .= "\n  $k = '$v',";
            }
        }
        $sql = substr($sql, 0, -1);
        $sql .= "\n WHERE id = ".$this->id;
 
        $bd->query($sql);
    }
 
    function __destruct()
    {
        if ($this->_updated) {
            $this->salvaPost();
        }
    }
}

Veja, apenas usei um método de verdade, todos os outros usei os métodos mágicos do PHP (__toString, __get, __set, __destruct). Recomendo que leia sobre estes métodos e use-os, eles podem salvar sua vida. Whatever, com essa classe Resultado é possivel fazer o que eu sempre quis fazer, um objeto de resultado de banco de dados que atualiza o banco sem usar o estilo seta parametros e depois salva. Veja como é feito na maioria dos ORMs por aí:

1
2
3
$r=$post->get(1);
$r->titulo = 'Titulo Alterado';
$r->save();

Pense comigo, se você atribuiu um valor, você quer que ele seja salvo, correto? Então não ficaria mais fácil se forsse assim?

1
2
$r=$post->get(1);
$r->titulo = 'Titulo Alterado';

Sim!!! Às vezes você atribui um valor que não deseja salvar, faz isso apenas para configurar os dados e etc, mas pense, quantas vezes você faz isso? Além disso, óbvio que é possivel fazer tudo o que deseja gastando um pouco mais de massa cinzenta, mas a proposta não é essa no momento.

Usando a classe Resultado é possivel fazer o update quase que “on the fly”. Na verdade, para o programador parece que é instantâneo, mas não é. O update se dá no destruct do objeto, normalmente quando o script finaliza, mas pode ser quando damos um novo fetchObject nessa variável. Se ele não for alterado ele, obviamente, não salva as alterações no banco de dados. Veja como fica o exemplo do que estou falando.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$c=$bd->query("SELECT * FROM post;");
# Pegando o objeto e jogando-o na classe de resultados
$r = $c->fetchObject('Resultado');
 
# Imprimindo, devido ao método __toString aparece:
# O resultado é: Apenas um teste (31-12-1969 09:33:29)
print ($r);
 
# Alterando o resultado
$r->titulo = 'Teste';
 
# Imprimindo mais uma vez, aparece
# O resultado é: Teste (31-12-1969 09:33:29)
# mas isto está em 'cache'
print ($r);
 
# Quando o objeto é destruído, ao finalizar o script
# ele faz o update necessário

Testei isso no foreach e também funcionou, então é fazer updates de objetos em escala, mas não exagere, o ideal é fazer isso no sql. Veja como fica com o foreach:

1
2
3
4
5
$c=$bd->query("SELECT * FROM post;");
 
while ($x = $c->fetchObject('Resultado')) {
    $x->data = time();
}

Isso me deixa com várias ideias para criar o ORM do ICEPHP. Mas fica a dica para vocês desenvolverem seus códigos, experimente criar um método FORM que já cria um formulário html para você facilitar sua vida. :D

1 Comment »
Tagged as: banco de dados, classe, framework, icephp, pdo, php, sqlite

Verifique o retorno automático, sempre!

Posted in pagseguro, php by DGmike
Oct 07 2009
TrackBack Address.

Você já deve ter ouvido falar no Retorno Automático de dados do PagSeguro. Com ele você consegue sincronizar os dados de sua loja com os dados em suas transações no PagSeguro. O que é interessantíssimo pois com ele não precisamos ficar verificando cada e-mail que chega do PagSeguro e atualizando o nosso banco de dados.

** nota: Que fique claro que neste POST falo sobre carrinho próprio

Basicamente, uma aplicação funciona assim: Você monta uma compra e grava-a no seu banco de dados. Tomemos como exemplo duas chupetas doces no valor de R$ 3,40. Isto gerará uma compra no valor de R$ 6,80. Então, com isso montamos um formulário de pagamento que fará um POST para o PagSeguro.

Quando fizer isso, use um código de referencia para essa compra, se você usa auto_increment no seu banco de dados fica a dica para usar esse campo como código único, mas você pode gerar um número único baseado na data/hora atual mais um número aleatório. Em PHP você pode usar o método uniqid para isto.

O seu formulário ficará mais ou menos assim:

1
2
3
4
5
6
...
<input type="hidden" name="referencia" value="codigo_unico_de_compra" />
...
<input type="hidden" name="valor" value="340" />
<input type="hidden" name="quant" value="2" />
<input type="hidden" name="descr" value="chupeta doce" />

O que acontece?

Quando o comprador efetuar uma ação na compra, se você configurar e ativar uma URL de retorno automático no seu painel do PagSeguro, você receberá todos os dados da compra, inclusive o status da compra. A URL que você configurar como retorno automático é a mesma para a qual o usuário será redirecionado após o termino da transação no PagSeguro, seja ela emissão de boleto, pagamento via cartão de crédito ou débito ou mesmo transação entre contar PagSeguro.

Assim, você pode usar o código de referencia para saber a qual compra você vai atualizar. Mas, se é a mesma URL, como eu sei quem é o retorno automático? O retorno automático é um POST, a volta do usuário é GET. Um código bem simples em PHP para atualizar se assemelha bastante a este:

1
2
3
4
5
6
7
<?php
if ($_POST) {
  $compras = new Compras;
  $compras->get($_POST['Referencia']);
  $compras->set('status', $_POST['StatusTransacao']);
  die('Esta mensagem somente sera vista pelo robo do PagSeguro.');
}

Simples, né?! Mas o mundo não é perfeito, ainda mais na internet, então devemos nos prevenir de crackers (hackers malvados =P ). Imagine se eu efetuo uma compra e não pago. Então crio um formulário apontando para a URL de retorno à qual fui redirecionado com o StatusTransacao como Aprovado? Sim caro leitor, a pessoa efetua a compra sem pagar.

Pensando nisso, o PagSeguro fez um robôzinho onde você pode verificar se quem mandou o POST realmente foi ele. Funciona assim: Ao receber o POST, envie um POST para o robô e leia a saída. É como se você escrevesse um formulário direcionado para a URL de verificação de POST do PagSeguro e visse a página, ela deve aparecer como um arquivo de texto escrito VERIFICADO ou FALSO, caso os dados não batam com os dados contidos no PagSeguro.

Mas, para que a segurança seja maior, você deve enviar junto com todos os dados do PagSeguro os campos “Comando” com o valor “Verificar” e o campo “Token” com o código gerado no painel de controle do PagSeguro. Se você não enviar esses valores, o PagSeguro retornará FALSO, afinal, ele também verifica se você é você usando esse token que só você e o PagSeguro conhecem.

Em PHP você pode usar cURL para verificar esse POST, o código não é tão complicado de implementar assim. Apenas deve verificar que a URL do robô é https e que você está enviando um POST, então flags especiais devem ser usadas. Se você quiser, também pode usar a biblioteca PHP para PagSeguro desenvolvida pela visie que já faz essa verificação para você, apenas precisando que você faça a sua função como se não precisasse verificar nada.

A grosso modo, podemos alterar o nosso código para o seguinte:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
define('TOKEN','código gerado no painel de controle do PagSeguro'); # Aqui vai seu Token
include('retorno.php'); # Incluindo o arquivo da biblioteca

function retorno_automatico ( $VendedorEmail, $TransacaoID, 
  $Referencia, $TipoFrete, $ValorFrete, $Anotacao, $DataTransacao,
  $TipoPagamento, $StatusTransacao, $CliNome, $CliEmail, 
  $CliEndereco, $CliNumero, $CliComplemento, $CliBairro, $CliCidade,
  $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens) {
    # E aqui, o nosso código
    $compras = new Compras;
    $compras->get($_POST['Referencia']);
    $compras->set('status', $_POST['StatusTransacao']);
    die('Esta mensagem somente sera vista pelo robo do PagSeguro.');
}

Ok, nosso mundo mudou bastante, colocamos proteção para o nosso cracker e ele vai ter um pouco mais de trabalho. Mas ainda temos um problema, quer dizer, uma solução… que gerou um problema: firebug.

Como todos nós estamos carecas de saber, o formulário que enviamos ao PagSeguro é um html normal que pode ser alterado de diversas formas, inclusive alterar os valores. Então, imaginemos o seguinte ambiente: você tem uma loja onde o usuário compra uma máquina de lavar por R$ 1.200,00. Para aproveitar mais ainda, ele compra três máquinas. Então ele chega no checkout e altera o formulário final para 5000, ou seja, R$ 50,00. Então ele pagará muito mais barato pela máquina, certo? Certo!

Certo?! Como assim?

Sim, ele vai pagar mais barato, porque burlou o sistema, cabe a você ter tino e devolver o dinheiro do infeliz. Mas calma! Você não precisa verificar todas as contas na mão para saber se a pessoa está burlando o sistema. Basta você conferir o valor do POST de retorno com o valor da compra.

Lembra que gravamos a compra no banco antes de enviar o comprador para o PagSeguro usando um código único? Coloque também o valor total da compra. Quando você receber o POST do retorno automático, verifique o valor da compra pois se a pessoa alterar o valor do input com a firebug (ou similar) o sistema saberá que não é válido. Veja como fica o nosso código.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
define('TOKEN','código gerado no painel de controle do PagSeguro'); # Aqui vai seu Token
include('retorno.php'); # Incluindo o arquivo da biblioteca

function retorno_automatico ( $VendedorEmail, $TransacaoID, 
  $Referencia, $TipoFrete, $ValorFrete, $Anotacao, $DataTransacao,
  $TipoPagamento, $StatusTransacao, $CliNome, $CliEmail, 
  $CliEndereco, $CliNumero, $CliComplemento, $CliBairro, $CliCidade,
  $CliEstado, $CliCEP, $CliTelefone, $produtos, $NumItens) {
    # E aqui, o nosso código
    $total = 0;
    foreach ($produtos as $produto) {
      $total += ($produto['ProdValor'] * $produto['ProdQuantidade']) + $produto['ProdFrete'] + $produto['ProdExtras'];
    }
    if ($total == $compras->total) {
      $compras = new Compras;
      $compras->get($Referencia);
      $compras->set('status', $StatusTransacao);
    }
    die('Esta mensagem somente sera vista pelo robo do PagSeguro.');
}

Simples assim! Apenas pegamos todos os produtos e somamos o produto de seus valores pelas suas respectivas quantidades, aliado aos valores extras e de frete. Quanto mais campos você verificar no retorno automático, melhor. Mas não exagere pois poderá falhar em alguns casos. Por exemplo você pode enviar um e-mail para o PagSeguro e a pessoa decidir pagar com outra conta (da esposa ou da empresa, por exemplo).

4 Comments »
Tagged as: explicação, pagamento, pagseguro, php, Programação, retorno automático, segurança, tutoriais, Tutorial
Next page »

Categorias

  • Amigos  (16)
  • cases  (4)
  • Cotidiano  (73)
  • CSS  (20)
  • Design  (2)
  • Dia-a-dia  (33)
  • Diversão  (18)
  • eventos  (10)
  • extensions  (11)
  • flash  (4)
  • Games  (1)
  • html  (7)
  • icephp  (4)
  • Ilustração  (6)
  • Imagem  (8)
  • Inspiração  (5)
  • javascript  (36)
    • jQuery  (7)
    • yui  (2)
  • Não categorizado  (26)
  • Navegadores  (19)
    • Chrome  (6)
    • Firefox  (18)
    • Internet Explorer  (6)
  • pagseguro  (12)
  • php  (43)
    • PHP Conference  (3)
  • plugin  (3)
  • Programação  (46)
  • python  (5)
  • Semântica  (16)
  • sql  (9)
  • tableless  (18)
  • Tecnologia  (48)
  • Trabalho  (28)
  • Tutorial  (25)
  • Vetorial  (5)
  • video  (8)
  • video-tutorial  (5)
  • Windows  (4)
  • wordpress  (2)
  • xHTML  (23)

Tags

ajax artigo banco de dados biblioteca blog browser classe CSS data Design Dia-a-dia dinheiro evento eventos Firefox framework google html icephp internet Internet Explorer javascript jQuery loja mysql online opera pagseguro palestra php plugin Programação python retorno automático simples site solução sql tableless Tecnologia Tutorial twitter visie web wordpress

Arquivo

SlideSare

Últimos Posts

  • Vírgula em html5 e css3
  • Youtube e HTML5, agora ficou mais fácil
  • Novo emprego!
  • Até mais e obrigado pela salada
  • Api de teste do meadiciona.com

Tags

ajax artigo banco de dados biblioteca blog browser classe CSS data Design Dia-a-dia dinheiro evento eventos Firefox framework google html icephp internet Internet Explorer javascript jQuery loja mysql online opera pagseguro palestra php plugin Programação python retorno automático simples site solução sql tableless Tecnologia Tutorial twitter visie web wordpress

Conteúdo

  • Artigos
    • JavaScript (parte 1)
  • Códigos prontos
    • Bancos, bancos e mais bancos…
    • Classe sqlsimples e sql – PHP
    • PHP: Função __auloload()
  • Guia Rápido jQuery
  • PagSeguro
  • Quem é dgmike?
PagSeguro Powered by WordPress | “Blend” from Spectacu.la WP Themes Club