<?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>Boteco Digital &#187; Web</title>
	<atom:link href="http://www.botecodigital.info/category/web/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.botecodigital.info</link>
	<description></description>
	<lastBuildDate>Fri, 30 Jul 2010 20:33:31 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Criando um CAPTCHA em PHP</title>
		<link>http://www.botecodigital.info/php/criando-um-captcha-em-php/</link>
		<comments>http://www.botecodigital.info/php/criando-um-captcha-em-php/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 20:12:11 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=946</guid>
		<description><![CDATA[Um problema comum para quem fornece um formulário de contato ou disponibiliza algum sistema de comentário em um site é o aumento de spam enviados por bots(robos) que lêem os campos do formulário e enviam as informações de spam via POST. Uma maneira muito comum de se proteger deste tipo de ataque é diferenciar se quem está enviando as informações é uma pessoa ou um bot. Isso pode ser feito criando um código que seja de fácil leitura para o [...]]]></description>
			<content:encoded><![CDATA[<p>Um problema comum para quem fornece um formulário de contato ou disponibiliza algum sistema de comentário em um site é o aumento de spam enviados por bots(robos) que lêem os campos do formulário e enviam as informações de spam via POST.</p>
<p>Uma maneira muito comum de se proteger deste tipo de ataque é diferenciar se quem está enviando as informações é uma pessoa ou um bot. Isso pode ser feito criando um código que seja de fácil leitura para o usuário humano e difícil para máquinas e pedir para o usuário digitar este código junto com as outras informações do formulário.</p>
<p>Este sistema é muito comum hoje em dia e recebe o nome de CAPTCHA(Completely Automated Public Turing Test to Tell Computers and Humans Apart ou Teste Público Totalmente Automatizado para Diferenciar Humanos de Computadores) e vamos agora apreender com fazer um simples.</p>
<p>Começaremos criando uma imagem com um fundo um pouco bagunçado, quanto mais bagunçado melhor, isso dificulta a leitura por bots.</p>
<div style="text-align: center;"><img class="aligncenter size-full wp-image-948" title="fundocaptch" src="http://www.botecodigital.info/wp-content/uploads/2010/03/fundocaptch.png" alt="" width="230" height="50" /></div>
<p>O CAPTCHA vai funcionar da seguinte forma, vamos gerar um código baseado na hora do sistema e armazená-lo em uma sessão, após isso iremos criar uma imagem com o fundo que criamos acima e escrever o nosso código gerado sobre ele.</p>
<p>Vamos então aos código</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><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: #000088;">$codigoCaptcha</span> <span style="color: #339933;">=</span> <span style="color: #990000;">substr</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">md5</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">time</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: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">9</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<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: #339933;">=</span> <span style="color: #000088;">$codigoCaptcha</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$imagemCaptcha</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecreatefrompng</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;fundocaptch.png&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$fonteCaptcha</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imageloadfont</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;anonymous.gdf&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$corCaptcha</span> <span style="color: #339933;">=</span> <span style="color: #990000;">imagecolorallocate</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imagemCaptcha</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">255</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">imagestring</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imagemCaptcha</span><span style="color: #339933;">,</span><span style="color: #000088;">$fonteCaptcha</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">15</span><span style="color: #339933;">,</span><span style="color: #cc66cc;">5</span><span style="color: #339933;">,</span><span style="color: #000088;">$codigoCaptcha</span><span style="color: #339933;">,</span><span style="color: #000088;">$corCaptcha</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">header</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;Content-type: image/png&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">imagepng</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imagemCaptcha</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #990000;">imagedestroy</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$imagemCaptcha</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Na linha 3 geramos nosso código “aleatório” começamos pegando o <em>timestamp</em> através da função <a href="”http://www.php.net/manual/pt_BR/function.time.php”" target="”_blank”">time</a> e aplicamos sobre ele a função <a href="http://www.php.net/manual/pt_BR/function.md5.php“" target="”_blank”">md5</a> deste código <em>md5</em> pegamos os 9 primeiros caracteres(se você quiser pode pegar mais ou menos) através da função  <a href="http://br.php.net/manual/pt_BR/function.substr.php" target="”_blank”">substr</a>.</p>
<p>Na linha 5 salvamo nosso código na sessão para que possamos compará-lo mais tarde.</p>
<p>Na linha 8 criamos uma imagem a partir da imagem de fundo que criamos.</p>
<p>Na linha 10 carregamos uma fonte através da função <a href="http://www.php.net/manual/pt_BR/function.imageloadfont.php" target="_blank"> imageloadfont</a> que carrega define a fonte que será utilizada para escrever nosso código de <strong>captcha</strong> na imagem criada na linha 8.</p>
<p>Na linha 12 utilizamos a função <a href="http://www.php.net/manual/pt_BR/function.imagecolorallocate.php" target="_blank">imagecolorallocate</a> para gerar uma cor para o código que iremos inserir na imagem.</p>
<p>Na linha 14 utilizamos a função <a href="http://www.php.net/manual/pt_BR/function.imagecolorallocate.php" target="_blank">imagestring</a> para &#8220;desenhar&#8221; o código gerado na linha 3 na imagem criada na linha 8, utilizando a fonte definida na linha 10.</p>
<p>Na linha 17 mudamos o cabeçalho do arquivo para ele ser um arquivo do tipo imagem no formato png, isso faz com que o navegador mostre a imagem e não o código binarios em forma de texto.</p>
<p>Na linha 19 enviamos a imagem gerada para o navegador. Na linha 21 desalocamos o espaço utilizado pela imagem criada.</p>
<p>Para utilizar o captcha precisamos de um formulário e dentro dele exibiremos a nossa imagem através da <em>tag</em> <strong>IMG</strong> e também precisaremos de um campo para o usuário inserir o código captcha.</p>

<div class="wp_syntax"><div class="code"><pre class="htmlstrict" style="font-family:monospace;">&lt;form action=&quot;valida.php&quot; method=&quot;post&quot;&gt;
    &lt;img src=&quot;captcha.php&quot; alt=&quot;código captcha&quot; /&gt;
&nbsp;
    &lt;label for=&quot;captcha&quot;&gt;Digite o código&lt;/label&gt;
&lt;input id=&quot;captcha&quot; name=&quot;captcha&quot; type=&quot;text&quot; /&gt;
&lt;input type=&quot;submit&quot; value=&quot;Enviar&quot; /&gt;
&lt;/form&gt;</pre></div></div>

<p>Agora basta compara o valor passado por POST no input <strong>captcha</strong> com o valor armazenada em sessão.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</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: #339933;">==</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: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;
&nbsp;
&lt;h1&gt;Ok - Código Correto&lt;/h1&gt;
&nbsp;
&nbsp;
&quot;</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;">&quot;
&nbsp;
&lt;h1&gt;Erro - Código digitado errado&lt;/h1&gt;
&nbsp;
&nbsp;
&quot;</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span></pre></div></div>

<p><a href="http://www.botecodigital.info/exemplos/captcha/form.php" target="_blank">Aqui você pode visializar o exemplo</a></p>
<p><a href="http://www.botecodigital.info/exemplos/captcha/captcha.zip">Download do exemplo</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/php/criando-um-captcha-em-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>PDO &#8211; PHP Data Object &#8211; Trocar de banco de dados já não é dor de cabeça</title>
		<link>http://www.botecodigital.info/php/pdo-php-data-object-trocar-de-banco-de-dados-ja-nao-e-dor-de-cabeca/</link>
		<comments>http://www.botecodigital.info/php/pdo-php-data-object-trocar-de-banco-de-dados-ja-nao-e-dor-de-cabeca/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 16:25:50 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[objetos]]></category>
		<category><![CDATA[OO]]></category>
		<category><![CDATA[pdo]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=925</guid>
		<description><![CDATA[Se você desenvolve com PHP há algum tempo e necessitou trocar de banco de dados sabe que o PHP pode causar um certo problema, pois possui funções com nomes diferentes para conectar a banco de dados diferentes. O que muitas vezes inviabiliza o processo. Aqueles que já trabalharam com Java sabem que existe algo chamado JDBC que resolve este problema, fornecendo uma camada de abstração de dados através de interfaces, bastando carregar o driver correto e utilizar sempre os mesmos [...]]]></description>
			<content:encoded><![CDATA[<p>Se você desenvolve com <acronym title="Pre-Hypertext Processing">PHP</acronym> há algum tempo e necessitou trocar de banco de dados sabe que o <acronym title="Pre-Hypertext Processing">PHP</acronym> pode causar um certo problema, pois possui funções com nomes diferentes para conectar a banco de dados diferentes. O que muitas vezes inviabiliza o processo.</p>
<p>Aqueles que já trabalharam com Java sabem que existe algo chamado JDBC que resolve este problema, fornecendo uma camada de abstração de dados através de interfaces, bastando carregar o driver correto e utilizar sempre os mesmos métodos para acessar qualquer banco de dados.</p>
<p>Para os desavisados o <acronym title="Pre-Hypertext Processing">PHP</acronym> possui, desde a versão 5, algo parecido que se chama <strong>PDO &#8211; <acronym title="Pre-Hypertext Processing">PHP</acronym> Data Objects</strong>, permitindo o acesso a vários bancos de dados chamando sempre as mesmas funções.</p>
<p>Os drivers PDOs devem ser carregados pelo módulo <acronym title="Pre-Hypertext Processing">PHP</acronym> então temos que habilita-los e isso é feito dentro do arquivo <em>php.ini</em>.</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">extension<span style="color: #339933;">=</span>pdo<span style="color: #339933;">.</span>so
extension<span style="color: #339933;">=</span>pdo_mysql<span style="color: #339933;">.</span>so
extension<span style="color: #339933;">=</span>pdo_pgsql<span style="color: #339933;">.</span>so
extension<span style="color: #339933;">=</span>pdo_sqlite<span style="color: #339933;">.</span>so</pre></div></div>

<p>Normalmente não temos acesso ao arquivo <em>php.ini</em> pois contratamos um serviço de hospedagem, então para ver os drivers que estão habilitados na hospedagem  que contratamos devemos executar o código abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;"><span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span>PDO<span style="color: #339933;">::</span><span style="color: #004000;">getAvailableDrivers</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$driver</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    <span style="color: #b1b100;">echo</span> <span style="color: #000088;">$driver</span><span style="color: #339933;">.</span><span style="color: #0000ff;">'&lt;br /&gt;'</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Como o próprio nome do recurso &#8220;<acronym title="Pre-Hypertext Processing">PHP</acronym> Data <strong>Objects</strong>&#8221; a conexão e a manipulação dos dados é feita utilizando <a href="http://www.botecodigital.info/php/classes-em-php/">uma classe do <acronym title="Pre-Hypertext Processing">PHP</acronym></a> chamada  <strong>PDO</strong> &#8211; que deve ser instanciado com as informações de conexão ao banco.</p>
<p>Exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="php" style="font-family:monospace;">&nbsp;
<span style="color: #000088;">$conn</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;">'mysql:host=localhost;port=3306;dbname=teste'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'root'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'123456'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Como podemos notar o construtor do objeto <strong>PDO</strong> aceita três parâmetros, o primeiro é uma string contendo o driver a ser utilizado <strong>mysql</strong>, o local onde o banco esta rodando <strong>localhost</strong>, a porta que o banco esta escutando <strong>3306</strong> e o nome do banco de dados <strong>teste</strong>. O segundo parâmetro é o usuário de acesso ao banco de dados e o terceiro é a senha de acesso.</p>
<p>A partir de agora podemos utilizar o objeto armazenado em <em>$conn </em> para manipular os dados no banco de dados.</p>
<p>Como sabemos quando estamos trabalhando com banco de dados  vários erros podem acontecer como o banco de dados estar indisponível entre outra coisas. O <strong>PDO</strong> pode ser configurado para gerar <a href="http://imasters.uol.com.br/artigo/4451/php/tratamento_de_excecoes_no_php_5/">exceção</a> quando algum erro destes ocorrem sendo capturados com um bloco try{&#8230;}catch(){&#8230;} sendo lançada a exceção <strong>PDOException</strong>.</p>
<p>Abaixo um exemplo de inserção utilizando a classe PDO:</p>

<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;">try<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//instancia o objeto PDO, conectando com o banco mysql</span>
    <span style="color: #000088;">$conn</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;">'mysql:host=localhost;port=3306;dbname=teste'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'root'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'123456'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//configurando para utilizar exceções</span>
    <span style="color: #000088;">$conn</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAttribute</span><span style="color: #009900;">&#40;</span>PDO<span style="color: #339933;">::</span><span style="color: #004000;">ATTR_ERRMODE</span><span style="color: #339933;">,</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">ERRMODE_EXCEPTION</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
    <span style="color: #666666; font-style: italic;">//executa as instruções SQL</span>
    <span style="color: #000088;">$conn</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;INSERT INTO usuarios (login,senha,nome) VALUES ('rodrigo', '123456', 'rodrigo')&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$conn</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;INSERT INTO usuarios (login,senha,nome) VALUES ('thiago', '654321', 'Thiago')&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #000088;">$conn</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">exec</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">&quot;INSERT INTO usuarios (login,senha,nome) VALUES ('maria', '654123', 'Maria')&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//fecha a conexão</span>
    <span style="color: #000088;">$conn</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>catch <span style="color: #009900;">&#40;</span>PDOException <span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//se houver exceção, exibe</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Erro: &lt;code&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$i</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: #0000ff;">&quot;&lt;/code&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Como vemos nas linha 11,12,13 utilizamos o método <em>exec</em> para executar comando <acronym title="Structured Query Language">SQL</acronym> no banco de dados.</p>
<p>Agora  veremos como  consultar utilizando a classe PDO:</p>

<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;">try<span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//instancia o objeto PDO, conectando com o banco mysql</span>
    <span style="color: #000088;">$conn</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;">'mysql:host=localhost;port=3306;dbname=teste'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'root'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'123456'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #666666; font-style: italic;">//configurando para utilizar exceções</span>
    <span style="color: #000088;">$conn</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAttribute</span><span style="color: #009900;">&#40;</span>PDO<span style="color: #339933;">::</span><span style="color: #004000;">ATTR_ERRMODE</span><span style="color: #339933;">,</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">ERRMODE_EXCEPTION</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//executa a instrução de consulta</span>
    <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$conn</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 senha,login FROM usuarios&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;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #666666; font-style: italic;">//percorre os resultados via o laço foreach</span>
                <span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$result</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$linha</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                        <span style="color: #666666; font-style: italic;">//exibe o resultado</span>
                        <span style="color: #b1b100;">print</span> <span style="color: #000088;">$linha</span><span style="color: #009900;">&#91;</span><span style="color: #0000ff;">'login'</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; - &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$linha</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: #0000ff;">&quot;&lt;br&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span>
    <span style="color: #666666; font-style: italic;">//fecha a conexão</span>
    <span style="color: #000088;">$conn</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>catch <span style="color: #009900;">&#40;</span>PDOException <span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//se houver exceção, exibe</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Erro: &lt;code&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$i</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: #0000ff;">&quot;&lt;/code&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Como vimos para executar uma consulta utilizanos a função <strong>query</strong> que retorna um objeto de resposta <a href="http://www.php.net/manual/pt_BR/class.pdostatement.php" target="_blank"><strong>PDOStatement </strong></a> que pode ser percorrido utilizando um laço <em>foreach</em>(linha 9).</p>
<p>Também é possível percorrer um objeto <strong>PDOStatement</strong> utilizando o método <strong>fetch</strong> dele tratar cada linha da consulta como um objeto.</p>
<p>Exemplo:</p>

<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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">try<span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//instancia o objeto PDO, conectando com o banco mysql</span>
    <span style="color: #000088;">$conn</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;">'mysql:host=localhost;port=3306;dbname=teste'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'root'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'123456'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//configurando para utilizar exceções</span>
    <span style="color: #000088;">$conn</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAttribute</span><span style="color: #009900;">&#40;</span>PDO<span style="color: #339933;">::</span><span style="color: #004000;">ATTR_ERRMODE</span><span style="color: #339933;">,</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">ERRMODE_EXCEPTION</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//executa a instrução de consulta</span>
    <span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$conn</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 login, senha FROM usuarios&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;">$result</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                <span style="color: #666666; font-style: italic;">//percorre os resultados via o fetch()</span>
                <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #000088;">$linha</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$result</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;">//exibe resultado</span>
                        <span style="color: #b1b100;">print</span> <span style="color: #000088;">$linha</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">login</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot; - &quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$linha</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">senha</span> <span style="color: #339933;">.</span> <span style="color: #0000ff;">&quot;&lt;br&gt;<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
&nbsp;
        <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//fecha a conexão</span>
    <span style="color: #000088;">$conn</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>catch <span style="color: #009900;">&#40;</span>PDOException <span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//se houver exceção, exibe</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Erro: &lt;code&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$i</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: #0000ff;">&quot;&lt;/code&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Na linha  13 chamamos o método fetch que recebe a constante <strong>PDO::FETCH_OBJ</strong> que é responsável por definir que o retorno será um objeto. Também podemos passar as constantes <strong>PDO::FETCH_ASSOC</strong> que retorna um array com os indices sendo os nomes das colunas da consulta e <strong>PDO::FETCH_NUM</strong> que retorna um array com os indices numéricos.</p>
<p>Outra funcionalidade interessante que ameniza muitos erros é os famosos  do <strong>prepared statements</strong>. Veja o exemplo abaixo:</p>

<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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
try<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//instancia o objeto PDO, conectando com o banco mysql</span>
    <span style="color: #000088;">$conn</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;">'mysql:host=localhost;port=3306;dbname=teste'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'root'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//configurando para utilizar exceções</span>
    <span style="color: #000088;">$conn</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAttribute</span><span style="color: #009900;">&#40;</span>PDO<span style="color: #339933;">::</span><span style="color: #004000;">ATTR_ERRMODE</span><span style="color: #339933;">,</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">ERRMODE_EXCEPTION</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//prepara a consulta</span>
	<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$conn</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 usuarios (login,senha,nome) VALUES (?, ?, ?)&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//insere os valores nas ?</span>
    <span style="color: #000088;">$valores</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'rodrigo'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'123456'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rodrigo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//executa o comando SQL</span>
    <span style="color: #000088;">$result</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$valores</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
    <span style="color: #666666; font-style: italic;">//fecha a conexão</span>
    <span style="color: #000088;">$conn</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>catch <span style="color: #009900;">&#40;</span>PDOException <span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//se houver exceção, exibe</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Erro: &lt;code&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$i</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: #0000ff;">&quot;&lt;/code&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span><span style="color: #000000; font-weight: bold;">&lt;?php</span> 
try<span style="color: #009900;">&#123;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//instancia o objeto PDO, conectando com o banco mysql</span>
    <span style="color: #000088;">$conn</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;">'mysql:host=localhost;port=3306;dbname=teste'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'root'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">''</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">//configurando para utilizar exceções</span>
    <span style="color: #000088;">$conn</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">setAttribute</span><span style="color: #009900;">&#40;</span>PDO<span style="color: #339933;">::</span><span style="color: #004000;">ATTR_ERRMODE</span><span style="color: #339933;">,</span> PDO<span style="color: #339933;">::</span><span style="color: #004000;">ERRMODE_EXCEPTION</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//prepara a consulta</span>
	<span style="color: #000088;">$result</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$conn</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 usuarios (login,senha,nome) VALUES (?, ?, ?)&quot;</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//insere os valores nas ?</span>
    <span style="color: #000088;">$valores</span> <span style="color: #339933;">=</span> <span style="color: #990000;">array</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'rodrigo'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'123456'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'rodrigo'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #666666; font-style: italic;">//executa o comando SQL</span>
    <span style="color: #000088;">$result</span><span style="color: #339933;">-&gt;</span><span style="color: #004000;">execute</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$valores</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
    <span style="color: #666666; font-style: italic;">//fecha a conexão</span>
    <span style="color: #000088;">$conn</span> <span style="color: #339933;">=</span> <span style="color: #009900; font-weight: bold;">null</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>catch <span style="color: #009900;">&#40;</span>PDOException <span style="color: #000088;">$i</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #666666; font-style: italic;">//se houver exceção, exibe</span>
        <span style="color: #b1b100;">print</span> <span style="color: #0000ff;">&quot;Erro: &lt;code&gt;&quot;</span> <span style="color: #339933;">.</span> <span style="color: #000088;">$i</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: #0000ff;">&quot;&lt;/code&gt;&quot;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<p>Com o uso dos <strong>prepared statements</strong> não precisamos ficar nos preocupando em concatenar várias variaveis, ou nos preocuparmos com escape de aspas e tudo mais, basta colocar os valores no array que será passado por parâmetro para o método <strong>execute</strong>.</p>
<p>Espero que tenham gostado. Para mais infomações consulte a <a href="http://www.php.net/manual/pt_BR/book.pdo.php" target="_blank">documentação da classe PDO</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/php/pdo-php-data-object-trocar-de-banco-de-dados-ja-nao-e-dor-de-cabeca/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>UruguaianaTech</title>
		<link>http://www.botecodigital.info/php/uruguaianatech/</link>
		<comments>http://www.botecodigital.info/php/uruguaianatech/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 01:27:42 +0000</pubDate>
		<dc:creator>Thiago Finardi</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[cidão]]></category>
		<category><![CDATA[humberto moura]]></category>
		<category><![CDATA[jose inoue]]></category>
		<category><![CDATA[rodrigo aramburu]]></category>
		<category><![CDATA[senac uruguaiana]]></category>
		<category><![CDATA[Thiago Finardi]]></category>
		<category><![CDATA[ti uruguaiana]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=798</guid>
		<description><![CDATA[Chegamos ao fim do 1º Uruguaiana Tech, foram três dias de evento onde podemos colaborar de alguma forma com a nossa comunidade. Fiquei extremamante satisfeito com o resultado do evento, era muito prazeroso conversar com os participantes após as palestras, podendo assim os conhecer melhor e principalmente constatar que muitas pessoas estão testando softwares livre. Várias pessoas elogiaram a iniciativa e principalmente a qualidade do evento como um todo. A idéia da realização do UruguaianaTECH surgiu a partir da necessidade [...]]]></description>
			<content:encoded><![CDATA[<p>Chegamos ao fim do 1º Uruguaiana Tech, foram três dias de evento onde podemos colaborar de alguma forma com a nossa comunidade. Fiquei extremamante satisfeito com o resultado do evento, era muito prazeroso conversar com os participantes após as palestras, podendo assim os conhecer melhor e principalmente constatar que muitas pessoas estão testando softwares livre. Várias pessoas elogiaram a iniciativa e principalmente a qualidade do evento como um todo.</p>
<p>A idéia da realização do UruguaianaTECH surgiu a partir da necessidade de eventos na área de tecnologia da informação em nossa região, e principalmente para difundir a utilização do Software Livre em todos os setores de nossa comunidade.</p>
<p>O constante crescimento da utilização do software livre nas organizações nos últimos anos, demonstram que o reconhecimento dos benefícios é algo concreto, nosso país é considerado um dos maiores utilizadores desta tecnologia, onde também existem diversos colaboradores e mantenedores de aplicativos Livres.</p>
<p>Vemos na fronteira oeste, um mercado a ser explorado pois muitas organizações locais não fazem o uso de um Software Livre pelo fato de desconhecerem suas vantagens e benefícios.</p>
<p>Cabe a nós profissionais e estudantes da área de TI mudar este cenário, pois a evolução esta acontecendo, é nossa obrigação contribuir para que ela aconteça também em nossa cidade.</p>
<p>As vezes pensamos que em nossa cidade não há um mercado para os profissinais de TI, isto faz com que muitos estudantes recém formados acabem saindo de nossa cidade em busca de oportunidades, com isso nossa comunidade acaba perdendo qualidade nos serviços prestados. Com esta iniciativa esperamos demosntrar a nossa comunidade que dentro dela mesmo é possível encontrar profissionais qualificados e preparados para os desafios da área de TI.</p>
<p>Gostaria muito de agradecer a participação dos Professores Cidão e Humberto Moura que trouxeram um brilho a mais em nosso evento, a área de TI do Senac Uruguaiana, aos colaboradores voluntários que nos ajudaram na organização e principalmente aos nossos apoiadores, pois sem eles esta edição do Uruguaiana Tech não seria possível.</p>
<p>Agora fica a saudade dos bons momentos compartilhados durante o evento, o conhecimento que foi recebido e retribuido, pois como mencionei no evento: &#8220;O conhecimento é universal, nós aprendemos com alguém e é nossa OBRIGAÇÃO ensinar alguém&#8221;.</p>
<p>Nós nos comprometemos em levar esta causa adiante e faremos o que for necessário para alavancar nossa área de TI em nossa cidade, o sol nasce para todos e juntos faremos com que esta mudança aconteça.</p>
<p><div id="galeria"><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01143.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01143.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01151.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01151.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01159.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01159.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01160.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01160.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01161.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01161.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01162.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01162.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01164.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01164.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01165.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01165.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01171.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01171.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01177.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01177.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01179.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01179.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01180.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01180.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01184.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01184.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01186.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01186.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01187.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01187.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01190.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01190.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01196.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01196.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01199.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01199.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01200.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01200.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01207.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01207.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01208.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01208.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01212.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01212.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01213.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01213.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01214.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01214.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01215.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01215.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01217.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01217.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01219.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01219.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01222.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01222.jpg" /></a><a href="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/g/DSC01225.jpg" rel="prettyPhoto[uruguaianatech]" class="prettyPhoto"><img src="http://www.botecodigital.info/wp-content/uploads/galerias/uruguaianatech/p/DSC01225.jpg" /></a><div style="clear:both;"></div></div></p>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/php/uruguaianatech/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>1º UruguaianaTech</title>
		<link>http://www.botecodigital.info/php/1%c2%ba-uruguaianatech/</link>
		<comments>http://www.botecodigital.info/php/1%c2%ba-uruguaianatech/#comments</comments>
		<pubDate>Wed, 18 Nov 2009 02:50:35 +0000</pubDate>
		<dc:creator>Thiago Finardi</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[senac uruguaiana]]></category>
		<category><![CDATA[ti uruguaiana]]></category>
		<category><![CDATA[uruguaiana tech]]></category>

		<guid isPermaLink="false">http://www.botecodigital.info/?p=778</guid>
		<description><![CDATA[Com a missão de educar para o trabalho em atividades do comércio de bens, serviços e turismo, o SENAC Uruguaiana promove nos dias 26, 27 e 28 de novembro o 1° UruguaianaTech, evento que visa difundir a utilização do Software Livre nos diversos setores de nossa comunidade. Sempre conectado às inovações do mercado e atento às novas tendências em tecnologia, o núcleo de TI do Senac Uruguaiana, ministrará palestras sobre os temas: Linux, Servidores, Segurança, Desenvolvimento de Aplicações Web e [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-777" title="logo" src="http://www.botecodigital.info/wp-content/uploads/2009/11/logo.png" alt="logo" width="423" height="174" /></p>
<p>Com a missão de educar para o trabalho em atividades do comércio de bens, serviços e turismo, o SENAC Uruguaiana promove nos dias <strong>26, 27 e 28</strong> de novembro o <a href="http://www.uruguaianatech.info" target="_blank"><strong>1° UruguaianaTech</strong></a>, evento que visa difundir a utilização do Software Livre nos diversos setores de nossa comunidade.</p>
<p>Sempre conectado às inovações do mercado e atento às novas tendências em tecnologia, o núcleo de<strong> TI do Senac Uruguaiana</strong>, ministrará palestras sobre os temas: Linux, Servidores, Segurança, Desenvolvimento de Aplicações Web e Móvel.</p>
<p>Esta edição contará com a presença de profissionais de destaque no mercado da Tecnologia da Informação, com ampla experiência na utilização de Software Livre em ambientes corporativos, educacionais e domésticos.</p>
<p>O evento será realizado no auditório do Colégio Marista Sant’Ana. As inscrições podem ser realizadas através do <a href="http://www.uruguaianatech.info/inscricaos/">site</a> ou na unidade do Senac, mediante a colaboração com um alimento não-perecível. Aos interessados na emissão do certificado, o investimento será de R$10,00.</p>
<p>Vejam abaixo a programação do evento. Destaque para o 1º e 2º dia onde os editores deste blog, <strong>Thiago Finardi</strong> e <strong>Rodrigo Aramburu</strong>, ministrarão palestras no evento.</p>
<p><img class="aligncenter size-full wp-image-782" title="Cartaz_RGB_peq" src="http://www.botecodigital.info/wp-content/uploads/2009/11/Cartaz_RGB_peq.png" alt="Cartaz_RGB_peq" width="454" height="642" /></p>
<p>Vamos lá pessoal, participem e ajudem no crescimento da área de TI em nossa cidade.</p>
<h1>
<p style="text-align: center;"><a href="http://www.uruguaianatech.info" target="_blank"><strong>http://www.uruguaianatech.info</strong></a></p>
</h1>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/php/1%c2%ba-uruguaianatech/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Listando arquivos de um diretório em PHP</title>
		<link>http://www.botecodigital.info/php/listando-arquivos-de-um-diretorio-em-php/</link>
		<comments>http://www.botecodigital.info/php/listando-arquivos-de-um-diretorio-em-php/#comments</comments>
		<pubDate>Fri, 14 Aug 2009 23:50:23 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[arquivo]]></category>
		<category><![CDATA[diretorio]]></category>
		<category><![CDATA[galeria]]></category>

		<guid isPermaLink="false">http://botecodigital.g8si.com/?p=519</guid>
		<description><![CDATA[Mostrei no meu último artigo como criar uma galeria de fotos utilizando JQuery e o plugin PrettyPhoto, mas ele tinha um problema, ou melhor uma dificuldade, para adicionar uma nova foto tínhamos que abrir o arquivo e acrescentar o código HTML para a nova foto. Para não termos esse tipo e trabalho que inventaram a informática . Vamos ver então um simples script que lê um determinado diretório e monta a tag HTML para a imagem: 1 2 3 4 [...]]]></description>
			<content:encoded><![CDATA[<p>Mostrei no meu último artigo como criar uma galeria de  <a href="http://www.botecodigital.info/web/construindo-uma-galeria-de-fotos-com-o-plugin-prettyphoto-do-jquery">fotos utilizando JQuery e o plugin PrettyPhoto</a>, mas ele tinha um problema, ou melhor uma dificuldade, para adicionar uma nova foto tínhamos que abrir o arquivo e acrescentar o código <acronym title="HyperText Markup Language">HTML</acronym> para a nova foto. Para não termos esse tipo e trabalho que inventaram a informática <img src='http://www.botecodigital.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<p>Vamos ver então um simples <em>script</em> que lê um determinado diretório e monta a tag <acronym title="HyperText Markup Language">HTML</acronym> para a imagem:</p>

<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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000088;">$dir</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">&quot;fotos&quot;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$d</span> <span style="color: #339933;">=</span> <span style="color: #990000;">opendir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$dir</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$i</span> <span style="color: #339933;">=</span> <span style="color: #cc66cc;">0</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #000088;">$nome</span> <span style="color: #339933;">=</span> <span style="color: #990000;">readdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$nome</span> <span style="color: #339933;">!=</span> <span style="color: #009900; font-weight: bold;">false</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;">is_dir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$nome</span><span style="color: #009900;">&#41;</span> and <span style="color: #009900;">&#40;</span><span style="color: #000088;">$nome</span> <span style="color: #339933;">!=</span> <span style="color: #0000ff;">'Thumbs.db'</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
		<span style="color: #000088;">$arquivos</span><span style="color: #009900;">&#91;</span><span style="color: #000088;">$i</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #000088;">$nome</span><span style="color: #339933;">;</span>
                <span style="color: #000088;">$i</span><span style="color: #339933;">++;</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #000088;">$nome</span> <span style="color: #339933;">=</span> <span style="color: #990000;">readdir</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$d</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #990000;">sort</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$arquivos</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">foreach</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$arquivos</span> <span style="color: #b1b100;">as</span> <span style="color: #000088;">$arq</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'&lt;img src=&quot;'</span><span style="color: #339933;">,</span><span style="color: #000088;">$dir</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">&quot; alt=&quot;</span><span style="color: #0000ff;">&quot; /&gt; ';
}</span></pre></td></tr></table></div>

<p>Na linha 1 definimos o diretório que será lido e armazenamos em uma variável para facilitar a manutenção do código, na linha 2 abrimos um manipulador de diretório com a função <a href="http://br2.php.net/manual/pt_BR/function.opendir.php" target="_blank">opendir()</a> que nos retorna um ponteiro para ser utilizado em funções posteriores.</p>
<p>Bom agora podemos percorrer o diretório, mas antes vamos iniciar um contador (linha 3) para podermos armazenar em um <em>array</em> os nomes dos arquivos para poder entre outras coisas ordená-los.</p>
<p>Na linha 5 começamos a ler os arquivos e fazemos isso utilizando a função <a href="http://br2.php.net/manual/pt_BR/function.readdir.php" target="_blank">readdir()</a> que retorna o nome do próximo arquivo do diretório aberto com a função <em>opendir</em>. Na linha 6 entramos em um laço que executa enquanto o nome do arquivo retornado pela função <em>readdir()</em> não for falso, ou seja não tenha listado todos os arquivos do diretório.</p>
<p>Dentro do laço (linha 7) fazemos um teste, se o nome retornado não for um diretório ( com a função <a href="http://br2.php.net/manual/pt_BR/function.is-dir.php" target="_blank">is_dir()</a>) e se o nome for diferente de &#8220;Thumbs.db&#8221;, aqueles arquivos chatos e miniaturas do windows que as vezes <em>upamos</em> sem querer <img src='http://www.botecodigital.info/wp-includes/images/smilies/icon_sad.gif' alt=':(' class='wp-smiley' /> </p>
<p>Na linha 8 armazenamos o nome do arquivo no <em>array</em> e na linha 9 incrementamos nosso contador. fora do <em>if</em> lemos o próximo arquivo do diretório para o teste do <em>while</em>.</p>
<p>Na linha 13 utilizamos a função <a href="http://br2.php.net/manual/pt_BR/function.sort.php" target="_blank">sort()</a> para ordenar nosso <em>array</em> onde estão armazenados os nomes das imagens. Isto é muito útil principalmente se os nomes dos arquivos sejam seqüênciais e correspondem também a uma miniatura em outro diretório <strong>como é o mais indicado caso queiram utilizar esse script para criar uma galeria com o PrettyPhoto</strong>.</p>
<p>Agora basta juntar os nomes do arquivos do <em>array</em> com as tags para exibir as fotos como é feito na linha 16, utilizando um <em>foreach</em> para percorrer  <em>array</em>.</p>
<p>Este <em>script</em> facilita bastante a vida principalmente se s galerias criadas forem grandes ou precisar adicionar fotos frequentemente, espero que tenham gostado quem <a href="http://www.botecodigital.info/wp-content/donwloads/listar_direotorios.zip">quiser baixar o exemplo clique aqui</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/php/listando-arquivos-de-um-diretorio-em-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Youtube deixará de suportar IE6</title>
		<link>http://www.botecodigital.info/web/youtube-deixara-de-suportar-ie6/</link>
		<comments>http://www.botecodigital.info/web/youtube-deixara-de-suportar-ie6/#comments</comments>
		<pubDate>Fri, 17 Jul 2009 12:57:59 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[Navegadores]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ie6]]></category>
		<category><![CDATA[youtube]]></category>

		<guid isPermaLink="false">http://botecodigital.g8si.com/?p=493</guid>
		<description><![CDATA[Já sem tempo o Youtube decidiu não gastar o tempo de seus desenvolvedores corrigindo erros causados pelo Internet Explore 6, um browse antigo com muitos problemas e que é responsável por muitas das dores de cabeça dos desenvolvedores web. O Youtube está recomendando que seus usuario troquem de navegador para o Internet Explore 8(ultima versão) Firefox 3.5 ou Google Chrome. Mais um grande passo para a campanha Internet Explorer 6.0, nunca mais!.]]></description>
			<content:encoded><![CDATA[<p>Já sem tempo o Youtube decidiu não gastar o tempo de seus desenvolvedores corrigindo  erros causados pelo <strong>Internet Explore 6</strong>, um browse antigo com muitos problemas  e  que é responsável por muitas das dores de cabeça dos desenvolvedores web.</p>
<p> O Youtube está recomendando que seus usuario  troquem de navegador para o <a href="http://www.microsoft.com/windows/internet-explorer/default.aspx" target="_blank">Internet Explore 8</a>(ultima versão)  <a href="http://br.mozdev.org/firefox/download.html" target="_blank">Firefox 3.5</a> ou <a href="http://www.google.com/chrome">Google Chrome</a>.</p>
<div style="text-align:center;margin:10px 0;">
<a href="http://www.botecodigital.info/wp-content/uploads/2009/07/ie6-youtube1.jpg" target="_blank"><br />
<img src="http://www.botecodigital.info/wp-content/uploads/2009/07/ie6-youtube1.jpg" alt="ie6-youtube" title="ie6-youtube" width="450" height="205" class="aligncenter size-full wp-image-499" /><br />
</a>
</div>
<p> Mais um grande passo para a campanha  <a href="http://www.tossulino.com/tecnologia/internet-explorer-6-nunca-mais/" target="_blank">Internet Explorer 6.0, nunca mais!</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/web/youtube-deixara-de-suportar-ie6/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>FISL 10, Primeiro Dia</title>
		<link>http://www.botecodigital.info/web/fisl-10-primeiro-dia/</link>
		<comments>http://www.botecodigital.info/web/fisl-10-primeiro-dia/#comments</comments>
		<pubDate>Wed, 01 Jul 2009 16:14:45 +0000</pubDate>
		<dc:creator>Thiago Finardi</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Ailton Soares da Rocha]]></category>
		<category><![CDATA[Arquiteturas Enterprise Web 2.0]]></category>
		<category><![CDATA[boteco no fisl]]></category>
		<category><![CDATA[Configurações práticas IPv6]]></category>
		<category><![CDATA[E-Commerce seguro com PagSeguro]]></category>
		<category><![CDATA[Elcio Ferreira]]></category>
		<category><![CDATA[Felipe Santos]]></category>
		<category><![CDATA[fisl10]]></category>
		<category><![CDATA[fisl10 primeiro dia]]></category>
		<category><![CDATA[Forense computacional]]></category>
		<category><![CDATA[Forense computacional em Linux for dummies]]></category>
		<category><![CDATA[João Eriberto Mota Filho]]></category>
		<category><![CDATA[Rede Mesh]]></category>
		<category><![CDATA[Rodrigo Troian]]></category>
		<category><![CDATA[Vinicius John]]></category>
		<category><![CDATA[Vinicius Senger]]></category>

		<guid isPermaLink="false">http://botecodigital.g8si.com/?p=438</guid>
		<description><![CDATA[Como anunciei no blog, participei do 10º Fórum Internacional de Software Livre (FISL) em Porto Alegre, que aconteceu de 24/06 a 27/06, e estava muito bom como era de se esperar. Nos dias que antecede o evento sempre fico com aquela expectativa dos assuntos abordados nas palestras, e a cada ano que passa o FISL consegue satisfazer uma quantidade enorme de participantes. A causa deste ano do Fórum foi “Compartilhar não é crime. Contra a vigilância e o controle na [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-thumbnail wp-image-443" title="tux" src="http://www.botecodigital.info/wp-content/uploads/2009/06/tux-150x150.jpg" alt="tux" width="130" height="130" />Como anunciei no blog, participei do <a href="http://fisl.softwarelivre.org/10/www/">10º Fórum Internacional de Software Livre (FISL)</a> em Porto  Alegre, que aconteceu de 24/06 a 27/06, e estava muito bom como era de se esperar. Nos dias que antecede o evento sempre fico com aquela expectativa dos assuntos abordados nas palestras, e a cada ano que passa o FISL consegue satisfazer uma quantidade enorme de participantes. A causa deste ano do Fórum foi<strong><em> “Compartilhar não é crime. Contra a vigilância e o controle na internet”</em></strong>, isto devido é claro ao projeto de lei do senador <a href="http://g1.globo.com/Noticias/Tecnologia/0,,MUL651929-6174,00-ENTENDA+A+POLEMICA+SOBRE+O+IMPACTO+DA+LEI+DE+CRIMES+CIBERNETICOS.html" target="_blank">Eduardo Azeredo</a>, que tira completamente nossa privacidade na internet.</p>
<p>Neste post, estarei fazendo um resumo de alguns itens importantes que presenciei no evento.</p>
<p><span id="more-438"></span><strong>Primeiro Dia &#8211; 24/06</strong></p>
<p>Como era de se esperar o evento estava contanto com mais de 8.000 participantes, foi aquela correria inicial de todos<img class="alignright size-thumbnail wp-image-444" title="fisl_1" src="http://www.botecodigital.info/wp-content/uploads/2009/06/fisl_1-150x150.jpg" alt="fisl_1" width="150" height="150" /> os anos, todo mundo correndo para poder pegar seu crachá e olhar as palestras iniciais. Devido ao tumulto, as palestras das 9:00 foram transferidas de horário.</p>
<p><strong><em>(10:00) E-Commerce seguro com PagSeguro &#8211; Elcio Ferreira</em></strong></p>
<p>Esta foi a primeira palestra que acompanhei, muito interessante por sinal. O palestrante mostrou as falhas de segurança mais comuns em comércio eletrônico, e como proteger seu e-commerce de invasores e fraudadores. Também apresentou como PagSeguro pode ajudar a tornar sua loja virtual segura.</p>
<p>Foi uma palestra muito boa para quem pensa em implementar uma loja virtual.</p>
<p><strong><em>(11:00) Arquiteturas Enterprise Web 2.0 &#8211; Vinicius Senger</em></strong></p>
<p>Nesta palestra foram apresentados vários assuntos, dentre eles:</p>
<ul>
<li>Web 2.0, Ajax, OSGi, SOA,      segurança, alta performance, escalabilidade: Seu projeto esta na direção      certa? A palestra apresentou uma visão atualizada de aplicativos      enterprise e frameworks Java EE propondo 5 diferentes arquiteturas:
<ol>
<li>Arquitetura Java EE 5       básica: JSF, Facelets, JPA, Richfaces</li>
<li>Arquitetura Java EE       avançada: JSF, Facelets, JPA, Richfaces, EJB e JMS</li>
<li>Spring com JSF, JPA,       Richfaces</li>
<li>Seam</li>
<li>Spring + Seam       integrqdos</li>
</ol>
</li>
</ul>
<p>Em cada arquitetura foram pontuados quesitos técnicos e de negócio, incluindo em quais cenários reais aplicamos estas arquiteturas em casos reais nos últimos 2 anos. Os seguintes quesitos são considerados:</p>
<ul>
<li>Performance e      escalabilidade</li>
<li>Ní­vel técnico de equipe</li>
<li>Ferramentas e produtividade</li>
<li>Suporte de comunidade e      comercial</li>
<li>Ajax e RIA</li>
<li>Segurança</li>
<li>OSGi</li>
<li>SOA</li>
<li>Mashup, REST, CAPTCHA, conversation, e      multitab support</li>
</ul>
<p>Ao término foi apresentado o projeto www.supercrud.com onde você poderá gerar via Web seus próprios aplicativos CRUD (create, read, update, delete) para bancos de dados, usando as diferentes arquiteturas propostas.</p>
<p><strong><em>(12:00) Rede Mesh &#8211; </em>Felipe Santos, Rodrigo Troian, Vinicius John</strong></p>
<p>Esta foi uma palestra introdutória sobre tecnologias de rede wireless, em especial a rede em malha mesh, seus impactos sociais, políticos e tecnológicos. Uma breve visão sobre os projetos existentes, observando seus objetivos e modos de funcionamento. Introdução aos hardwares de rede, firmwares e protocolos para redes mesh.</p>
<p><strong><em>(13:00) Forense computacional em Linux for dummies &#8211; uma rápida visão introdutória &#8211; João Eriberto Mota Filho</em></strong></p>
<p>Pra mim, esta foi a melhor palestra do 1º dia do evento<strong><em>, </em></strong>para mim as palestras do Eriberto são sempre muito boas, e esta não poderia ser diferente. Na palestra foi mostrado como se processa uma forense computacional. Foram abordados aspectos relevantes como o que fazer e o que não fazer logo após uma intrusão, a coleta de informações da memória, dos discos e dos logs. Também foi demonstrado, ao vivo, como recuperar logs e dados apagados. Também houve uma abordagem sobre a utilização de live CDs ou pendrive em todo o processo.</p>
<p><strong><em>(14:00) Configurações práticas IPv6 no Linux e FreeBSD &#8211; Firewall, Túneis, <acronym title="Domain Name Server">DNS</acronym> e outros serviços &#8211; Ailton Soares da Rocha</em></strong></p>
<p>O IPv6 está gradativamente sendo implantado na Internet e nas redes, por isso é importante conhecer seu funcionamento e saber como fazer a configuração de equipamentos de rede e computadores. Nesta apresentação foi feita uma breve introdução ao protocolo IPv6 e foram abordados importantes aspectos práticos de configuração em  máquinas Linux e FreeBSD, desde as configurações mais básicas, até aspectos mais complexos, como a criação de túneis, a configuração de firewalls iptables e <acronym title="Domain Name Server">DNS</acronym> com Bind. No meu ponto de vista se você ainda não leu nada sobre o assunto esta mais do que na hora, pois o prazo para a troca no Brasil é em 2010.</p>
<p><strong><em>(15:00) Fui almoçar, informação alimenta o cérebro mas não a barriga =P</em></strong></p>
<p><strong><em>(16:00) Abertura do FISL</em></strong></p>
<p>Eu aproveitei este horário para conseguir algumas camisetas e brindes nos estandes das empresas XD</p>
<p><strong><em>(16:00) Entrevista coletiva com jornalistas e blogueiros cadastrados (NÓS) &#8211; Peter Sunde</em></strong></p>
<p>Entrevista Coletiva do Hacker do The Pirate Bay Peter Sunde com Jornalistas e Blogueiros Cadastrados. Este vai ganhar um post só pra ele.</p>
<p>Bom pessoal, este foi o primeiro dia do evento e quis colocar um resumo sobre as palestras que acompanhei. Vou separar cada dia em um post e mesmo assim vai ficar impossível contar tudo de interessante que pude ver e acompanhar nesta 10ª edição do evento.</p>
<p>aguardem os próximos post&#8217;s.</p>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/web/fisl-10-primeiro-dia/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Construindo uma Galeria de Fotos com o plugin PrettyPhoto do JQuery</title>
		<link>http://www.botecodigital.info/web/construindo-uma-galeria-de-fotos-com-o-plugin-prettyphoto-do-jquery/</link>
		<comments>http://www.botecodigital.info/web/construindo-uma-galeria-de-fotos-com-o-plugin-prettyphoto-do-jquery/#comments</comments>
		<pubDate>Tue, 30 Jun 2009 20:01:23 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[efeitos]]></category>
		<category><![CDATA[fotos]]></category>
		<category><![CDATA[galeria]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[lightbox]]></category>
		<category><![CDATA[plugin JQuery]]></category>
		<category><![CDATA[PrettyPhoto]]></category>

		<guid isPermaLink="false">http://botecodigital.g8si.com/?p=426</guid>
		<description><![CDATA[Algo que muitas pessoal tem me perguntado é como criar uma galeria de fotos bem legal. Uma que estou utilizando muito, é feita com um plugin do JQuery chamada PrettyPhoto, ela utiliza um efeito chamado lightbox, que é parecido com um POPUP, mas bem mais estiloso . Bom para começar baixe o PrettyPhoto 2.4.3 e descomacte em uma pasta. Ele é divido em 3 pastas css, js e images, para usalo você vai precisar das 3. Crie um novo documento [...]]]></description>
			<content:encoded><![CDATA[<p>Algo que muitas pessoal tem me perguntado é como criar uma galeria de fotos bem legal. Uma que estou utilizando muito, é feita com um plugin do <a href="http://www.botecodigital.info/jquery/iniciando-com-jquery" target="_blank">JQuery</a>  chamada <a href="http://www.no-margin-for-errors.com/projects/prettyPhoto-jquery-lightbox-clone/" target="_blank">PrettyPhoto</a>, ela utiliza um efeito chamado <a href="http://en.wikipedia.org/wiki/Lightbox_(JavaScript)" target="_blank">lightbox</a>, que é parecido com um POPUP, mas bem  mais estiloso <img src='http://www.botecodigital.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  .</p>
<p> Bom para começar baixe o <a href="http://www.no-margin-for-errors.com/projects/prettyPhoto-jquery-lightbox-clone/" target="_blank">PrettyPhoto 2.4.3</a>  e descomacte em uma pasta. Ele é divido em 3 pastas <strong>css</strong>, <strong>js</strong> e <strong>images</strong>, para usalo você vai precisar das 3.</p>
<p> Crie um novo documento <acronym title="HyperText Markup Language">HTML</acronym> e inclua  na tag <em>header</em> a bilbioteca JQuery, o plugin que esta na pasta <strong>js</strong>,  a folha de estilo que esta na pasta <strong>css</strong>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="htmlstrict" style="font-family:monospace;">&lt;script src=&quot;http://jqueryjs.googlecode.com/files/jquery-1.3.2.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery.prettyPhoto.js&quot; type=&quot;text/javascript&quot; charset=&quot;utf-8&quot;&gt;&lt;/script&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;css/prettyPhoto.css&quot; type=&quot;text/css&quot; charset=&quot;utf-8&quot; /&gt;</pre></td></tr></table></div>

<p>Agora para criarmos a nossa galeria vamos precisar das fotos e das suas miniaturas, para nosso exemplo vamos armazena-la em uma pasta chamada <strong>img</strong>.</p>
<p>Para cada imagem vamos criar um link para imagem grande que quando clicado vai abri-la em nossoo lightbox.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="htmlstrict" style="font-family:monospace;">&lt;a href=&quot;img/foto1-g.jpg&quot; rel=&quot;prettyPhoto&quot;&gt;
   &lt;img src=&quot;img/foto1-p.jpg&quot; alt=&quot;Foto do Espaço 1&quot; /&gt;
&lt;/a&gt;</pre></td></tr></table></div>

<p>O atributo <strong><em>rel=&#8221;prettyPhoto&#8221;</em></strong> é utilizado  para selecionar os links que devem fazer parte de nossa galeria e  para isso deve ser aplicado o <strong>plugin PrettyPhoto</strong> que será responsavel por abrir a imagem que esta no atributo <em>href</em> de nosso link no <em>lightbox</em>.</p>
<p>Para aplicar o plugin nos links acrescentamos na tag <em>header</em> o seguinte código:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>script type<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;text/javascript&quot;</span> charset<span style="color: #339933;">=</span><span style="color: #3366CC;">&quot;utf-8&quot;</span><span style="color: #339933;">&gt;</span>
    $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	    $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a[rel^='prettyPhoto']&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">prettyPhoto</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;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #339933;">&lt;/</span>script<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Exemplo de <a href="http://www.botecodigital.info/exemplos/prettyphoto/" target="_blank">galeria feita com PrettyPhoto</a>.</p>
<p>Bem simples não?</p>
<p>Existem muitos Plugins para JQuery com as mais variadas funções, então não tente reinventar a roda todo dia, apenas procure uma que sirva no seu caminhão.</p>
<p>Aquele Abraço.</p>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/web/construindo-uma-galeria-de-fotos-com-o-plugin-prettyphoto-do-jquery/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Tags HTML: DEL e INS</title>
		<link>http://www.botecodigital.info/web/tags-html-del-e-ins/</link>
		<comments>http://www.botecodigital.info/web/tags-html-del-e-ins/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 11:23:44 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[Web]]></category>
		<category><![CDATA[adicionar conteudo]]></category>
		<category><![CDATA[del]]></category>
		<category><![CDATA[html]]></category>
		<category><![CDATA[ins]]></category>
		<category><![CDATA[remover conteudo]]></category>
		<category><![CDATA[tags]]></category>
		<category><![CDATA[tags desconhecidas]]></category>

		<guid isPermaLink="false">http://botecodigital.g8si.com/?p=402</guid>
		<description><![CDATA[A tag INS e e a tag DEL são duas tags HTML bem interessantes e muito pouco usadas elas servem para inserir e retirar texto do site após sua publicação. A maior parte das pessoas quando vai modificar/corrigir um texto na web apenas apaga o texto errado e no lugar insere outro. Mas isso, no modelo de publicação da internet, que utiliza links para referenciar partes do texto, pode causar alguns problemas. Vejamos eu publiquei uma notícia a uma semana [...]]]></description>
			<content:encoded><![CDATA[<p>A tag <strong>INS</strong> e e a tag <strong>DEL</strong>  são duas tags <acronym title="HyperText Markup Language">HTML</acronym> bem interessantes e muito pouco usadas elas servem para inserir e retirar  texto do site após sua publicação.</p>
<p>A maior parte das pessoas quando vai modificar/corrigir um texto na web apenas apaga o texto errado e no lugar insere outro. Mas isso, no modelo de publicação da internet, que utiliza links para referenciar partes do texto, pode causar alguns problemas.</p>
<p>Vejamos eu publiquei uma notícia a uma semana atrás, um outro site linkou esta notícia fazendo referência a uma dado fornecido por ela. Uma semana se passou e eu descobri que o dado que tinha colocado na notícia estava errado, justamente o dado que o outro site fazia referência. Eu vou lá e simplesmente apago do código <acronym title="HyperText Markup Language">HTML</acronym>  o dado que estava errado e substituo pelo certo. Como fica o outro site que gentilmente  fez um link para a notícia? Agora o que ele referenciou não existe mais, seus usuários  vão clicar no link e não vão encontrar aquela informação.</p>
<p> Na Web não podemos simplesmente apagar conteúdo do site pois vários outros sites podem  estar referenciando esta informação. O modo mais correto é marcar o texto como não sendo  mais válido( com a tag <strong>&lt;del&gt;</strong>) e informar que um novo conteúdo foi inserido (com a tag  <strong>&lt;ins&gt;</strong>).</p>
<pre lang="" line="1">

 O <del>Inter</del> <ins>Grêmio</ins> é um grande time
</pre>
<p> No exemplo acima o texto estava errado <img src='http://www.botecodigital.info/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  e foi marcada a palavra/informação que  não valia mais(com a tag <strong>del</strong>) e foi inserida uma nova para deixar   a informação corretar, essa nova  palavra/informação foi marcada com a tag <strong>ins</strong>.</p>
<p> Na formatação <acronym title="Cascading Style Sheets">CSS</acronym> padrão do <acronym title="HyperText Markup Language">HTML</acronym> o texto marcado com a tag <strong>del</strong> fica com um risco em cima do texto( CSS: text-decoration: line-through;)  e o texto marcado com a tag <strong>ins</strong> fica sublinhado, mas esta formatação pode ser mudada com <acronym title="Cascading Style Sheets">CSS</acronym>.</p>
<p>Isso é tudo pessoal!</p>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/web/tags-html-del-e-ins/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Introdução ao AJAX com JQuery</title>
		<link>http://www.botecodigital.info/web/introducao-ao-ajax-com-jqurey/</link>
		<comments>http://www.botecodigital.info/web/introducao-ao-ajax-com-jqurey/#comments</comments>
		<pubDate>Sat, 09 May 2009 12:59:20 +0000</pubDate>
		<dc:creator>Rodrigo Aramburu</dc:creator>
				<category><![CDATA[JQuery]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[ajax]]></category>

		<guid isPermaLink="false">http://botecodigital.g8si.com/?p=292</guid>
		<description><![CDATA[Para quem já trabalha com internet há algum tempo esta é uma sigla bastante comum. Mas o que seria exatamente AJAX? Para começar vamos esclarecer que AJAX não é uma tecnologia e sim uma metodologia que utiliza tecnologias não tão novas assim como XML e Javascript para fazer requisições assíncronas ao servidor e com as informações retornadas modificar a página já carregada utilizando DOM para modificar-la sem recarregar todo conteúdo novamente. E com isso economizar no tráfego de internet e [...]]]></description>
			<content:encoded><![CDATA[<p>Para quem já trabalha com internet há algum tempo esta é uma sigla bastante comum. Mas o que seria exatamente <strong><acronym title="Asynchronous JavaScript and XML">AJAX</acronym></strong>?</p>
<p>Para começar vamos esclarecer que <strong><acronym title="Asynchronous JavaScript and XML">AJAX</acronym></strong> não é uma tecnologia e sim uma metodologia que utiliza tecnologias não tão novas assim como <acronym title="eXtensible Markup Language"><acronym title="eXtensible Markup Language">XML</acronym></acronym> e Javascript para fazer requisições assíncronas ao servidor e com as informações retornadas modificar a página já carregada utilizando <acronym title="Document Object Model">DOM</acronym> para modificar-la sem recarregar todo conteúdo novamente. E com isso economizar no tráfego de internet e melhorar a experiência do usuário.</p>
<p>Primeiramente vejamos como uma página simples é carregada.</p>
<p>1 . O usuário digita um <acronym title="Uniform Resource Locator">URL</acronym> no campo endereço aperta enter e o navegador envia uma requisição normalmente do tipo GET para o servidor que retorna para o navegador o conteúdo que é exibido.</p>
<p>2. O usuário clica em um link da página então o navegador faz outra requisição ao servidor que envia todo o conteúdo da nova página novamente.</p>
<p><img src="http://www.botecodigital.info/wp-content/uploads/2009/05/ajax.png" alt="Requisição ajax" title="Requisição ajax" width="450" height="534" class="aligncenter size-full wp-image-312" /></p>
<p>Se pensarmos um pouco, muito conteúdo é repetido é baixado quando navegamos entre as página de um mesmo site, como topo, menus, rodapés etc.</p>
<p>Com base nisso, porque não carregar somente o conteúdo que mudou a cada requisição, sem mexer no resto do conteúdo da página? Isto é a base do <acronym title="Asynchronous JavaScript and XML">AJAX</acronym>.</p>
<p>Quando começou a ser utilizado a o retorno do servidor era feito em <acronym title="eXtensible Markup Language">XML</acronym> (por isso o X da sigla) mas com o passar do tempo passou a se chamar <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> toda requisição assíncrona ao servidor Web.</p>
<p>Bom para entendermos como fazer uma requisição assíncrona precisamos conhecer 2 tipos de requisição que o protocolo <acronym title="HyperText Transfer Protocol">HTTP</acronym> aceita:</p>
<p><strong>GET:</strong> É o método mais comum: solicita algum recurso como um arquivo ou um script (qualquer dado que estiver identificado pelo <acronym title="Uniform Resource Identifier">URI</acronym>) por meio do protocolo <acronym title="HyperText Transfer Protocol">HTTP</acronym>. O método GET é reconhecido por todos os servidores.</p>
<p><strong>POST:</strong> Envia dados para serem processados (por exemplo, dados de um formulário <acronym title="HyperText Markup Language">HTML</acronym>) para o recurso especificado. Os dados são incluídos no corpo do comando.</p>
<p>Bom vamos agora ver um pequeno exemplo de como fazer requisições assíncronas e carregar o conteúdo dentro de um div utilizando a JQuery.</p>
<h5><acronym title="HyperText Markup Language">HTML</acronym> Principal</h5>

<div class="wp_syntax"><div class="code"><pre class="html" style="font-family:monospace;">&lt;div id=&quot;carregando&quot;&gt;Carregando&lt;/div&gt;
&nbsp;
&lt;h1&gt;Cabeçalho&lt;/h1&gt;
&nbsp;
&lt;a href=&quot;conteudo1.php&quot;&gt;Conteudo 1&lt;/a&gt;
&lt;a href=&quot;conteudo2.php&quot;&gt;Conteudo 2&lt;/a&gt;
&lt;a href=&quot;conteudo3.php&quot;&gt;Conteudo 3&lt;/a&gt;
&lt;a href=&quot;conteudo4.php&quot;&gt;Conteudo 4&lt;/a&gt;
&nbsp;
&lt;div id=&quot;conteudo&quot;&gt;&lt;/div&gt;</pre></div></div>

<p>Como vimos não é nada diferente do que conhecemos, também temos os arquivos com o conteúdo que irá dentro do div #conteudo:</p>
<h5>conteudo1.php</h5>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h1</span>&gt;</span> Conteudo 1<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;">p</span>&gt;</span>Donec scelerisque aliquet nunc id mattis. Aliquam auctor bibendum massa at dapibus. Suspendisse ante metus, ornare vitae venenatis vitae, posuere sit amet risus. Nam lacus orci, placerat ut tincidunt nec, tincidunt mollis nisl? Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse id arcu sed urna tincidunt semper. Mauris eu mauris nec est euismod dapibus. Suspendisse imperdiet est id purus placerat consectetur. Curabitur interdum ipsum vitae lacus tincidunt nec elementum nunc consectetur. Etiam dapibus felis non nisl tempor lobortis. Mauris commodo varius ligula eget posuere. Suspendisse ligula arcu, tincidunt dictum varius in, bibendum in purus. Maecenas faucibus, lorem vel fermentum vehicula, dui magna dignissim mauris, viverra egestas magna eros eu lorem. Donec facilisis felis suscipit dui blandit eget commodo erat feugiat. Proin eget diam risus.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span></pre></div></div>

<h5>conteudo2.php</h5>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h2</span>&gt;</span> Conteudo 2<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h2</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;</span>Nullam non metus risus, in congue velit. Mauris vitae est massa! Nunc suscipit iaculis varius. Suspendisse eros neque, consectetur ut tincidunt sed, placerat eget ipsum? Phasellus eget mauris libero. Donec elit nunc, varius nec auctor vitae, dapibus non turpis. Donec cursus malesuada quam, id accumsan ante imperdiet ac. Donec purus lorem, fringilla fermentum tempus a, porta quis velit. Morbi quis arcu magna, in ultrices neque? Nullam molestie ultricies nibh placerat varius?<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span></pre></div></div>

<h5>conteudo3.php</h5>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h3</span>&gt;</span> Conteudo 3<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h3</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;</span>Vestibulum eget tellus eros. Mauris et ante id diam malesuada dignissim. Nam vel sem pulvinar velit tincidunt sodales id et ipsum. Cras magna turpis; egestas non dignissim id; malesuada vel velit! Vivamus libero lorem; congue ut auctor sed; rhoncus mattis magna. Sed eget purus ac ante feugiat laoreet! Aliquam erat volutpat. Duis eu nisi ac metus interdum lobortis eget vitae enim. Nunc adipiscing accumsan magna, at rutrum tortor condimentum ac. Sed lobortis adipiscing erat, faucibus blandit odio mollis in. Integer ipsum justo, varius ac malesuada in, laoreet vitae lacus. Donec varius mauris nec dui tristique aliquet. Donec eros arcu, tristique eget fringilla sit amet, feugiat vel leo. Ut elit justo, elementum ut convallis in, consequat in eros. Proin a leo sed dolor aliquam ultrices.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span></pre></div></div>

<h5>conteudo4.php</h5>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">h4</span>&gt;</span> Conteudo 4<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">h4</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">p</span>&gt;</span>Cras porta, tellus eu elementum pulvinar, tellus nulla tempus neque, ac posuere sem sem varius quam? Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse lobortis feugiat ante interdum facilisis. Proin ante velit, congue vel lobortis a, commodo id risus. Ut sapien turpis, convallis condimentum suscipit in, imperdiet ut ante. Nullam molestie cursus leo, quis luctus risus bibendum quis? Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Suspendisse lacus nulla; tincidunt consequat rhoncus sed, suscipit sit amet tellus. Fusce faucibus, justo quis mollis volutpat, ligula est sodales dui; eu dictum ante urna vitae ipsum. Vivamus elementum leo et dui viverra blandit. Nunc ac blandit tellus. Sed dui nibh, porttitor nec sagittis quis, commodo tincidunt libero.<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">p</span>&gt;</span></pre></div></div>

<p>Bom com os arquivos <strong><acronym title="HyperText Markup Language">HTML</acronym> </strong>prontos vamos ao que interessa, o código Javascript que é responsável pelas requisições assíncronas pelo método <strong>GET</strong>:</p>

<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="javascript" style="font-family:monospace;">  $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
      $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;a&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">each</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
           <span style="color: #003366; font-weight: bold;">var</span> href <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'href'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
           $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'href'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'javascript:void(0)'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
           $<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">this</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">click</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#conteudo'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
       	    	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#carregando&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                 $.<span style="color: #660066;">get</span><span style="color: #009900;">&#40;</span> href <span style="color: #339933;">,</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#conteudo'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#carregando&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                 <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
     <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Na linha 2 utilizamos o método <strong>each</strong> que para cada elemento encontrado pelo seletor, no caso &#8220;a&#8221;(links), ele vai executar a função definida que captura a <acronym title="Uniform Resource Locator">URL</acronym> do atributo <strong>href</strong> do link e armazena em uma variável (linha 3), seta o atributo <strong>href</strong> para não apontar mais para nenhum link(linha 4), adiciona o evento <strong>click</strong> (linha 5), dentro do evento <strong>click</strong> limpamos o <em>div</em> <strong>#conteudo</strong> (linha 6), mostramos a mensagem de carregando (linha 7) e utilizamos o método <strong>$.get(url,function(data){})</strong> que realmente faz a mágica( linha 8).</p>
<p>O método <strong>$.get(url,function(data){})</strong> faz a requisição assíncrona com o servidor e passa para a função passada por parâmetro o retorno do servidor na variável data.</p>
<p>Após receber o retorno do servidor jogamos este retorno dentro da <em>div</em> <strong>#conteudo</strong>(linha 9) e escondemos a mensagem de carregando (linha 10).</p>
<p>Para ver o exemplo funcionando <a href="http://www.botecodigital.info/exemplos/ajax/" target="_blank">clique aqui</a></p>
<p>Veremos agora como criar um formulário utilizando <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> pelo método <strong>POST</strong>:</p>
<h5><acronym title="HyperText Markup Language">HTML</acronym></h5>

<div class="wp_syntax"><div class="code"><pre class="html4strict" style="font-family:monospace;"><span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;carregando&quot;</span>&gt;</span>Carregando<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">div</span> <span style="color: #000066;">id</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;mensagem&quot;</span>&gt;&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">div</span>&gt;</span>
&nbsp;
<span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">form</span> <span style="color: #000066;">action</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;processapost.php&quot;</span> <span style="color: #000066;">method</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;post&quot;</span>&gt;</span>
&nbsp;
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">label</span> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;nome&quot;</span>&gt;</span>Nome:<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">label</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;nome&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
&nbsp;
    <span style="color: #009900;">&lt;<span style="color: #000000; font-weight: bold;">label</span> <span style="color: #000066;">for</span><span style="color: #66cc66;">=</span><span style="color: #ff0000;">&quot;email&quot;</span>&gt;</span>E-mail<span style="color: #009900;">&lt;<span style="color: #66cc66;">/</span><span style="color: #000000; font-weight: bold;">label</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;email&quot;</span> <span style="color: #66cc66;">/</span>&gt;</span>
&nbsp;
    <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></pre></div></div>

<h5>Script que processa a requisição POST (processapost.php)</h5>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">        Dados enviados:&lt;br /&gt;&lt;br /&gt;
       <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;Nome: &quot;</span><span style="color: #339933;">.</span><span style="color: #000088;">$_POST</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: #000000; font-weight: bold;">?&gt;</span>
       &lt;br /&gt;
       <span style="color: #000000; font-weight: bold;">&lt;?php</span> <span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">&quot;E-mail: &quot;</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: #000000; font-weight: bold;">?&gt;</span></pre></td></tr></table></div>

<h5>E o código Javascript:</h5>

<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
</pre></td><td class="code"><pre class="javascript" style="font-family:monospace;">  $<span style="color: #009900;">&#40;</span>document<span style="color: #009900;">&#41;</span>.<span style="color: #660066;">ready</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
        <span style="color: #003366; font-weight: bold;">var</span> action <span style="color: #339933;">=</span> $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'form'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'action'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'form'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">attr</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'action'</span><span style="color: #339933;">,</span><span style="color: #3366CC;">'javascript:void(0);'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'form'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">submit</span><span style="color: #009900;">&#40;</span><span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
       	    	$<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#carregando&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
&nbsp;
                 $.<span style="color: #660066;">post</span><span style="color: #009900;">&#40;</span>action <span style="color: #339933;">,</span>jQuery<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;form&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">serialize</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span>  <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
                        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#mensagem'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">html</span><span style="color: #009900;">&#40;</span>data<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'#mensagem'</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">show</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        $<span style="color: #009900;">&#40;</span><span style="color: #3366CC;">&quot;#carregando&quot;</span><span style="color: #009900;">&#41;</span>.<span style="color: #660066;">hide</span><span style="color: #009900;">&#40;</span><span style="color: #3366CC;">'slow'</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                 <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #000066; font-weight: bold;">return</span> <span style="color: #003366; font-weight: bold;">null</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #009900;">&#125;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Na linha 2 capturamos a <acronym title="Uniform Resource Locator">URL</acronym> que irá processar e retornar os valores do nosso formulário e depois (linha 3) configuramos para que o formulário não envie a requisição como faria normalmente, e configuramos o evento <strong>submit</strong> (linha 4) que é ativado quando o formulário é enviado.</p>
<p>Quando isto acontecer ele irá mostrar a mensagem de carregando (linha 5) e utilizamos o método <strong>$.post(url ,dados, function(data)){}</strong> que faz uma requisição via <strong>POST</strong> para <strong>url</strong>, enviando um array <strong>dados</strong> e após executa a função recebendo por parâmetro <strong>data</strong> com o retorno do servidor. Na linha 9 inserimos o retorno da requisição na <strong>div #mensagem</strong>, deixamos visível esta <strong>div</strong> e por fim escondemos a mensagem de carregando(linha 11).</p>
<p>Os dados enviados são passados na forma de array no fomato:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"> <span style="color: #009900;">&#123;</span> var1<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;valor1&quot;</span><span style="color: #339933;">,</span> var2<span style="color: #339933;">:</span> <span style="color: #3366CC;">&quot;valor2&quot;</span> <span style="color: #009900;">&#125;</span></pre></div></div>

<p>ou na forma de string:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;"> var1<span style="color: #339933;">=</span>valor<span style="color: #339933;">&amp;</span>var2<span style="color: #339933;">=</span>valor</pre></div></div>

<p>Como vimos no exemplo utilizamos <strong>jQuery(&#8220;form&#8221;).serialize(),  </strong> que converte um conjunto de <em>inputs</em> em uma string no segundo formato.</p>
<p>Para ver o exemplo funcionando <a href="http://www.botecodigital.info/exemplos/ajax/post.php" target="_blank">clique aqui</a></p>
<p>Este foi o tão aguardado artigo sobre <acronym title="Asynchronous JavaScript and XML">AJAX</acronym> com JQuery, os exemplos são bastante simples mas com um pouco de criatividade dá para fazer coisas bem legais.</p>
<p>Até mais &#8220;Vida longa e prospera!&#8221;</p>]]></content:encoded>
			<wfw:commentRss>http://www.botecodigital.info/web/introducao-ao-ajax-com-jqurey/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>
