<?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>rafaelWendel</title>
	<atom:link href="http://www.rafaelwendel.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rafaelwendel.com</link>
	<description>blog sobre programação e tecnologia</description>
	<lastBuildDate>Tue, 14 Feb 2012 14:14:56 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Função php para gerar url encurtadas com a API do migre.me</title>
		<link>http://www.rafaelwendel.com/2012/02/funcao-php-para-gerar-url-encurtadas-com-a-api-do-migre-me/</link>
		<comments>http://www.rafaelwendel.com/2012/02/funcao-php-para-gerar-url-encurtadas-com-a-api-do-migre-me/#comments</comments>
		<pubDate>Tue, 14 Feb 2012 14:14:56 +0000</pubDate>
		<dc:creator>Rafael Wendel Pinheiro</dc:creator>
				<category><![CDATA[api]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[url encurtadas]]></category>

		<guid isPermaLink="false">http://www.rafaelwendel.com/?p=324</guid>
		<description><![CDATA[Com a febre de redes sociais, twitter, facebook, Google Plus, etc, as url encurtadas se tornaram uma ferramenta importante e até mesmo vital para os desenvolvedores, blogueiros e usuários finais de plantão. Com as técnicas de SEO sendo cada vez mais utilizadas, a tendência é que os sites utilizem cada vez mais url longas onde [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Com a febre de redes sociais, twitter, facebook, Google Plus, etc, as <strong>url encurtadas</strong> se tornaram uma ferramenta importante e até mesmo vital para os desenvolvedores, blogueiros e usuários finais de plantão.</p>
<p style="text-align: justify;">Com as técnicas de SEO sendo cada vez mais utilizadas, a tendência é que os sites utilizem cada vez mais url longas onde a mesma traz em sua estrutura informações relevante sobre o seu conteúdo visando maior organização e otimização para mecanismos de busca.</p>
<p style="text-align: justify;"><span id="more-324"></span></p>
<p style="text-align: justify;">Isso gera um desconforto na divulgação dessas URL em redes sociais, principalmente o <strong>Twitter</strong>, porque vai exatamente na <strong>contra-mão. </strong>Como o microblog permite apenas 140 caracteres em cada atualização de status, talvez o espaço se torne insuficiente.</p>
<p style="text-align: justify;">Felizmente existem ferramentas e sites que geram as famosas <strong>url encurtadas, </strong>como o <a title="Migre.me" href="http://migre.me" target="_blank">http://migre.me</a>. Url encurtadas são <em><span style="text-decoration: underline;">strings</span>, </em>geralmente com menos de 20 caracteres, que gerenciam o redirecionamento para uma URL considerada normal. Por exemplo, o link <strong>http://www.rafaelwendel.com</strong> se torna <strong style="text-align: justify;">migre.me/7V9wO</strong> . Assim, mesmo você digitando o segundo link (nada sugestível) você chegará à página inicial do meu blog <img src='http://www.rafaelwendel.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: justify;">Pois bem. Pensando na necessidade em se ter e gerar as URL encurtadas, resolvi entrar no blog oficial do <strong>migre.me</strong> na parte da <strong>API (<a title="API do migre.me" href="http://migreme.com.br/blog/category/api/" target="_blank">http://migreme.com.br/blog/category/api/</a>)</strong> e acabei verificando que sua utilização é ridícula de fácil.</p>
<p style="text-align: justify;">Com o conhecimento adquirido, criei uma função <strong>php </strong>onde passo uma &#8220;URL normal&#8221; e ela, através da API do migre.me, retorna a URL encurtada da mesma.</p>
<p style="text-align: justify;">Aí vai a função:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
&nbsp;
<span style="color: #009933; font-style: italic;">/**
    * Acessa a API do migre.me e gera uma URL encurtada
    * @author Rafael Wendel Pinheiro
    * @param  $url URL a ser encurtada
    * @return String URL encurtada ou informações do erro
*/</span>	
<span style="color: #000000; font-weight: bold;">function</span> gera_url_encurtada<span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$url</span> <span style="color: #339933;">=</span> <span style="color: #990000;">urlencode</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$url</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$xml</span> <span style="color: #339933;">=</span>  <span style="color: #990000;">simplexml_load_file</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;http://migre.me/api.xml?url=<span style="color: #006699; font-weight: bold;">$url</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$xml</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">error</span> <span style="color: #339933;">!=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$xml</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">errormessage</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$xml</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">migre</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$url_encurtada_1</span> <span style="color: #339933;">=</span> gera_url_encurtada<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://www.rafaelwendel.com'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$url_encurtada_1</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// retorna http://migre.me/7VaFd</span>
&nbsp;
<span style="color: #000088;">$url_encurtada_2</span> <span style="color: #339933;">=</span> gera_url_encurtada<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'http://www.rafaelwendel.com/2012/02/otimize-o-banco-de-dados-do-seu-wordpress-com-o-wp-optimize/'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #000088;">$url_encurtada_2</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">// retorna http://migre.me/7VaFe</span></pre></div></div>

</p>
<p style="text-align: justify;">Como você pode ver, para utilizar a função basta passar como parâmetro a URL que deseja encurtar. Em caso de sucesso ela te retornará a URL encurtada. Caso contrário ele te retorna informações sobre o erro ocorrido. A função trabalha com informações em XML e uso o <strong>simplexml_load_file</strong> (que já foi abordado em outros posts) para executar a API.</p>
<p style="text-align: justify;">Antes de terminar vaí uma ressalta: existe um limite de 30 URLs por hora para usuários comuns (free) que é verificado através do IP. Então fique atento a esse limite.</p>
<p style="text-align: justify;">Espero que tenham gostado.</p>
<p style="text-align: justify;">Abs.</p>
<p>Siga-me no twitter: <a href="http://www.twitter.com/rafaelwendel" target="blank">@rafaelwendel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rafaelwendel.com/2012/02/funcao-php-para-gerar-url-encurtadas-com-a-api-do-migre-me/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Otimize o banco de dados do seu wordpress com o Wp-Optimize</title>
		<link>http://www.rafaelwendel.com/2012/02/otimize-o-banco-de-dados-do-seu-wordpress-com-o-wp-optimize/</link>
		<comments>http://www.rafaelwendel.com/2012/02/otimize-o-banco-de-dados-do-seu-wordpress-com-o-wp-optimize/#comments</comments>
		<pubDate>Mon, 13 Feb 2012 21:42:16 +0000</pubDate>
		<dc:creator>Rafael Wendel Pinheiro</dc:creator>
				<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[plugins]]></category>

		<guid isPermaLink="false">http://www.rafaelwendel.com/?p=320</guid>
		<description><![CDATA[Você que utiliza a plataforma wordpress para o seu blog, portal de notícias, página pessoal ou qualquer outra finalidade já deve ter percebido que mesmo você tendo um número absoluto de posts, na tabela &#8220;wp_posts&#8221; do banco de dados da aplicação o número de registros chega a ser 2, 3 ou até 5 vezes maior. [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Você que utiliza a plataforma <strong>wordpress</strong> para o seu blog, portal de notícias, página pessoal ou qualquer outra finalidade já deve ter percebido que mesmo você tendo um número absoluto de <strong>posts</strong>, na tabela <strong>&#8220;wp_posts&#8221; </strong>do banco de dados da aplicação o número de registros chega a ser 2, 3 ou até 5 vezes maior.<a href="http://www.rafaelwendel.com/wp-content/uploads/2012/02/wordpress-tools.jpg"><img class="alignright size-full wp-image-321" title="wordpress-tools" src="http://www.rafaelwendel.com/wp-content/uploads/2012/02/wordpress-tools.jpg" alt="" width="222" height="150" /></a></p>
<p style="text-align: justify;">Isso acontece porque a cada vez que você <strong>edita </strong>um determinado post, o wordpress ao invés de dar um <strong>update </strong>na entrada, ele cria uma nova entrada na tabela e apenas altera o <strong>status </strong>da entrada anterior para <strong>&#8220;rascunho&#8221;</strong>.</p>
<p style="text-align: justify;"><span id="more-320"></span></p>
<p style="text-align: justify;">Assim, para cada edição de um post você terá um registro no banco de dados, gerando espaço desnecessário. Com o decorrer do tempo sua aplicação pode ficar mais lenta. E todos sabemos que isso traz alguns prejuízos.</p>
<p style="text-align: justify;">É por isso que hoje vou falar a respeito de um plugin muito interessante chamado <strong>Wp-Optimize. </strong>Esse plugin nos permite de forma bem intuitiva<strong> excluir</strong> todos os <strong>posts de rascunho </strong>do banco de dados.</p>
<p style="text-align: justify;">Outra vantagem do plugin: <strong>otimizar as tabelas do banco de dados</strong>. Tabelas com grande número de registros precisam periodicamente de uma otimizada para <em>&#8220;re-organizar&#8221;</em> os índices. Isso deixa o acesso ao banco mais rápido também.</p>
<p style="text-align: justify;">Para baixar o plugin, acesse a página oficial: <a title="WP-OPTIMIZE" href="http://wordpress.org/extend/plugins/wp-optimize/" target="_blank">http://wordpress.org/extend/plugins/wp-optimize/</a></p>
<p style="text-align: justify;">Depois de instalado, será adicionado um ítem no menu do <strong>wp-admin </strong>com o título &#8220;WP-Optimize&#8221;. Clicando nele, você já verá um relatório da atual situação do seu banco de dados e opções para já <em>rodar</em> os processos de otimização.</p>
<p style="text-align: justify;"><strong>Dica:</strong> Dificilmente a execução de algum processo do WP-Optimize comprometerá a integridade da sua base de dados. Mas como precaução nunca é demais, <strong>sempre execute um <em>backup </em>antes de utilizar o plugin</strong>.</p>
<p style="text-align: justify;">Espero que aproveitem a dica.</p>
<p style="text-align: justify;">Abs</p>
<p>Siga-me no twitter: <a href="http://www.twitter.com/rafaelwendel" target="blank">@rafaelwendel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rafaelwendel.com/2012/02/otimize-o-banco-de-dados-do-seu-wordpress-com-o-wp-optimize/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Vídeo-aula: Aprenda a criar um editor de arquivos online em php</title>
		<link>http://www.rafaelwendel.com/2012/02/video-aula-aprenda-a-criar-um-editor-de-arquivos-online-em-php/</link>
		<comments>http://www.rafaelwendel.com/2012/02/video-aula-aprenda-a-criar-um-editor-de-arquivos-online-em-php/#comments</comments>
		<pubDate>Fri, 10 Feb 2012 01:10:02 +0000</pubDate>
		<dc:creator>Rafael Wendel Pinheiro</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[video-aulas]]></category>
		<category><![CDATA[editor online]]></category>
		<category><![CDATA[vídeo-aula]]></category>

		<guid isPermaLink="false">http://www.rafaelwendel.com/?p=318</guid>
		<description><![CDATA[Olá pessoal. Hoje estou publicando mais uma vídeo-aula que acabo de fazer. Nela ensino a vocês como criar um editor de arquivos web que pode ser acessado e executado a partir do próprio site. É semelhante ao editor dos arquivos de templates que o WordPress oferece. Já imaginou você poder abrir e editar o código-fonte  [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal. Hoje estou publicando mais uma <strong>vídeo-aula</strong> que acabo de fazer. Nela ensino a vocês como criar um <strong>editor de arquivos web</strong> que pode ser acessado e executado a partir do próprio site. É <strong>semelhante</strong> ao editor dos arquivos de templates que o <strong>WordPress</strong> oferece.</p>
<p style="text-align: justify;">Já imaginou você poder abrir e editar o código-fonte  dos arquivos de seu site a partir de qualquer lugar? Muito interessante né? Então aproveite essa vídeo-aula. E lembre-se: qualquer problema é só postar sua dúvida na caixa de comentários.</p>
<p style="text-align: justify;"><span id="more-318"></span></p>
<p style="text-align: center;"><iframe width="420" height="315" src="http://www.youtube.com/embed/RxUyIckkcBs" frameborder="0" allowfullscreen></iframe></p>
<p>Siga-me no twitter: <a href="http://www.twitter.com/rafaelwendel" target="blank">@rafaelwendel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rafaelwendel.com/2012/02/video-aula-aprenda-a-criar-um-editor-de-arquivos-online-em-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Corrigindo erro de acesso ao phpMyAdmin no Wamp</title>
		<link>http://www.rafaelwendel.com/2012/02/corrigindo-erro-de-acesso-ao-phpmyadmin-no-wamp/</link>
		<comments>http://www.rafaelwendel.com/2012/02/corrigindo-erro-de-acesso-ao-phpmyadmin-no-wamp/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 21:09:50 +0000</pubDate>
		<dc:creator>Rafael Wendel Pinheiro</dc:creator>
				<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[dica rápida]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[phpMyAdmin]]></category>

		<guid isPermaLink="false">http://www.rafaelwendel.com/?p=315</guid>
		<description><![CDATA[Há algumas horas atrás tive um pequeno problema aqui no meu ambiente local para execução de aplicações php. Tenho em minha máquina o wampserver instalado e geralmente utilizo o MySQL Administrator para manipular minhas bases de dados. Porém por questões específicas precisei acessar o phpMyAdmin (que já vem acoplado no pacote do wamp) e notei [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Há algumas horas atrás tive um pequeno problema aqui no meu ambiente local para execução de aplicações php. Tenho em minha máquina o <strong>wampserver</strong> instalado e geralmente utilizo o <strong>MySQL Administrator</strong> para manipular minhas bases de dados. Porém por questões específicas precisei acessar o <strong>phpMyAdmin</strong> (que já vem acoplado no pacote do wamp) e notei que um erro era gerado.</p>
<p style="text-align: justify;">Trata-se do: <strong>#1045 &#8211; Access denied for user &#8216;root&#8217;@'localhost&#8217; (using password: NO)</strong></p>
<p style="text-align: justify;">Percebi que esse erro ocorre porque antes de instalar o pacote wamp (que dentre outros aplicativos instala o MySQL) eu já havia instalado e configurado o MySQL manualmente, inclusive definindo senhas e permisões para usuários.</p>
<p style="text-align: justify;"><span id="more-315"></span></p>
<p style="text-align: justify;">E o wamp quando instala o phpMyAdmin gera um arquivo de configuração com o usuário master do MySQL (o root), porém não define uma senha para ele. E para resolver o problema #1045 teremos de ir nesse arquivo e alterá-lo manualmente.</p>
<p style="text-align: justify;">Encontre o diretório onde está os arquivos do phpMyAdmin (Geralmente em C:\wamp\apps\). Abra o arquivo <strong>config.inc.php </strong>e procure a linha com o seguinte comando:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>73
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$cfg</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'Servers'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#93;</span>      <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;">Preencha dentro das aspas a senha do seu usuário <strong>&#8220;root&#8221;</strong>. Salve o arquivo e tente novamente.</p>
<p style="text-align: justify;"><strong>Detalhe:</strong> dentro do diretório <strong>www </strong>há também um diretório <strong>phpMyAdmin </strong>com arquivos referentes ao aplicativo (inclusive o <strong>config.inc.php</strong>) mas <strong>pelo menos no meu caso</strong> a correção nesse local não surte efeito.</p>
<p style="text-align: justify;">Espero ter ajudado</p>
<p style="text-align: justify;">Abs.</p>
<p>Siga-me no twitter: <a href="http://www.twitter.com/rafaelwendel" target="blank">@rafaelwendel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rafaelwendel.com/2012/02/corrigindo-erro-de-acesso-ao-phpmyadmin-no-wamp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando uma conta de hospedagem com a api do WHM</title>
		<link>http://www.rafaelwendel.com/2012/02/criando-uma-conta-de-hospedagem-com-a-api-do-whm/</link>
		<comments>http://www.rafaelwendel.com/2012/02/criando-uma-conta-de-hospedagem-com-a-api-do-whm/#comments</comments>
		<pubDate>Mon, 06 Feb 2012 14:47:57 +0000</pubDate>
		<dc:creator>Rafael Wendel Pinheiro</dc:creator>
				<category><![CDATA[api]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[whm]]></category>
		<category><![CDATA[xml]]></category>

		<guid isPermaLink="false">http://www.rafaelwendel.com/?p=306</guid>
		<description><![CDATA[Há um tempo atrás publiquei dois posts aqui no blog ensinando a utilizar a api do WHM para listar as contas de todos os clientes e para ver as informações de determinado cliente. Pois bem, continuando com a série de posts utilizando a api do WHM hoje vou mostrar pra vocês como criar uma conta [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Há um tempo atrás publiquei dois posts aqui no blog ensinando a utilizar a api do WHM para listar as contas de todos os clientes e para ver as informações de determinado cliente.</p>
<p style="text-align: justify;">Pois bem, continuando com a série de posts utilizando a api do WHM hoje vou mostrar pra vocês como criar uma conta de hospedagem para um cliente em php de forma descomplicada.</p>
<p style="text-align: justify;"><span id="more-306"></span></p>
<p style="text-align: justify;">Antes de começarmos ressalto aqui que a classe php que utilizarei não é a mesma dos outros dois posts. Agora vamos implementar nosso script com a API XML oferecida pelo próprio site oficial do CPANEL/WHM. Para fazer o download, <a title="Clique para baixar o XML API" href="http://files.rafaelwendel.com/xmlapi.php.txt" target="blank">clique aqui</a>. (obs: não se esqueça de tirar a extensão <strong>txt</strong> no final do arquivo</p>
<p style="text-align: justify;">Bom, então vamos lá.</p>
<p style="text-align: justify;">Teremos de implementar 2 arquivos: Um com o formulário onde preencheremos as informações do cliente (domínio, usuário, senha, plano, etc) e outro onde vamos capturar esses dados e chamar a API para salvar.</p>
<p style="text-align: justify;">Primeiro: <strong>index.php </strong>(formulário)</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'xmlapi.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$whm</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> xmlapi<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dominio_no_whm'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'usuario'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'senha'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$planos</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$whm</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">listpkgs</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000000; font-weight: bold;">?&gt;</span>
&nbsp;
&lt;html&gt;
  &lt;head&gt;
    &lt;title&gt;WHM - Cadastrar conta de cliente&lt;/title&gt;
    &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=UTF-8&quot;&gt;
  &lt;/head&gt;
  &lt;body&gt;
  &lt;h1&gt;Cadastrar conta de hospedagem&lt;/h1&gt;
&nbsp;
  &lt;form name=&quot;form1&quot; method=&quot;post&quot; action=&quot;cadastrar.php&quot;&gt;
  &lt;input type=&quot;hidden&quot; name=&quot;acao&quot; value=&quot;cadastrar&quot; /&gt;
&nbsp;
  &lt;label&gt;Domínio:&lt;/label&gt;&lt;br /&gt;
  &lt;input type=&quot;text&quot; name=&quot;dominio&quot; /&gt;&lt;br /&gt;&lt;br /&gt;
&nbsp;
  &lt;label&gt;Email:&lt;/label&gt;&lt;br /&gt;
  &lt;input type=&quot;text&quot; name=&quot;email&quot; /&gt;&lt;br /&gt;&lt;br /&gt;
&nbsp;
  &lt;label&gt;Usuário:&lt;/label&gt;&lt;br /&gt;
  &lt;input type=&quot;text&quot; name=&quot;usuario&quot; /&gt;&lt;br /&gt;&lt;br /&gt;
&nbsp;
  &lt;label&gt;Senha:&lt;/label&gt;&lt;br /&gt;
  &lt;input type=&quot;password&quot; name=&quot;senha&quot; /&gt;&lt;br /&gt;&lt;br /&gt;
&nbsp;
  &lt;label&gt;Plano:&lt;/label&gt;&lt;br /&gt;
  &lt;select name=&quot;plano&quot;&gt;
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$planos</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$planos</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$plano</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">:</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
        &lt;option value=&quot;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$plano</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&quot;&gt;<span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$plano</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">name</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>&lt;/option&gt;
    <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">endforeach</span><span style="color: #339933;">;</span> <span style="color: #b1b100;">endif</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span>
  &lt;/select&gt;
  &lt;br /&gt;&lt;br /&gt;
  &lt;input type=&quot;submit&quot; value=&quot;Cadastrar&quot; /&gt;
  &lt;/form&gt;
  &lt;/body&gt;
&lt;/html&gt;</pre></td></tr></table></div>

</p>
<p style="text-align: justify;">No formulário coloco os campos para as informaçoes do cliente (conta). Já nesse arquivo já chamos a classe xmlapi.php para poder listar os planos (pacotes). Esse formulário será submetido para o arquivo <strong>cadastrar.php</strong> (Obs: criei um campo <em>hidden </em>chamado ação com o valor <em>cadastrar </em>para verificar se realmente o formulário foi submetido)</p>
<p style="text-align: justify;">Agora a implementação do arquivo <strong>cadastrar.php</strong></p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #b1b100;">require_once</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'xmlapi.php'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'acao'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #0000ff;">'cadastrar'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$whm</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> xmlapi<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'dominio_no_whm'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'usuario'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'senha'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$acc</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'domain'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'dominio'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$acc</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'username'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'usuario'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$acc</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'password'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'senha'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$acc</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'contactemail'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'email'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$acc</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'msel'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'plano'</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #000088;">$verifica</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$whm</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">createacct</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$acc</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$verifica</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">result</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">status</span> <span style="color: #339933;">!=</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Conta para o domínio &lt;strong&gt;'</span><span style="color: #339933;">.</span> <span style="color: #000088;">$acc</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'domain'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;/strong&gt; foi criado com sucesso!'</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Erro ao tentar criar conta. Tente novamente! Erro: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$verifica</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">result</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">statusmsg</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;">Mais uma vez importo o <strong>xmlapi.php</strong>. Verifico se o formulário foi submetido e em caso afirmativo eu crio um array (<strong>$acc</strong>) tendo como índice os parâmetros e nos valores as informações da conta a ser criada. Depois executo o método<strong> createacct</strong> passando o array <strong>$acc </strong>como parâmetro.</p>
<p style="text-align: justify;">Por fim, faço uma verificação no <strong>status</strong> do retorno para ver se a conta foi criada ou se ocorreu algum erro.</p>
<p style="text-align: justify;">E pronto!</p>
<p style="text-align: justify;">Mais uma tarefa simples e fácil de ser utilizada através da API do WHM.</p>
<p style="text-align: justify;">Espero que tenham gostado. Qualquer dúvida estou à disposição na caixa de comentários.</p>
<p style="text-align: justify;">Abs</p>
<p style="text-align: justify;">Siga-me no twitter: <a href="http://www.twitter.com/rafaelwendel" target="blank">@rafaelwendel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rafaelwendel.com/2012/02/criando-uma-conta-de-hospedagem-com-a-api-do-whm/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Classe php para importar informações de um vídeo do youtube (Vídeo-aula)</title>
		<link>http://www.rafaelwendel.com/2012/01/classe-php-para-importar-informacoes-de-um-video-do-youtube-video-aula/</link>
		<comments>http://www.rafaelwendel.com/2012/01/classe-php-para-importar-informacoes-de-um-video-do-youtube-video-aula/#comments</comments>
		<pubDate>Wed, 25 Jan 2012 13:21:21 +0000</pubDate>
		<dc:creator>Rafael Wendel Pinheiro</dc:creator>
				<category><![CDATA[classes]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[video-aulas]]></category>
		<category><![CDATA[vídeo-aulas]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://www.rafaelwendel.com/?p=300</guid>
		<description><![CDATA[Olá pessoal! Faz tempo que não posto nada devido às festividades e viagens de final de ano mas finalmente hoje iniciarei o 2012 aqui no blog. E nada melhor para celebrar um novo ano do que uma vídeo-aula feita sobre medida para vocês que estão sempre por aqui. E nessa vídeo-aula eu apresento uma classe [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Olá pessoal! Faz tempo que não posto nada devido às festividades e viagens de final de ano mas finalmente hoje iniciarei o 2012 aqui no blog.</p>
<p style="text-align: justify;">E nada melhor para celebrar um novo ano do que uma <strong>vídeo-aula</strong> feita sobre medida para vocês que estão sempre po<a href="http://www.rafaelwendel.com/wp-content/uploads/2012/01/youtube.png"><img class="alignright size-full wp-image-301" title="youtube" src="http://www.rafaelwendel.com/wp-content/uploads/2012/01/youtube.png" alt="" width="128" height="128" /></a>r aqui.</p>
<p style="text-align: justify;">E nessa vídeo-aula eu apresento uma <strong>classe php</strong> que criei e que tem como objetivo buscar informações de um determinado vídeo do <strong>Youtube</strong>, como descrição, tags, imagem, tipo e etc, tudo via <strong>CURL</strong>. Além dessas informações a classe é capaz de devolver o <strong>código de incorporação (embed) do vídeo.</strong></p>
<p style="text-align: justify;"><span id="more-300"></span></p>
<p style="text-align: justify;">Abaixo está o vídeo e logo a seguir o código da classe.</p>
<p style="text-align: justify;">Obs: Peço desculpas pois na hora de converter o vídeo no camtasia ele cortou algumas partes nas laterais. Mas dá para acompanhar tranquilo.</p>
<p style="text-align: justify;"><iframe width="420" height="315" src="http://www.youtube.com/embed/munzSSkjPIE" frameborder="0" allowfullscreen></iframe></p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #009933; font-style: italic;">/**
 * Classe de integração que importa as tags e o embed de um vídeo do Youtube
 *
 * @author Rafael Wendel Pinheiro &lt;rafaelwendel@hotmail.com&gt; &lt;www.rafaelwendel.com&gt;
 * @version 1.0
 */</span>
<span style="color: #000000; font-weight: bold;">class</span> Youtube <span style="color: #009900;">&#123;</span>
&nbsp;
     <span style="color: #009933; font-style: italic;">/**
     * URL do vídeo no Youtube
     * @access private
     * @var String
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$link</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Armazena as tags referentes ao vídeo
     * @access private
     * @var array
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$tags</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Armazena informações referentes à erros
     * @access private
     * @var array
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$erro</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Método construtor da classe Youtube.
     * @access public
     * @param String $link URL do vídeo no Youtube (OBS: Não utilize URL encurtada)
     * @return void
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __construct<span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setLink</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">loadTags</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Pegar a URL do vídeo que está sendo utilizado
     * @access public
     * @return String a URL do vídeo
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getLink<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Definir a URL do vídeo no Youtube
     * @access public
     * @param String $link a URL do vídeo
     * @return mixed false em caso de URL inválida
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setLink<span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #990000;">strstr</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$link</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;youtube.com&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setErro</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'URL inválida'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$link</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Capturar o(s) erro(s)
     * @access public
     * @return Array
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getErro<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">erro</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Definir uma mensagem de erro
     * @access public
     * @param String $erro
     * @return void
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> setErro<span style="color: #009900;">&#40;</span><span style="color: #000088;">$erro</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">erro</span><span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$erro</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Armazena as tags importadas na variável $tags
     * @access private
     * @param Array $tags
     * @return void
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> setTags<span style="color: #009900;">&#40;</span><span style="color: #000088;">$tags</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">is_array</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tags</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tags</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$prop</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
               <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tags</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$prop</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">repairTags</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Capturar as tags do vídeo
     * @access public
     * @return mixed Arrays com tags ou false em caso de array vazio
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> getTags<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tags</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tags</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Chamar a execução da URL e setar as tags em caso de sucesso
     * @access private
     * @return mixed False em casso de erros
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> loadTags<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">empty</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setErros</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'URL inválida'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$propertys</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">get_propertys_tags</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">in_array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'noindex'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$propertys</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setErro</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'URL inválida'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setTags</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$propertys</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Repara os nomes dos indices do array $tags
     * @access private
     * @return void
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> repairTags<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tags</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$tags</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tags</span><span style="color: #339933;">;</span>
            <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$tags</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$prop</span> <span style="color: #339933;">=&gt;</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #000088;">$nome</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">':'</span><span style="color: #339933;">,</span> <span style="color: #000088;">$prop</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000088;">$nome</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$nome</span><span style="color: #009900;">&#91;</span><span style="color: #990000;">count</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$nome</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
&nbsp;
                <span style="color: #000088;">$new</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$nome</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
            <span style="color: #009900;">&#125;</span>
            <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">tags</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$new</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Pega o conteúdo do link do Youtube via CURL
     * @access private
     * @return String $data Conteúdo lido
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> file_get_contents_curl<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$ch</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_init</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_HEADER<span style="color: #339933;">,</span> <span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_RETURNTRANSFER<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: #990000;">curl_setopt</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #339933;">,</span> CURLOPT_URL<span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$data</span> <span style="color: #339933;">=</span> <span style="color: #990000;">curl_exec</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #990000;">curl_close</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$ch</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$data</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Lê o conteúdo recuperado e extrai as tags do vídeo
     * @access private
     * @return Array As Tags do vídeo
     */</span>
    <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000000; font-weight: bold;">function</span> get_propertys_tags<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$html</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">file_get_contents_curl</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$doc</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> DOMDocument<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #339933;">@</span><span style="color: #000088;">$doc</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">loadHTML</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$html</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
        <span style="color: #000088;">$metas</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$doc</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getElementsByTagName</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'meta'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span> <span style="color: #339933;">&lt;</span> <span style="color: #000088;">$metas</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">length</span><span style="color: #339933;">;</span> <span style="color: #000088;">$i</span><span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
            <span style="color: #000088;">$meta</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$metas</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">item</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
            <span style="color: #000088;">$prop_tags</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$meta</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'property'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$meta</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getAttribute</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'content'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000088;">$prop_tags</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #009933; font-style: italic;">/**
     * Retorna o código de incorporação do video
     * @param int $width largura do embed
     * @param int $height altura do embed
     * @return String Código embed do vídeo
     */</span>
    <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> get_embed_video<span style="color: #009900;">&#40;</span><span style="color: #000088;">$width</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">396</span><span style="color: #339933;">,</span> <span style="color: #000088;">$height</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">297</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #000088;">$cod_video</span> <span style="color: #339933;">=</span> <span style="color: #990000;">explode</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'watch?v='</span><span style="color: #339933;">,</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">link</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #000088;">$cod_video</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$cod_video</span><span style="color: #009900;">&#91;</span><span style="color: #cc66cc;">1</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">return</span> <span style="color: #0000ff;">&quot;&lt;iframe width=<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #006699; font-weight: bold;">$width</span><span style="color: #000099; font-weight: bold;">\&quot;</span> height=<span style="color: #000099; font-weight: bold;">\&quot;</span><span style="color: #006699; font-weight: bold;">$height</span><span style="color: #000099; font-weight: bold;">\&quot;</span> src=<span style="color: #000099; font-weight: bold;">\&quot;</span>http://www.youtube.com/embed/<span style="color: #006699; font-weight: bold;">$cod_video</span><span style="color: #000099; font-weight: bold;">\&quot;</span> frameborder=<span style="color: #000099; font-weight: bold;">\&quot;</span>0<span style="color: #000099; font-weight: bold;">\&quot;</span> allowfullscreen&gt;&lt;/iframe&gt;&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p>Siga-me no twitter: <a href="http://www.twitter.com/rafaelwendel" target="blank">@rafaelwendel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rafaelwendel.com/2012/01/classe-php-para-importar-informacoes-de-um-video-do-youtube-video-aula/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Controle de transações no PDO</title>
		<link>http://www.rafaelwendel.com/2011/12/controle-de-transacoes-no-pdo/</link>
		<comments>http://www.rafaelwendel.com/2011/12/controle-de-transacoes-no-pdo/#comments</comments>
		<pubDate>Thu, 08 Dec 2011 12:44:56 +0000</pubDate>
		<dc:creator>Rafael Wendel Pinheiro</dc:creator>
				<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[controle de transações]]></category>
		<category><![CDATA[pdo]]></category>

		<guid isPermaLink="false">http://www.rafaelwendel.com/?p=296</guid>
		<description><![CDATA[No último post falei sobre as funcionalidades e vantagens de se utilizar o PDO (PHP Data Object) em aplicações php e como ela torna o acesso ao banco de dados uma tarefa extremamente simples e padronizada (Clique aqui e confira o post sobre PDO). Hoje o foco também é PDO. Veremos como fazer o controle [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">No último post falei sobre as funcionalidades e vantagens de se utilizar o PDO (PHP Data Object) em aplicações php e como ela torna o acesso ao banco de dados uma tarefa extremamente simples e padronizada (<a title="Tutorial PDO (PHP Data Object)" href="www.rafaelwendel.com/2011/12/tutorial-pdo-php-data-object/">Clique aqui e confira o post sobre PDO).</a></p>
<p style="text-align: justify;">Hoje o foco também é PDO. Veremos como fazer o controle de transações utilizando esse módulo.</p>
<p style="text-align: justify;"><span id="more-296"></span>Segundo a <strong>Wikipedia, </strong>&#8220;o controle de transações é um conjunto de procedimentos que é executado num banco de dados, que para o usuário é visto como uma única ação&#8221;. Em outras palavras podemos definir o controle de transações como sendo um processo do banco de dados onde mais de uma <strong>query</strong> deverá ser executada e todas elas deverão <strong>obter sucesso</strong>, caso contrário todas as outras terão suas execuções <strong>canceladas</strong> ou <strong>desfeitas</strong>.</p>
<p style="text-align: justify;">Para ficar claro, suponha que em uma base de dados nós temos a <strong>entidade</strong> <em>&#8220;conta&#8221;</em> e uma outra entidade <em>&#8220;movimentos&#8221;</em>. Agora imagine que é em certo lugar da aplicação nós podemos lançar um movimento e que a partir das informações dessa movimentação a tabela <em>conta </em>sofrerá uma atualização no seu campo <em>saldo. </em>Até aí tudo bem. Porém é necessário ter uma garantia de que os dados da tabela <em>movimentos </em>foram inseridos sem problemas para que depois o <em>saldo </em>na tabela <em>conta </em>seja atualizado. Em contrapartida se na <em>query de movimentos </em>ocorrer tudo certo e o erro acontecer na segunda query (a da tabela <em>conta) </em>aí a execução de inserção em <em>movimentos </em>deverá ser cancelada (ou desfeita nesse caso).</p>
<p style="text-align: justify;">Para trabalhar com <strong>controle de transações </strong>devemos levar em consideração que o SGBD deve estar apto à essa funcionalidade. Os mais famosos bancos de dados existentes têm suporte ao controle de transações.</p>
<p style="text-align: justify;">Para implementar um controle de transações de forma correta você precisa entender um pouco mais os 3 comandos a seguir:</p>
<p style="text-align: justify;"><strong>- Begin Transaction: </strong>comando para indicar onde uma <strong>transação será iniciada</strong>. A partir desse comando, todas as querys surtirão efeitos permanentes no banco de dados somente quando for executado o<em> commit;</em></p>
<p style="text-align: justify;"><strong>- Commit: </strong>comando para <strong>confirmar </strong>a execução de todas as querys executadas na transação. Após o <em>commit </em>não poderá ser desfeito as manipulações ocorridas. O <em>commit</em> deve ser executado depois de todas as verificações de erros.</p>
<p style="text-align: justify;"><strong>- Rollback: </strong>comando para <strong>desfazer </strong>a ação todas as querys que foram executadas na transação. É utilizado sempre que algum erro ocorre.</p>
<p style="text-align: justify;">Vamos a um exemplo prático agora da utilização de transações no PDO. Para isso utilizaremos a analogia dos <em>movimentos </em>e <em>conta </em>descritos anteriormente.</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #000088;">$pdo</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> PDO<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;mysql:host=localhost;dbname=nomeDoBanco&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;root&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;suaSenha&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$pdo</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Erro ao iniciar a conexão'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">beginTransaction</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">/* Inicia a transação */</span>
<span style="color: #000088;">$movimento</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;INSERT INTO movimentos(idmovimento, data, valor, tipo, idconta) VALUES (1, '2011-12-08', 100, 'entrada', 1)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$movimento</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Erro ao lancar movimento'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">/*É disparado em caso de erro na inserção de movimento*/</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$atualiza_saldo</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;UPDATE conta SET saldo = saldo + 100 WHERE idconta = 1&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$atualiza_saldo</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">rollBack</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">/* Desfaz a inserção na tabela de movimentos em caso de erro na query da tabela conta */</span>
    <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Erro ao atualizar saldo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">commit</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">/* Se não houve erro nas querys, confirma os dados no banco */</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Lançamento efetuado com sucesso!'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;">Repare que antes de qualquer query eu chamo o método <strong>beginTransaction() </strong>do objeto <strong>$pdo</strong>. Feito isso a minha transação está iniciada. Agora insiro os dados na tabela movimento, informando o <strong>id </strong>da movimentação, a data, o valor, o tipo e a qual conta esse movimento está associado.</p>
<p style="text-align: justify;">Se der erro, uma mensagem será disparada e a aplicação <em>&#8220;morre&#8221;</em>. Caso contrário ele parte para a segunda query, que é a atualização do <em>saldo</em> na tabela <em>conta </em>que referenciou a movimentação. Se essa query falhar por algum motivo, o comando <strong>rollback() </strong>é utlizado para que a<strong> inserção na tabela de movimentos seja desfeita (cancelada)</strong>. Se não ocorrer erros o <strong>commit() </strong>é executado, os dados das duas tabelas são confirmados permanentemente no banco de dados e a transação é finalizada.</p>
<p style="text-align: justify;">Espero que esse post lhes sejam útil.</p>
<p style="text-align: justify;">Até a próxima.</p>
<p style="text-align: justify;">Abs</p>
<p style="text-align: justify;">Siga-me no twitter: <a href="http://www.twitter.com/rafaelwendel" target="blank">@rafaelwendel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rafaelwendel.com/2011/12/controle-de-transacoes-no-pdo/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Tutorial PDO (PHP Data Object)</title>
		<link>http://www.rafaelwendel.com/2011/12/tutorial-pdo-php-data-object/</link>
		<comments>http://www.rafaelwendel.com/2011/12/tutorial-pdo-php-data-object/#comments</comments>
		<pubDate>Tue, 06 Dec 2011 18:37:47 +0000</pubDate>
		<dc:creator>Rafael Wendel Pinheiro</dc:creator>
				<category><![CDATA[banco de dados]]></category>
		<category><![CDATA[classes]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[sql]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[pdo]]></category>

		<guid isPermaLink="false">http://www.rafaelwendel.com/?p=293</guid>
		<description><![CDATA[PDO (PHP Data Object) é um módulo nativo desenvolvido a partir do PHP 5 que tem como objetivo fornecer uma estrutura que facilita a integração de aplicações desenvolvidas sob o paradigma de orientação à objetos com bancos de dados relacionais de forma fácil e sem a necessidade de alterar a padronização do sistema. Com o [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">PDO (PHP Data Object) é um módulo nativo desenvolvido a partir do PHP 5 que tem como objetivo fornecer uma estrutura que facilita a integração de aplicações desenvolvidas sob o paradigma de orientação à objetos com bancos de dados relacionais de forma fácil e sem a necessidade de alterar a padronização do sistema.</p>
<p style="text-align: justify;">Com o PDO é possível desenvolver aplicações mais seguras a nível de banco de dados. Dentre as funcionalidades que ele nos oferece podemos destacar o <strong>controle de transações </strong>e o uso de <em><strong>prepared statements.</strong></em></p>
<p style="text-align: justify;"><span id="more-293"></span>Para ativar o módulo PDO no seu php basta ir ao arquivo de configuração <strong>php.ini, </strong>localizar as linhas <strong>php_pdo.dll </strong>e <strong>php_pdo_mysql.dll</strong>  e descomentá-las (retirar o ponto e viírgula &#8220;;&#8221; do início da linha ) . Nesse caso estaríamos aptos a utilizar PDO com <strong>MySQL</strong>. Se você utiliza outro SGBD, basta descomentar a linha referente à ele. Feito isso reinicie o seu servidor de aplicações.</p>
<p style="text-align: justify;">
<h2 style="text-align: justify;">Conexão com o banco de dados utilizando PDO</h2>
<p style="text-align: justify;">Bom. Veremos agora como utilizar o PDO, conectar com bancos de dados, executar querys e etc.</p>
<p style="text-align: justify;">Veja como se conectar com um banco de dados via PDO:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
   <span style="color: #000088;">$pdo</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> PDO<span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;mysql:host=localhost;dbname=nome_banco&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;root&quot;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot;sua_senha&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$pdo</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
       <span style="color: #990000;">die</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'Erro ao criar a conexão'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;">Tarefa simples. Basta informar o <strong>sgbd </strong>que será utilizado (mysql, mssql, pgsql, firebird, etc), o <strong>host, </strong>o nome do <strong>banco de dados, </strong>o <strong>usuário </strong>e a <strong>senha.</strong></p>
<p style="text-align: justify;">Já na conexão com o banco de dados já temos a nossa primeira vantagem com relação à utlização de PDO. Se a aplicação estiver com umas 20 tabelas e umas 200 queryes de manipulação e recuperação de dados  e for necessário mudar de <strong>SGBD </strong>por qualquer motivo, basta <strong>alterar os parâmetros de conexão</strong> e pronto!!! Sem a utilização de PDO talvez fosse necessário sair procurando todos os <strong>mysql_query </strong>e alterar por <strong>pg_query  </strong>ou <strong>msql_query.</strong></p>
<p style="text-align: justify;">
<h2 style="text-align: justify;">Executar querys no banco de dados</h2>
<p style="text-align: justify;">Vamos a um exemplo agora de como executar <strong>querys </strong>via PDO no nosso banco de dados.</p>
<p style="text-align: justify;">Primeiro uma query de inserção de dados.</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #000088;">$executa</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;INSERT INTO cliente(idcliente, nome) VALUES ('1', 'Rafael')&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$executa</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Dados inseridos com sucesso!'</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
   <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
      <span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">errorInfo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;">Agora um <strong>select:</strong></p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #000088;">$rs</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">query</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT idcliente, nome FROM cliente&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetchAll</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #000088;">$rs</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #990000;">print_r</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">errorInfo</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
&nbsp;
   <span style="color: #b1b100;">foreach</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$rs</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$reg</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Código: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$reg</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'idcliente'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Nome: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$reg</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'nome'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;&lt;br /&gt;'</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;"><strong></strong>Nesse exemplo ele me retorna em forma de <strong>array</strong> todos os resultados gerados pela consulta. Com isto basta percorrer o array e exibir as informações.</p>
<p style="text-align: justify;">
<h2 style="text-align: justify;">Utilizar <em>prepared statements</em> e <em>bind params</em></h2>
<p style="text-align: justify;"><strong>Prepared Statemens </strong>são consultas pré-preparadas onde dividimos em partes a inserção do código SQL a ser executado e os valores a serem utilizados (<strong>bind params</strong>). Com os prepareds statements utilizamos na query os marcadores de lugar e depois informamos quais serão os valores que deverão ser utilizados em cada um dos lugares. Isso fornece mais segurança ao nosso banco de dados e nos previne de ações maliciosas como o <strong>SQL Injection.</strong></p>
<p style="text-align: justify;">Temos duas formas de utilizar essa técnica. Primeiro através dos <strong>pontos de interrogação</strong> ou então através de <strong>pseudo-nomes</strong> que funcionam como variáveis.</p>
<p style="text-align: justify;">Veja:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #000088;">$idcliente</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$nome</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Rafael Wendel Pinheiro&quot;</span><span style="color: #339933;">;</span>
   try<span style="color: #009900;">&#123;</span>
       <span style="color: #000088;">$stmte</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;INSERT INTO cliente(idcliente, nome) VALUES (?, ?)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$stmte</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bindParam</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$idcliente</span> <span style="color: #339933;">,</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">PARAM_INT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$stmte</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bindParam</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">2</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nome</span> <span style="color: #339933;">,</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">PARAM_STR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$executa</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$stmte</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
       <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$executa</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
           <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Dados inseridos com sucesso'</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span>
       <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
           <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Erro ao inserir os dados'</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
   catch<span style="color: #009900;">&#40;</span>PDOException <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;"><strong>Preparamos</strong> a query e substituimos os valores pelo ponto de interrogação (?). Depois, obedecendo a ordem dos pontos, colocamos cada valor e o tipo de dado daquele atributo.</p>
<p style="text-align: justify;">A outra forma:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #000088;">$idcliente</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">100</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$nome</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Rafael Wendel Pinheiro&quot;</span><span style="color: #339933;">;</span>
   try<span style="color: #009900;">&#123;</span>
       <span style="color: #000088;">$stmte</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;INSERT INTO cliente(idcliente, nome) VALUES (:idcliente, :nome)&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$stmte</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bindParam</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;:idcliente&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$idcliente</span> <span style="color: #339933;">,</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">PARAM_INT</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$stmte</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bindParam</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;:nome&quot;</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nome</span> <span style="color: #339933;">,</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">PARAM_STR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$executa</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$stmte</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
       <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$executa</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
           <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Dados inseridos com sucesso'</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span>
       <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
           <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Erro ao inserir os dados'</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
   catch<span style="color: #009900;">&#40;</span>PDOException <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;">Nesse caso informamos o nome do parâmetro que utilizamos na query e também o valor e tipo de dado que ele deve receber.</p>
<p style="text-align: justify;">Para finalizar vamos ver um exemplo onde o resultado da nossa query nos retorna os obejtos de cada resultado da consulta SQL (seria o equivalente ao <strong>mysql_fetch_object</strong>).</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">   <span style="color: #000088;">$nome</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;Rafael Wendel Pinheiro&quot;</span><span style="color: #339933;">;</span>
   try<span style="color: #009900;">&#123;</span>
       <span style="color: #000088;">$stmte</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$pdo</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">prepare</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;SELECT idcliente, nome FROM cliente WHERE nome = ?&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$stmte</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">bindParam</span><span style="color: #009900;">&#40;</span><span style="color: #cc66cc;">1</span><span style="color: #339933;">,</span> <span style="color: #000088;">$nome</span> <span style="color: #339933;">,</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">PARAM_STR</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       <span style="color: #000088;">$executa</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$stmte</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
       <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$executa</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
           <span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$reg</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$stmte</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">fetch</span><span style="color: #009900;">&#40;</span>PDO<span style="color: #339933;">::</span><span style="color: #004000;">FETCH_OBJ</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> <span style="color: #666666; font-style: italic;">/* Para recuperar um ARRAY utilize PDO::FETCH_ASSOC */</span>
                <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Código: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$reg</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">idcliente</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Nome: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$reg</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nome</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;&lt;br /&gt;'</span><span style="color: #339933;">;</span>
           <span style="color: #009900;">&#125;</span>
       <span style="color: #009900;">&#125;</span>
       <span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
           <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Erro ao inserir os dados'</span><span style="color: #339933;">;</span>
       <span style="color: #009900;">&#125;</span>
   <span style="color: #009900;">&#125;</span>
   catch<span style="color: #009900;">&#40;</span>PDOException <span style="color: #000088;">$e</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$e</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">getMessage</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;">E é isso. Em breve escreverei um post mostrando como utilizar o controle de transações com PDO.</p>
<p style="text-align: justify;">Qualquer dúvida utilize a caixa de comentários.</p>
<p style="text-align: justify;">Abs</p>
<p>Siga-me no twitter: <a href="http://www.twitter.com/rafaelwendel" target="blank">@rafaelwendel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rafaelwendel.com/2011/12/tutorial-pdo-php-data-object/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Classe para gerar captcha</title>
		<link>http://www.rafaelwendel.com/2011/11/classe-para-gerar-captcha/</link>
		<comments>http://www.rafaelwendel.com/2011/11/classe-para-gerar-captcha/#comments</comments>
		<pubDate>Tue, 29 Nov 2011 13:30:19 +0000</pubDate>
		<dc:creator>Rafael Wendel Pinheiro</dc:creator>
				<category><![CDATA[classes]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[captcha]]></category>

		<guid isPermaLink="false">http://www.rafaelwendel.com/?p=289</guid>
		<description><![CDATA[Se no seu site ou blog existe um formulário de comentários ou mesmo um de contato você provavelmente já sofreu alguma vez com os famosos spams que são enviados automaticamente por robôs (bots), poluindo assim, a sua caixa de entrada ou banco de dados. Uma forma de se combater esses bots que são programados para [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Se no seu site ou blog existe um formulário de comentários ou mesmo um de contato você provavelmente já sofreu alguma vez com os famosos <strong>spams</strong> que são enviados automaticamente por robôs (<strong>bots</strong>), poluindo assim, a sua caixa de entrada ou<a href="http://www.rafaelwendel.com/wp-content/uploads/2011/11/captcha.jpg"><img class="alignright size-full wp-image-290" title="captcha" src="http://www.rafaelwendel.com/wp-content/uploads/2011/11/captcha.jpg" alt="" width="152" height="75" /></a> banco de dados.</p>
<p style="text-align: justify;">Uma forma de se combater esses bots que são programados para ficar executando seus formulários de maneira automática é o <strong>CAPTCHA</strong> (<em>Completely Automated Public Turing test to tell Computers and Humans Apart</em>), que é uma técnica de verificação exatamente para distinguir humanos de máquinas.</p>
<p style="text-align: justify;"><span id="more-289"></span>Essa verificação consiste em exibir nos formulários uma imagem distorcida gerada aleatoriamente com alguns caracteres onde o usuário deve preencher um campo de texto informando esses caracteres, caso contrário o formulário não será submetido. Com isso conseguimos evitar quase que 100% a ação dos bots.</p>
<p style="text-align: justify;">Certo. Agora que entendemos um pouco a funcionalidade do CAPTCHA, vamos à uma forma fácil de implementação dessa técnica em nossos formulários.</p>
<p style="text-align: justify;">Para isso utilizaremos a classe <strong>Captcha</strong>, que pode ser baixada<a title="Classe Captcha" href="http://files.rafaelwendel.com/captcha.rar" target="_blank"> nesse link</a>.</p>
<p style="text-align: justify;">Após baixar e descompactar os arquivos você perceberá a seguinte estrutura de diretórios/arquivos:</p>
<p style="text-align: justify;"><a href="http://www.rafaelwendel.com/wp-content/uploads/2011/11/captcha_dirs.jpg"><img class="size-full wp-image-291 alignnone" title="captcha_dirs" src="http://www.rafaelwendel.com/wp-content/uploads/2011/11/captcha_dirs.jpg" alt="" width="215" height="236" /></a></p>
<p style="text-align: justify;">Note que temos 3 diretórios e 1 arquivo (<strong>captcha.php</strong>) na raiz do nosso diretório. No diretório <strong>class </strong>estão as classes que geram os captchas. Em <strong>fonts </strong>estão as fontes que os caracteres serão gerados. Já temos a fonte <strong>arial</strong> mas sinta-se à vontade para adicionar nesse diretório outras fontes de sua preferência. Em <strong>gfx </strong>tem uma imagem padrão que será exibida caso a imagem do captcha não possa ser gerada por algum motivo. Por fim, o arquivo <strong>captcha.php </strong>tem como objetivo criar uma instância da classe <strong>Captcha </strong>e armazenar os caracteres em uma sessão.</p>
<p style="text-align: justify;">Agora iremos criar na raiz mais 2 arquivos: o <strong>index.php </strong>e o <strong>verifica.php. </strong>O primeiro será a página onde o formulário estará implementado e o segundo é onde verificamos se o captcha foi digitado corretamente.</p>
<p style="text-align: justify;">Arquivo <strong>index.php</strong></p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
</pre></td><td class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">html</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">title</span>&gt;</span>Implementando Captchas<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">title</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">meta</span> <span style="color: #000066;">http-equiv</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;content-type&quot;</span> <span style="color: #000066;">content</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text/html; charset=utf-8&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">head</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>Implementando Captchas<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h1</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;form1&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;verifica.php&quot;</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">img</span> <span style="color: #000066;">src</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;captcha.php&quot;</span> <span style="color: #000066;">alt</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;captcha&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">br</span> <span style="color: #66cc66;">/</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;text&quot;</span> <span style="color: #000066;">name</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;captcha&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
            <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">input</span> <span style="color: #000066;">type</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;submit&quot;</span> <span style="color: #000066;">value</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;Enviar&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
        <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">form</span>&gt;</span>
    <span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">body</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">html</span>&gt;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;">Crio um formulário html com a <strong>action </strong>definida para o arquivo <strong>verifica.php</strong> e nele coloco uma imagem cuja propriedade <strong>src </strong>é o arquivo <strong>captcha.php. </strong>Depois crio um campo de texto com nome <strong>captcha </strong>que é onde deverá ser digitado pelo usuário o código de verificação da imagem de captcha.</p>
<p style="text-align: justify;">Arquivo <strong>verifica.php</strong></p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
<span style="color: #990000;">session_start</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$_POST</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'captcha'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">==</span> <span style="color: #000088;">$_SESSION</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'captcha'</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Verificação OK!'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Código incorreto'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;">Nesse arquivo eu recupero o valor do campo captcha do formulário que veio via <strong>post </strong>e verifico se ele é igual à sessão criada lá no arquivo <strong>captcha.php. </strong>Se forem iguais significa que o código está correto. Caso contrário a verificação falha.</p>
<p style="text-align: justify;">Cabe a você agora incrementar esses scripts de acordo com suas necessidades.</p>
<p style="text-align: justify;">Espero que lhe seja útil</p>
<p style="text-align: justify;">Abs</p>
<p style="text-align: justify;">Siga-me no twitter: <a href="http://www.twitter.com/rafaelwendel" target="blank">@rafaelwendel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rafaelwendel.com/2011/11/classe-para-gerar-captcha/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Métodos mágicos __set e __get</title>
		<link>http://www.rafaelwendel.com/2011/11/metodos-magicos-set-e-get/</link>
		<comments>http://www.rafaelwendel.com/2011/11/metodos-magicos-set-e-get/#comments</comments>
		<pubDate>Mon, 28 Nov 2011 18:01:12 +0000</pubDate>
		<dc:creator>Rafael Wendel Pinheiro</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[tutorial]]></category>
		<category><![CDATA[métodos mágicos]]></category>

		<guid isPermaLink="false">http://www.rafaelwendel.com/?p=287</guid>
		<description><![CDATA[Terceiro post sobre métodos mágicos no PHP 5 será sobre as funções __set() e __get().  Talvez a grande facilidade que esses métodos nos trazem é a possibilidade de utilizar o conceito de encapsulamento da orientação a objetos de forma mais econômica. Em uma classe implementada nos padrões convencionais, para cada atributo privado declarado e que [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;">Terceiro post sobre métodos mágicos no <strong>PHP 5 </strong>será sobre as funções <strong>__set()</strong> e <strong>__get()</strong>.  Talvez a grande facilidade que esses métodos nos trazem é a possibilidade de utilizar o conceito de encapsulamento da orientação a objetos de forma mais econômica.</p>
<p style="text-align: justify;">Em uma classe implementada nos padrões convencionais, para cada <strong>atributo privado</strong> declarado e que seu valor necessita ser manipulado &#8220;fora da classe&#8221;, precisamos criar 2 métodos (o <strong>set </strong>e o <strong>get)</strong> para atribuir e recuperar informações nesse atributo</p>
<p style="text-align: justify;"><span id="more-287"></span>Com os métodos mágicos __set e __get fica mais fácil, porque basta que eu os implemente e eles poderão ser utilizados para todos os atributos que a classe possuir.</p>
<p style="text-align: justify;">Veja um exemplo:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
    <span style="color: #000000; font-weight: bold;">class</span> Pessoa <span style="color: #009900;">&#123;</span>
      <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$nome</span><span style="color: #339933;">;</span>
      <span style="color: #000000; font-weight: bold;">private</span> <span style="color: #000088;">$sobrenome</span><span style="color: #339933;">;</span>
&nbsp;
      <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __set<span style="color: #009900;">&#40;</span><span style="color: #000088;">$atrib</span><span style="color: #339933;">,</span> <span style="color: #000088;">$value</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
          <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #000088;">$atrib</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$value</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
&nbsp;
      <span style="color: #000000; font-weight: bold;">public</span> <span style="color: #000000; font-weight: bold;">function</span> __get<span style="color: #009900;">&#40;</span><span style="color: #000088;">$atrib</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
          <span style="color: #b1b100;">return</span> <span style="color: #000088;">$this</span><span style="color: #339933;">-&gt;</span><span style="color: #000088;">$atrib</span><span style="color: #339933;">;</span>
      <span style="color: #009900;">&#125;</span>
    <span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;">No método __set eu defini 2 parâmetros. No primeiro eu informo o atributo que deverá receber o valor e no segundo eu informo justamente o valor. Já no método __get eu informo apenas o atributo no qual eu desejo capturar o valor armazenado.</p>
<p style="text-align: justify;">Agora vamos a um exemplo de utilização dessa classe:</p>
<p style="text-align: justify;">

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span>
   <span style="color: #000088;">$Pessoa</span> <span style="color: #339933;">=</span> <span style="color: #000000; font-weight: bold;">new</span> Pessoa<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$Pessoa</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nome</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Rafael'</span><span style="color: #339933;">;</span>
   <span style="color: #000088;">$Pessoa</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sobrenome</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'Pinheiro'</span><span style="color: #339933;">;</span>
&nbsp;
   <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Nome: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$Pessoa</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">nome</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
   <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Sobrenome: '</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$Pessoa</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">sobrenome</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

</p>
<p style="text-align: justify;">Como os atributos são do tipo <strong>private</strong>, quando eu os invoco no objeto, na verdade o que está sendo executado são os métodos __set e __get. Essa técnica é chamada de <strong><a href="http://www.php.net/manual/en/language.oop5.overloading.php" title="Overloading" target="_blank">overloading</a></strong></p>
<p style="text-align: justify;">Muito prático, fácil de entender e também de se utilizar.</p>
<p style="text-align: justify;">Até a próxima.</p>
<p style="text-align: justify;">Abs.</p>
<p>Siga-me no twitter: <a href="http://www.twitter.com/rafaelwendel" target="blank">@rafaelwendel</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rafaelwendel.com/2011/11/metodos-magicos-set-e-get/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

