<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>DOURADO.net &#187; www</title>
	<atom:link href="http://dourado.net/categoria/www/feed/" rel="self" type="application/rss+xml" />
	<link>http://dourado.net</link>
	<description>desenvolvimento web, comentários diversos e dicas nem sempre úteis</description>
	<lastBuildDate>Mon, 24 Oct 2011 15:24:02 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mysql &#8211; Desafio: Relacionar 3 tabelas e exibir informações no mesmo select</title>
		<link>http://dourado.net/2011/10/24/mysql-desafio-relacionar-3-tabelas-e-exibir-informacoes-no-mesmo-select/</link>
		<comments>http://dourado.net/2011/10/24/mysql-desafio-relacionar-3-tabelas-e-exibir-informacoes-no-mesmo-select/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 15:24:02 +0000</pubDate>
		<dc:creator>Diogo Dourado (XiS)</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[caneca]]></category>
		<category><![CDATA[desafio]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[prêmio]]></category>
		<category><![CDATA[relacionamento]]></category>
		<category><![CDATA[tabelas]]></category>

		<guid isPermaLink="false">http://dourado.net/?p=339</guid>
		<description><![CDATA[E ae galerinha, prontos para o desafio? Vamos la, primeiro vamos conhecer o banco de dados, segue abaixo: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172-- -- Estrutura da tabela `categorias` -- CREATE TABLE IF NOT EXISTS `categorias` ( &#160; `id` int(11) NOT NULL AUTO_INCREMENT, &#160; `nome` varchar(100) NOT NULL, &#160; PRIMARY KEY (`id`) ) ENGINE=MyISAM &#160;DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ; -- -- [...]]]></description>
			<content:encoded><![CDATA[<p>E ae galerinha, prontos para o desafio? Vamos la, primeiro vamos conhecer o banco de dados, segue abaixo:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:640px;height:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br />22<br />23<br />24<br />25<br />26<br />27<br />28<br />29<br />30<br />31<br />32<br />33<br />34<br />35<br />36<br />37<br />38<br />39<br />40<br />41<br />42<br />43<br />44<br />45<br />46<br />47<br />48<br />49<br />50<br />51<br />52<br />53<br />54<br />55<br />56<br />57<br />58<br />59<br />60<br />61<br />62<br />63<br />64<br />65<br />66<br />67<br />68<br />69<br />70<br />71<br />72<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">--<br />
-- Estrutura da tabela `categorias`<br />
--<br />
<br />
CREATE TABLE IF NOT EXISTS `categorias` (<br />
&nbsp; `id` int(11) NOT NULL AUTO_INCREMENT,<br />
&nbsp; `nome` varchar(100) NOT NULL,<br />
&nbsp; PRIMARY KEY (`id`)<br />
) ENGINE=MyISAM &nbsp;DEFAULT CHARSET=utf8 AUTO_INCREMENT=7 ;<br />
<br />
--<br />
-- Extraindo dados da tabela `categorias`<br />
--<br />
<br />
INSERT INTO `categorias` (`id`, `nome`) VALUES<br />
(1, 'legal'),<br />
(2, 'alegre'),<br />
(3, 'inteligente'),<br />
(4, 'divertido'),<br />
(5, 'sorridente'),<br />
(6, 'engraçado');<br />
<br />
-- --------------------------------------------------------<br />
<br />
--<br />
-- Estrutura da tabela `relacao`<br />
--<br />
<br />
CREATE TABLE IF NOT EXISTS `relacao` (<br />
&nbsp; `usuario` int(11) NOT NULL,<br />
&nbsp; `categoria` int(11) NOT NULL,<br />
&nbsp; UNIQUE KEY `usuario` (`usuario`,`categoria`)<br />
) ENGINE=MyISAM DEFAULT CHARSET=utf8;<br />
<br />
--<br />
-- Extraindo dados da tabela `relacao`<br />
--<br />
<br />
INSERT INTO `relacao` (`usuario`, `categoria`) VALUES<br />
(1, 1),<br />
(1, 5),<br />
(1, 6),<br />
(2, 2),<br />
(2, 4),<br />
(2, 5),<br />
(3, 5),<br />
(3, 6),<br />
(4, 1),<br />
(4, 4),<br />
(4, 6);<br />
<br />
-- --------------------------------------------------------<br />
<br />
--<br />
-- Estrutura da tabela `usuarios`<br />
--<br />
<br />
CREATE TABLE IF NOT EXISTS `usuarios` (<br />
&nbsp; `id` int(11) NOT NULL AUTO_INCREMENT,<br />
&nbsp; `nome` varchar(100) NOT NULL,<br />
&nbsp; PRIMARY KEY (`id`)<br />
) ENGINE=MyISAM &nbsp;DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;<br />
<br />
--<br />
-- Extraindo dados da tabela `usuarios`<br />
--<br />
<br />
INSERT INTO `usuarios` (`id`, `nome`) VALUES<br />
(1, 'magno'),<br />
(2, 'diogo'),<br />
(3, 'daniel'),<br />
(4, 'tayna');</div></td></tr></tbody></table></div>
<p>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.</p>
<p>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:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:640px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">NOME | CATEGORIAS<br />
----------------------------<br />
magno | legal, sorridente, engraçado<br />
diogo | alegre, divertido, sorridente<br />
etc...</div></td></tr></tbody></table></div>
<p><strong>Prêmio:</strong> Uma caneca exclusiva da <a  href="http://www.brainatwork.com.br">Brainatwork TI</a> <em>(enviamos para qualquer lugar do mundo)</em></p>
<div id="attachment_340" class="wp-caption alignleft" style="width: 610px"><a  href="http://dourado.net/wp-content/uploads/2011/10/420571173.jpg"><img src="http://dourado.net/wp-content/uploads/2011/10/420571173.jpg" alt="" title="420571173" width="600" height="449" class="size-full wp-image-340" /></a><p class="wp-caption-text">Caneca Brainatwork TI</p></div>
<p>O desafio esta lançado&#8230; e não esqueça de preencher os comentários com seu e-mail correto.</p>
<p>have fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://dourado.net/2011/10/24/mysql-desafio-relacionar-3-tabelas-e-exibir-informacoes-no-mesmo-select/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>PHP: Normalizar string para usar na URL amigável/dinâmica</title>
		<link>http://dourado.net/2011/09/20/php-normalizar-string-para-usar-na-url-amigavel-dinamica/</link>
		<comments>http://dourado.net/2011/09/20/php-normalizar-string-para-usar-na-url-amigavel-dinamica/#comments</comments>
		<pubDate>Tue, 20 Sep 2011 19:19:17 +0000</pubDate>
		<dc:creator>Diogo Dourado (XiS)</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[amigavel]]></category>
		<category><![CDATA[dinamica]]></category>
		<category><![CDATA[normalizar]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[string]]></category>
		<category><![CDATA[url]]></category>

		<guid isPermaLink="false">http://dourado.net/?p=333</guid>
		<description><![CDATA[A tempos atras aqui mesmo no blog, postei um artigo ensinando a Como fazer URLs amigaveis com .htaccess e php. Entretanto, para ficar mais completo, você pode incrementar a função abaixo: 12345678function NormalizaURL&#40;$str&#41;&#123; &#160; &#160; $str = strtolower&#40;utf8_decode&#40;$str&#41;&#41;; $i=1; &#160; &#160; $str = strtr&#40;$str, utf8_decode&#40;'àáâãäåæçèéêëìíîïñòóôõöøùúûýýÿ'&#41;, 'aaaaaaaceeeeiiiinoooooouuuyyy'&#41;; &#160; &#160; $str = preg_replace&#40;&#34;/([^a-z0-9])/&#34;,'-',utf8_encode&#40;$str&#41;&#41;; &#160; &#160; while&#40;$i&#62;0&#41; $str [...]]]></description>
			<content:encoded><![CDATA[<p>A tempos atras aqui mesmo no blog, postei um artigo ensinando a <a  href="http://dourado.net/2009/06/25/como-fazer-urls-amigaveis-com-htaccess-e-php/">Como fazer URLs amigaveis com .htaccess e php</a>. Entretanto, para ficar mais completo, você pode incrementar a função abaixo:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:640px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #000000; font-weight: bold;">function</span> NormalizaURL<span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtolower</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">utf8_decode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #339933;">,</span> <span style="color: #990000;">utf8_decode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'àáâãäåæçèéêëìíîïñòóôõöøùúûýýÿ'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'aaaaaaaceeeeiiiinoooooouuuyyy'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #990000;">preg_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;/([^a-z0-9])/&quot;</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'-'</span><span style="color: #339933;">,</span><span style="color: #990000;">utf8_encode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #339933;">&gt;</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #990000;">str_replace</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'--'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'-'</span><span style="color: #339933;">,</span><span style="color: #000088;">$str</span><span style="color: #339933;">,</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span><span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'-'</span><span style="color: #009900;">&#41;</span> <span style="color: #000088;">$str</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$str</span><span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span> <span style="color: #339933;">-</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
&nbsp; &nbsp; <span style="color: #b1b100;">return</span> <span style="color: #000088;">$str</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span></div></td></tr></tbody></table></div>
<p>ela fará que uma string se torne uma <strong>URL amigável</strong>, ou seja, de fácil leitura humana e dos buscadores (SEO).</p>
<p>Por exemplo, você tem uma noticia com o titulo:<br />
<em>Rihanna toma caipirinha, come picolé, tatua braço e faz castelo na areia no RJ</em></p>
<p>Ao passar pelo codigo, ira retornar:<br />
<em>rihanna-toma-caipirinha-come-picole-tatua-braco-e-faz-castelo-na-areia-no-rj</em></p>
<p>Agora é so montar a url como desejar, por exemplo:</p>
<p>http://<strong>seudominio</strong>.com.br/<strong>2134</strong>/<strong>rihanna-toma-caipirinha-come-picole-tatua-braco-e-faz-castelo-na-areia-no-rj</strong>.html</p>
<p>Onde, seudominio é o seu domínio, 2134 seria o ID da matéria no banco de dados, e o restante apenas uma mascara para indexação nos buscadores. ;)</p>
<p>Have Fun!</p>
]]></content:encoded>
			<wfw:commentRss>http://dourado.net/2011/09/20/php-normalizar-string-para-usar-na-url-amigavel-dinamica/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Removendo IP do firewall com shell script</title>
		<link>http://dourado.net/2011/08/10/removendo-ip-do-firewall-com-shell-script/</link>
		<comments>http://dourado.net/2011/08/10/removendo-ip-do-firewall-com-shell-script/#comments</comments>
		<pubDate>Wed, 10 Aug 2011 16:35:22 +0000</pubDate>
		<dc:creator>Diogo Dourado (XiS)</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[bloqueio]]></category>
		<category><![CDATA[firewall]]></category>
		<category><![CDATA[ip]]></category>
		<category><![CDATA[remover]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://dourado.net/?p=319</guid>
		<description><![CDATA[A minha necessidade era atraves de um painel de controle (escrito em PHP) executar um comando especifico (neste caso: csf -dr IP). O procedimento poderia ser simples, usando o exec() do PHP, mas por medidas de segurança o mesmo esta desabilitado no servidor. Como diz meu grande ídolo Dadá Maravilha, vamos a solucionática: Fazer um [...]]]></description>
			<content:encoded><![CDATA[<p>A minha necessidade era atraves de um painel de controle (escrito em <strong>PHP</strong>) executar um comando especifico (neste caso: <strong>csf -dr IP</strong>). O procedimento poderia ser simples, usando o exec() do PHP, mas por medidas de segurança o mesmo esta desabilitado no servidor.</p>
<p>Como diz meu grande ídolo <a  href="http://pt.wikipedia.org/wiki/Dad%C3%A1_Maravilha">Dadá Maravilha</a>, vamos a solucionática: Fazer um Shell Script que le um arquivo TXT linha por linha, onde serão gravados os IPs e executar o comando com estes IPs.</p>
<p>Segue o código:</p>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:640px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br /></div></td><td><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">#!/bin/bash<br />
# DesBloquearIPTxt por Diogo Dourado &lt;diogo@dourado.net&gt;<br />
# Le IPs para desbloquear<br />
<br />
nome_arquivo=&quot;/home/betanetr/public_html/DesbloquearIps.txt&quot;<br />
<br />
if [ -f $nome_arquivo ]<br />
then<br />
<br />
&nbsp; &nbsp; while read line<br />
&nbsp; &nbsp; do<br />
&nbsp; &nbsp; &nbsp; &nbsp; ipvalido=$(echo $line | egrep '^(([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]{1,2}|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$')<br />
&nbsp; &nbsp; &nbsp; &nbsp; if [ &quot;$ipvalido&quot; != &quot;&quot; ]; then<br />
&nbsp; &nbsp; &nbsp; &nbsp; csf -dr $line<br />
&nbsp; &nbsp; &nbsp; &nbsp; fi&nbsp; <br />
&nbsp; &nbsp; done &lt; $nome_arquivo<br />
&nbsp; &nbsp; <br />
&nbsp; &nbsp; echo '' &gt; $nome_arquivo<br />
fi</div></td></tr></tbody></table></div>
<p><strong>Vamos botar pra rodar?</strong></p>
<ol>
<li>Entre no seu servidor via <strong>SSH</strong></li>
<li>Crie um arquivo com o código acima atraves do comando: <strong>edit DesBloquearIPTxt</strong></li>
<li>Faça dele um executavel com o comando: <strong>chmod +x DesBloquearIPTxt</strong></li>
<li>Abra o agendador de tarefas: <strong>crontab -e</strong></li>
<li>Adicione na ultima linha:<strong> * * * * * ./DesBloquearIPTxt &gt;/dev/null 2&gt;&amp;1</strong></li>
<li> Salve e seja feliz! :)</li>
</ol>
<p>Avisos importantes:</p>
<ul>
<li>Altere o nome do arquivo no código acima para o caminho exato de onde esta o arquivo, no meu caso, com os IPs gravados: <strong>DesbloquearIps.txt&#8221;</strong></li>
<li>De permissão <strong>0777</strong> para este arquivo, mesmo vazio</li>
<li>Agora é so fazer um script em PHP para gravar os IPs que deseja desbloquear no TXT</li>
</ul>
<p>Prontinho, agora o <em>CRON</em> cuida do resto. A cada minuto ele verifica se o arquivo existe, se existir, verifica linha por linha se é um IP válido, se for o IP válido ele faz o desbloqueio do IP.</p>
<p>Have Fun! ;)</p>
]]></content:encoded>
			<wfw:commentRss>http://dourado.net/2011/08/10/removendo-ip-do-firewall-com-shell-script/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Retorno Automático de Dados do PagSeguro em PHP/MySQL (com produtos) &#8211; Versão 2.0</title>
		<link>http://dourado.net/2011/06/09/retorno-automatico-de-dados-do-pagseguro-em-phpmysql-com-produtos-versao-2-0/</link>
		<comments>http://dourado.net/2011/06/09/retorno-automatico-de-dados-do-pagseguro-em-phpmysql-com-produtos-versao-2-0/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 00:19:54 +0000</pubDate>
		<dc:creator>Diogo Dourado (XiS)</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[pagseguro]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[produtos]]></category>
		<category><![CDATA[retorno]]></category>

		<guid isPermaLink="false">http://dourado.net/?p=309</guid>
		<description><![CDATA[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. [...]]]></description>
			<content:encoded><![CDATA[<p>Enfim, como prometido a nova versão do Retorno de dados do <a  href="https://pagseguro.uol.com.br/?ind=528005">Pagseguro</a>. As maiores novidades ficaram por conta da utilização a nova URL do <a  href="https://pagseguro.uol.com.br/?ind=528005">PagSeguro</a> para validação e a captura completa dos produtos.</p>
<p>Agora ficou mais fácil a instalação do mesmo, basta baixar o script abaixo, descompactar e editar  o <strong>PagSeguroRetornoConfig.php </strong>inserindo os dados solicitados. Depois basta configurar o banco de dados Mysql e utilizar o arquivo SQL disponível para criar as tabelas.</p>
<p><a  href="http://dourado.net/download/pagseguro_retorno2.0.rar"><img class="alignleft size-full wp-image-264" title="download" src="http://dourado.net/wp-content/uploads/2009/10/download48.png" alt="" width="48" height="48" />Download do script de Retorno de Dados Automatico do Pagseguro 2.0</a></p>
<p>&nbsp;</p>
<p>Você deve configurar a sua conta no <a  href="https://pagseguro.uol.com.br/?ind=528005">PagSeguro</a> para ativar o Retorno Automático de dados, para isso, entre no seu PagSeguro, nas opcao Preferencias &gt; 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 <strong>Token</strong>, solicitada no arquivo de configurações.</p>
<p>Feito isso, o seu Retorno já esta funcional.</p>
<p>Para testar seu script não é preciso fazer um pagamento, basta abrir o arquivo <strong>TestarCompra.php </strong>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.</p>
<p>Ps: Se você não é programador, não faça perguntas, peça um orçamento atraves do contato.</p>
<p>É isso ae! La pergunta?</p>
]]></content:encoded>
			<wfw:commentRss>http://dourado.net/2011/06/09/retorno-automatico-de-dados-do-pagseguro-em-phpmysql-com-produtos-versao-2-0/feed/</wfw:commentRss>
		<slash:comments>114</slash:comments>
		</item>
		<item>
		<title>Justificativa de Ausência no Café com Tecnologia #cafetech</title>
		<link>http://dourado.net/2011/05/25/justificativa-de-ausencia-no-cafe-com-tecnologia-cafetech/</link>
		<comments>http://dourado.net/2011/05/25/justificativa-de-ausencia-no-cafe-com-tecnologia-cafetech/#comments</comments>
		<pubDate>Wed, 25 May 2011 16:05:47 +0000</pubDate>
		<dc:creator>Diogo Dourado (XiS)</dc:creator>
				<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://dourado.net/?p=305</guid>
		<description><![CDATA[Pessoal, é com muito pesar e até constrangimento que trago esta notícia. Infelizmente não poderei participar do bate-papo sobre &#8220;Empreendedorismo Tecnológico: startups e novos mercados.&#8221; É de conhecimento de alguns que passei por uma cirurgia de emergencia a alguns dias atras no abdomen parar remover duas hernias e de brinde um bom pedaço do intestino [...]]]></description>
			<content:encoded><![CDATA[<p><a  href="http://dourado.net/wp-content/uploads/2011/05/tiro_no_pe.jpg"><img class="alignleft size-full wp-image-306" title="tiro_no_pe" src="http://dourado.net/wp-content/uploads/2011/05/tiro_no_pe.jpg" alt="" width="320" height="306" /></a>Pessoal, é com muito pesar e até constrangimento que trago esta notícia. Infelizmente não poderei participar do bate-papo sobre <strong>&#8220;Empreendedorismo Tecnológico: startups e novos mercados.&#8221;</strong></p>
<p>É de conhecimento de alguns que passei por uma cirurgia de emergencia a alguns dias atras no abdomen parar remover duas hernias e de brinde um bom pedaço do intestino que foi prejudicado. Estou com um singelo corte de 30 cm na pança e com os pontos ainda em cicatrização, e apesar de estar bem aparentemente, andando sem fazer esforços em demasia, irei atender o pedido do cirurgião que me alertou sobre a possibilidade do deslocamento da malha cirurgica devido ao esforço da fala.</p>
<p>Gostaria de pedir minhas sinceras desculpas pelo ocorrido a todos os organizadores do evento, palestrastes e inscritos, mas foi um fato alem da minha vontade, que certamente era estar presente.</p>
<p>Irei publicar o material que preparei, e me comprometo de quando estiver totalmente recuperado a gravar e disponibilizar a todos ou até mesmo fazer uma apresentação on-line.</p>
<p>Certo, que mesmo com a minha ausência o evento será extraordinário, com a presença do <a  href="http://www.bernardoporto.com/">Bernardo Porto</a> e do <a  href="http://herberthamaral.com/">Herberth Amaral</a>, ambos da DeskMetrics.</p>
<p>Apesar de não conhecer os dois pessoalmente, é facil constatar os seus feitos pela web, e ja deixo aqui registrada a minha admiração profissional por ambos. Marcaremos algo depois.</p>
<p>Deixo tambem o meu muito obrigado ao <a  href="http://twitter.com/PetronioCandido">Petronio Candido</a> pelo segundo convite ao #CafeTech, alem das desculpas pela ausencia, e dizer a ele que certamente esse Karma será quebrado.</p>
<p>Link do evento: <a  href="http://cafecomtecnologia.santoagostinho.edu.br/">http://cafecomtecnologia.santoagostinho.edu.br/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://dourado.net/2011/05/25/justificativa-de-ausencia-no-cafe-com-tecnologia-cafetech/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Adicionando ou Removendo o WWW da URL com .htaccess</title>
		<link>http://dourado.net/2011/05/02/adicionando-ou-removendo-o-www-da-url-com-htaccess/</link>
		<comments>http://dourado.net/2011/05/02/adicionando-ou-removendo-o-www-da-url-com-htaccess/#comments</comments>
		<pubDate>Mon, 02 May 2011 19:24:06 +0000</pubDate>
		<dc:creator>Diogo Dourado (XiS)</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[adicionar]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[remover]]></category>

		<guid isPermaLink="false">http://www.dourado.net/?p=292</guid>
		<description><![CDATA[Para inicio de conversa é necessário saber o que é o htaccess e suas possibilidades, então recomendo a leitura em: http://httpd.apache.org/docs/1.3/howto/htaccess.html O que vamos fazer a seguir é adicionar o www. no inicio do dominio caso ele não seja digitado pelo usuário, por exemplo: Usuario digita: mepergunte.com O htaccess converte para: www.mepergunte.com Para isso, basta [...]]]></description>
			<content:encoded><![CDATA[<p>Para inicio de conversa é necessário saber o que é o htaccess e suas possibilidades, então recomendo a leitura em:<br />
<a  href="http://httpd.apache.org/docs/1.3/howto/htaccess.html">http://httpd.apache.org/docs/1.3/howto/htaccess.html</a></p>
<p>O que vamos fazer a seguir é adicionar o www. no inicio do dominio caso ele não seja digitado pelo usuário, por exemplo:</p>
<p>Usuario digita: mepergunte.com</p>
<p>O htaccess converte para: www.mepergunte.com</p>
<p>Para isso, basta editar (ou criar) o arquivo <strong>.htaccess</strong> na raiz do seu dominio com o seguinte código:</p>
<div class="codecolorer-container apache default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:640px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="apache codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span><br />
<span style="color: #00007f;">Options</span> +<span style="color: #0000ff;">FollowSymLinks</span><br />
<span style="color: #00007f;">RewriteCond</span> %{HTTP_HOST} !^www\.<br />
<span style="color: #00007f;">RewriteRule</span> (.*) http://www.mepergunte.com/$1 [R=<span style="color: #ff0000;">301</span>,L]</div></td></tr></tbody></table></div>
<p>Altere no código acima o domínio, para onde será feito o redirecionamento, inclusive colocando a ultima linha com um diretorio qualquer.</p>
<div class="codecolorer-container apache default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:640px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="apache codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #00007f;">RewriteRule</span> (.*) http://www.mepergunte.com/site/$1 [R=<span style="color: #ff0000;">301</span>,L]</div></td></tr></tbody></table></div>
<p>Agora vamos fazer o processo inverso, que inclusive é o meu favorito.</p>
<p>Veja como <strong>remover</strong> o www. do seu domínio automaticamente utilizando <strong>.htaccess</strong></p>
<div class="codecolorer-container apache default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:640px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br /></div></td><td><div class="apache codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #00007f;">RewriteEngine</span> <span style="color: #0000ff;">On</span><br />
<span style="color: #00007f;">Options</span> +<span style="color: #0000ff;">FollowSymLinks</span><br />
<span style="color: #00007f;">RewriteCond</span> %{HTTP_HOST} ^www\.(.*)<br />
<span style="color: #00007f;">RewriteRule</span> (.*) http://%1/$1 [R=<span style="color: #ff0000;">301</span>,L]</div></td></tr></tbody></table></div>
<p>Basicamente so altera a linha 3 e 4, ja que as duas primeiraas so ativam e setam opções que serão utilizadas no código.</p>
<p>A linha 3 é a condição e a linha 4 o que será executada caso a condição seja válida.</p>
<p>Bom, acho que é isso. Aproveitando o post, algumas dicas bacanas para .htacess você pode encontrar no site <a  href="http://www.htaccesstools.com/">Htaccess Tools</a>, como detecção de navegação por iPhone, redirecionamentos, sistema de senhas, etc.</p>
]]></content:encoded>
			<wfw:commentRss>http://dourado.net/2011/05/02/adicionando-ou-removendo-o-www-da-url-com-htaccess/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Calcular tabela Price em PHP (PGTO no Excel)</title>
		<link>http://dourado.net/2010/11/20/calcular-tabela-price-em-php-pgto-no-excel/</link>
		<comments>http://dourado.net/2010/11/20/calcular-tabela-price-em-php-pgto-no-excel/#comments</comments>
		<pubDate>Sat, 20 Nov 2010 03:11:38 +0000</pubDate>
		<dc:creator>Diogo Dourado (XiS)</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[calcular]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[pgto]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[tabela price]]></category>

		<guid isPermaLink="false">http://www.dourado.net/?p=277</guid>
		<description><![CDATA[Um cliente me solicitou um sistema para simulação de emprestimos, até ae tudo bem. Me enviou uma planilha na qual estava  uma simulação utilizando a famosa tabela price, para isso usava uma função no EXCEL que é denominada PGTO. Esta função basicamente faz todos os calculos necessários para determinar o valor da parcela mensal a [...]]]></description>
			<content:encoded><![CDATA[<p>Um cliente me solicitou um sistema para simulação de emprestimos, até ae tudo bem. Me enviou uma planilha na qual estava  uma simulação utilizando a famosa <strong>tabela price</strong>, para isso usava uma função no EXCEL que é denominada <a  href="http://office.microsoft.com/pt-br/excel-help/pgto-HP005209215.aspx" target="_blank">PGTO</a>. Esta função basicamente faz todos os calculos necessários para determinar o valor da parcela mensal a ser paga.</p>
<p>Mas como em PHP não existe esta função PGTO, mãos a massa:</p>
<div class="codecolorer-container php default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:640px;height:400px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br />2<br />3<br />4<br />5<br />6<br />7<br />8<br />9<br />10<br />11<br />12<br />13<br />14<br />15<br />16<br />17<br />18<br />19<br />20<br />21<br /></div></td><td><div class="php codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #666666; font-style: italic;">// Funcao para Calcular valor da Parcela - Tabela Price</span><br />
<br />
<span style="color: #000000; font-weight: bold;">function</span> Price<span style="color: #009900;">&#40;</span><span style="color: #000088;">$Valor</span><span style="color: #339933;">,</span> <span style="color: #000088;">$Parcelas</span><span style="color: #339933;">,</span> <span style="color: #000088;">$Juros</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span><br />
<br />
<span style="color: #000088;">$Juros</span> <span style="color: #339933;">=</span> <span style="color: #990000;">bcdiv</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$Juros</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">100</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$E</span><span style="color: #339933;">=</span><span style="color:#800080;">1.0</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$cont</span><span style="color: #339933;">=</span><span style="color:#800080;">1.0</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$k</span><span style="color: #339933;">=</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span><span style="color: #000088;">$k</span><span style="color: #339933;">&lt;=</span><span style="color: #000088;">$Parcelas</span><span style="color: #339933;">;</span><span style="color: #000088;">$k</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><br />
<span style="color: #009900;">&#123;</span><br />
<span style="color: #000088;">$cont</span><span style="color: #339933;">=</span> <span style="color: #990000;">bcmul</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$cont</span><span style="color: #339933;">,</span><span style="color: #990000;">bcadd</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$Juros</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #000088;">$E</span><span style="color: #339933;">=</span><span style="color: #990000;">bcadd</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$E</span><span style="color: #339933;">,</span><span style="color: #000088;">$cont</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<span style="color: #000088;">$E</span><span style="color: #339933;">=</span><span style="color: #990000;">bcsub</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$E</span><span style="color: #339933;">,</span><span style="color: #000088;">$cont</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<br />
<span style="color: #000088;">$Valor</span> <span style="color: #339933;">=</span> <span style="color: #990000;">bcmul</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$Valor</span><span style="color: #339933;">,</span><span style="color: #000088;">$cont</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #b1b100;">return</span> <span style="color: #990000;">bcdiv</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$Valor</span><span style="color: #339933;">,</span><span style="color: #000088;">$E</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">15</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><br />
<span style="color: #009900;">&#125;</span><br />
<br />
<span style="color: #666666; font-style: italic;">// Exemplo de utilização</span><br />
<span style="color: #b1b100;">echo</span> Price<span style="color: #009900;">&#40;</span><span style="color: #000088;">$Valor</span><span style="color: #339933;">,</span> <span style="color: #000088;">$Parcelas</span><span style="color: #339933;">,</span> <span style="color: #000088;">$Juros</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></div></td></tr></tbody></table></div>
<p>Encontrei a solução na <a  href="http://forum.imasters.com.br/index.php?/topic/185911-tabela-price/" target="_blank">iMasters Fóruns</a> (em um post bem antigo por sinal), que por sua vez estava escrita em C++, apenas tive o trabalho de converter para PHP. Usei sempre os operadores matemáticos BC do PHP, para arbitrariamente utilizar até 15 casas decimais nos cálculos.</p>
<p>Para quem quiser conferir ou apenas conhecer por curiosidade o <strong>calculo</strong>, segue abaixo:</p>
<p>x=C*((1+i)^n)/ somatoria de (1+i)^k para k=0 ate k = n-1</p>
<p>Sendo: C = Valor, n = Parcelas, i = Juros</p>
<p>Agradecimento aos meus colaboradores <a  href="http://www.magnobr.com">Magno</a> e <a  href="http://twitter.com/danielmadu" target="_blank">Daniel</a> da <a  href="http://www.brainatwork.com.br">Brainatwork</a>, que ficaram pentelhando e dando palpites durante a conversão da função</p>
]]></content:encoded>
			<wfw:commentRss>http://dourado.net/2010/11/20/calcular-tabela-price-em-php-pgto-no-excel/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Copiar dados de um tabela para outra em MySQL</title>
		<link>http://dourado.net/2010/02/11/copiar-dados-de-um-tabela-para-outra-em-mysql/</link>
		<comments>http://dourado.net/2010/02/11/copiar-dados-de-um-tabela-para-outra-em-mysql/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 15:07:16 +0000</pubDate>
		<dc:creator>Diogo Dourado (XiS)</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[copiar]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[tabelas]]></category>

		<guid isPermaLink="false">http://www.dourado.net/?p=266</guid>
		<description><![CDATA[Hoje precisei copiar dados de uma tabela para outra. Mas como fazer isso facilmente atraves de linha de comando? &#8230; 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 [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje precisei <strong>copiar dados</strong> de uma tabela para outra. Mas como fazer isso facilmente atraves de linha de comando? &#8230; vou dizer, mas antes vamos as <strong>premissas</strong>:</p>
<p>* Não quero registros repetidos, neste caso o e-mail</p>
<p>* Não quero todos os dados da tabela Servidor (onde vou pegar os dados).</p>
<p>* So quero os e-mails começados com a letra &#8220;a&#8221;.</p>
<p><strong>Então, vamos a dica:</strong></p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:640px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap"><span style="color: #990099; font-weight: bold;">INSERT</span> <span style="color: #990099; font-weight: bold;">INTO</span> tabela2  <span style="color: #FF00FF;">&#40;</span>nome<span style="color: #000033;">,</span> email<span style="color: #FF00FF;">&#41;</span> <span style="color: #990099; font-weight: bold;">SELECT</span> nome<span style="color: #000033;">,</span> email <span style="color: #990099; font-weight: bold;">FROM</span> tabela1 <span style="color: #990099; font-weight: bold;">WHERE</span> <span style="color: #FF00FF;">&#40;</span>email <span style="color: #CC0099; font-weight: bold;">LIKE</span> <span style="color: #008000;">'a<span style="color: #008080; font-weight: bold;">%</span>'</span><span style="color: #FF00FF;">&#41;</span> <span style="color: #990099; font-weight: bold;">GROUP BY</span> email</div></td></tr></tbody></table></div>
<p>Logico que os dados acima são fictícios, mas funciona. A explicação basica é:</p>
<p>1- O comando INSERT como outro qualquer na tabela2 (a que vai receber os dados)</p>
<p>2- Em seguida vem um SELECT normal tambem, com os campos que desejo importar na mesma ordem que eu coloquei para inserir.</p>
<p>3- O WHERE para a condição dos e-mails começando com a letra &#8220;a&#8221;.</p>
<p>4- O GROUP BY para não repetir os e-mails. Poderia usar tambem o DISTINCT ou similar, fica a critério do fregues.</p>
<p>Se tiver alguma duvida sobre MySQL pode perguntar, se eu souber irei responder com certeza.</p>
]]></content:encoded>
			<wfw:commentRss>http://dourado.net/2010/02/11/copiar-dados-de-um-tabela-para-outra-em-mysql/feed/</wfw:commentRss>
		<slash:comments>34</slash:comments>
		</item>
		<item>
		<title>Retorno Automático PagSeguro em PHP/MySQL funcionando</title>
		<link>http://dourado.net/2009/10/14/retorno-automatico-pagseguro-em-phpmysql-funcionando/</link>
		<comments>http://dourado.net/2009/10/14/retorno-automatico-pagseguro-em-phpmysql-funcionando/#comments</comments>
		<pubDate>Wed, 14 Oct 2009 16:09:07 +0000</pubDate>
		<dc:creator>Diogo Dourado (XiS)</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[automatico]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[pagseguro]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[retorno]]></category>

		<guid isPermaLink="false">http://www.dourado.net/?p=260</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<h4><strong><span style="color: #ff0000;">ATENÇÃO: Já esta disponivel a versão 2.0 deste script, mais segurança e agora coletando informações dos produtos, <a  href="http://dourado.net/2011/06/09/retorno-automatico-de-dados-do-pagseguro-em-phpmysql-com-produtos-versao-2-0/">clique aqui</a>.</span></strong></h4>
<p>Que o <a  href="https://pagseguro.uol.com.br/?ind=528005">PagSeguro</a> é 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 <a  href="https://pagseguro.uol.com.br/?ind=528005">PagSeguro</a> tenta ser claro e explicativo, mas o fato é, o script disponível no site simplismente <strong>não funciona</strong>.</p>
<h4><strong><span style="color: #ff0000;">ATENÇÃO: Já esta disponivel a versão 2.0 deste script, mais segurança e agora coletando informações dos produtos, <a  href="http://dourado.net/2011/06/09/retorno-automatico-de-dados-do-pagseguro-em-phpmysql-com-produtos-versao-2-0/">clique aqui</a>.</span></strong></h4>
<p><strong>Vamos aos erros&#8230;</strong></p>
<p>No script PHP do <a  href="https://pagseguro.uol.com.br/?ind=528005">PagSeguro</a> eles usam uma função que se chama, <strong>tep_not_null()</strong> 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 <a  href="http://www.oscommerce.com/">OsCommerce</a> (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.</p>
<p>Erro apresentado: <em>Fatal error: Call to undefined function tep_not_null() in /teste/pagseguro.php on line 53</em></p>
<p>&#8230; existem outras melhorias que podem ser feitas no script PHP oferecido pelo PagSeguro, não irei comentar, irei implementar mais abaixo, ok?</p>
<p>No script de criação de tabelas MySQL do <a  href="https://pagseguro.uol.com.br/?ind=528005">PagSeguro</a> existe alguns erros básicos e curiosidades tambem. O primeiro é o seguinte, para que existe a tabela <em>PagSeguroTransacoesProdutos</em> sendo que em nenhum dos scripts de linguagem oferecidos por ele existe a inclusão de dados nesta tabela? Com certeza <em>fail</em>. Na outra tabela <em>PagSeguroTransacoes</em>, esta sim é utilizada, mesmo assim com erros gritantes. Como por exemplo, o campo <em>TransacaoID</em> como chave primaria. Porque erro? Porque o <a  href="https://pagseguro.uol.com.br/?ind=528005">PagSeguro</a> 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.</p>
<p>Erro apresentado: <em>#1062 &#8211; Duplicate entry &#8216;TransacaoID&#8217; for key 1 </em></p>
<p>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.</p>
<p>Coloquei o dedo na ferida, e agora? E agora vamos a&#8230;</p>
<p>&nbsp;</p>
<p><strong>Implementação</strong></p>
<p>Tentei comentar o código de forma simples e sucinta, então qualquer explicação seria chuver no molhado, vamos lá.</p>
<p>N/D</p>
<p>Basicamente, ele se conecta no MySQL, depois checa através do CURL se foi realmente o <a  href="https://pagseguro.uol.com.br/?ind=528005">PagSeguro</a> que enviou a postagem, recebe os dados via post e grava os dados na tabela.</p>
<p>&#8230; mas que tabela? Ahh sim&#8230; vamos a criação da tabela do MySQL.</p>
<div class="codecolorer-container mysql default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:640px;"><table cellspacing="0" cellpadding="0"><tbody><tr><td style="padding:5px;text-align:center;color:#888888;background-color:#EEEEEE;border-right: 1px solid #9F9F9F;font: normal 12px/1.4em Monaco, Lucida Console, monospace;"><div>1<br /></div></td><td><div class="mysql codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">&nbsp;</div></td></tr></tbody></table></div>
<p>N/D</p>
<p>Na tabela acima todos os campos são basicamente os dados recebidos do <a  href="https://pagseguro.uol.com.br/?ind=528005">PagSeguro</a>. Existem mais campos adicionais que vem em POST tambem que não quis colocar, se você tiver conhecimento basta ler o manual do <a  href="https://pagseguro.uol.com.br/?ind=528005">PagSeguro</a> e adicionar os campos.</p>
<p>Os indices que coloquei foram 3. O primeiro de tipo <em>UNIQUE</em> em <em>TransacaoID</em> e <em>StatusTransacao</em> 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 (<em>KEY</em>) apenas, para indexar e deixar sua busca pelos registros mais rapidas. O primeiro é na <em>Referencia</em>, campo que você envia ao <a  href="https://pagseguro.uol.com.br/?ind=528005">PagSeguro</a> na hora da compra para vincular o pagamento a ele, seria nossa chave. O segundo é um campo criado por mim, <em>status</em> 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.</p>
<p>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.</p>
<h4><strong><span style="color: #ff0000;">ATENÇÃO: Já esta disponivel a versão 2.0 deste script, mais segurança e agora coletando informações dos produtos, <a  href="http://dourado.net/2011/06/09/retorno-automatico-de-dados-do-pagseguro-em-phpmysql-com-produtos-versao-2-0/">clique aqui</a>.</span></strong></h4>
<p><a  href="http://dourado.net/download/pagseguro_retorno.rar"><img class="alignleft size-full wp-image-264" title="download" src="http://www.dourado.net/wp-content/uploads/2009/10/download48.png" alt="download" width="48" height="48" /> Faça download do código aqui.</a></p>
<p>&#8230; 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.</p>
<p>Have Fun!</p>
<h4><strong><span style="color: #ff0000;">ATENÇÃO: Já esta disponivel a versão 2.0 deste script, mais segurança e agora coletando informações dos produtos, <a  href="http://dourado.net/2011/06/09/retorno-automatico-de-dados-do-pagseguro-em-phpmysql-com-produtos-versao-2-0/">clique aqui</a>.</span></strong></h4>
]]></content:encoded>
			<wfw:commentRss>http://dourado.net/2009/10/14/retorno-automatico-pagseguro-em-phpmysql-funcionando/feed/</wfw:commentRss>
		<slash:comments>101</slash:comments>
		</item>
		<item>
		<title>Webinar sobre otimização de sites</title>
		<link>http://dourado.net/2009/07/22/webinar-sobre-otimizacao-de-sites/</link>
		<comments>http://dourado.net/2009/07/22/webinar-sobre-otimizacao-de-sites/#comments</comments>
		<pubDate>Wed, 22 Jul 2009 16:28:41 +0000</pubDate>
		<dc:creator>Diogo Dourado (XiS)</dc:creator>
				<category><![CDATA[www]]></category>
		<category><![CDATA[adsense]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[otimização]]></category>
		<category><![CDATA[sites]]></category>
		<category><![CDATA[video]]></category>
		<category><![CDATA[webinar]]></category>

		<guid isPermaLink="false">http://www.dourado.net/?p=256</guid>
		<description><![CDATA[O Google disponibilizou o video no Youtube do seminário online (Webminar) sobre Otimização de sites. O seminário foi apresentado na última sexta-feira (17/07). Todos os associados do Adsense receberam o convite, mas acho que nem todos participaram. Vale a pena, principalmente para quem não conhece o processo de preços aplicados no Adsense, funcionamento e melhores [...]]]></description>
			<content:encoded><![CDATA[<p>O Google disponibilizou o video no Youtube do seminário online (Webminar) sobre <strong>Otimização de sites</strong>. O seminário foi apresentado na última sexta-feira (17/07). Todos os associados do Adsense receberam o convite, mas acho que nem todos participaram.</p>
<p>Vale a pena, principalmente para quem não conhece o processo de preços aplicados no Adsense, funcionamento e melhores posicionamento dos anúncios. E lógico, que participou poderá rever e imprimir melhor o conhecimento. Vamos ao video:</p>
<p><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/w9v19EiPTv8&#038;hl=pt-br&#038;fs=1&#038;"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/w9v19EiPTv8&#038;hl=pt-br&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
]]></content:encoded>
			<wfw:commentRss>http://dourado.net/2009/07/22/webinar-sobre-otimizacao-de-sites/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

