<?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>Blog d&#039;Okano</title>
	<atom:link href="http://www.williamokano.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.williamokano.com</link>
	<description></description>
	<lastBuildDate>Fri, 17 May 2013 17:10:26 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Calculando Idade em C#</title>
		<link>http://www.williamokano.com/2013/05/17/calculando-idade-em-c/</link>
		<comments>http://www.williamokano.com/2013/05/17/calculando-idade-em-c/#comments</comments>
		<pubDate>Fri, 17 May 2013 17:10:26 +0000</pubDate>
		<dc:creator>williamokano</dc:creator>
				<category><![CDATA[C Sharp]]></category>

		<guid isPermaLink="false">http://www.williamokano.com/?p=237</guid>
		<description><![CDATA[Hoje, uma dica rápida, só pra voltar a postar. Uma função para você poder calcular a Idade a partir de um DateTime: Rápido, rasteiro e voando! &#160;]]></description>
				<content:encoded><![CDATA[<p>Hoje, uma dica rápida, só pra voltar a postar.</p>
<p>Uma função para você poder calcular a Idade a partir de um DateTime:</p>
<pre class="brush: csharp; title: ; notranslate">
public int CalculaIdade(DateTime DataNascimento)
{
 int anos = DateTime.Now.Year - DataNascimento.Year;
 if (DateTime.Now.Month &lt; DataNascimento.Month || (DateTime.Now.Month == DataNascimento.Month &amp;&amp; DateTime.Now.Day &lt; DataNascimento.Day))
 anos--;
 return anos;
}
</pre>
<p>Rápido, rasteiro e voando!</p>
<p>&nbsp;</p>
<p> <img src='http://www.williamokano.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.williamokano.com/2013/05/17/calculando-idade-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>UTF-8 Com BOM + PHP + Erros = Dor de Cabeça! Um Little Help!</title>
		<link>http://www.williamokano.com/2012/10/18/utf-8-com-bom-php-erros-dor-de-cabeca-um-little-help/</link>
		<comments>http://www.williamokano.com/2012/10/18/utf-8-com-bom-php-erros-dor-de-cabeca-um-little-help/#comments</comments>
		<pubDate>Fri, 19 Oct 2012 02:24:58 +0000</pubDate>
		<dc:creator>williamokano</dc:creator>
				<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.williamokano.com/?p=213</guid>
		<description><![CDATA[Hoje comecei a ter uns erros mó estranhos de PHP onde apareciam uns caracteres estranhos na saída do buffer que zuava toda minha página. Por um pouco que pesquisei vi que o problema era o UTF-8 e os arquivos salvos com o BOM. A solução é fácil, alterar o encoding de todos os arquivos para [...]]]></description>
				<content:encoded><![CDATA[<p>Hoje comecei a ter uns erros mó estranhos de PHP onde apareciam uns caracteres estranhos na saída do buffer que zuava toda minha página.</p>
<p>Por um pouco que pesquisei vi que o problema era o UTF-8 e os arquivos salvos com o BOM.</p>
<p>A solução é fácil, alterar o encoding de todos os arquivos para UTF-8 sem BOM (Notepad++ faz isso).<br />
<span id="more-213"></span><br />
Como uso Zend, Smarty e Doctrine para criar minhas aplicações em PHP, tenho cerca de uns 15.000 arquivos divididos nas mais &#8220;filhas da putas&#8221; pastas, impossível de ser realizado &#8220;manualmente&#8221;.</p>
<p>Para tanto, escrevi um código em C# que vai recursivamente acessando as pastas e verificando se o arquivo tem BOM e caso tenha, o remova.</p>
<p>Segue código:</p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace SuperMigueBomRemover
{
    class Program
    {

        public static string path_inicial = &quot;D:\\bom_remover\\&quot;;

        #region SOME DEMONHO
        static void Main(string[] args)
        {
            //Executa o método de run
            (new Program()).run(path_inicial);
        }
        #endregion

        public void run(string path)
        {
            DirectoryInfo diretorio = new DirectoryInfo(@path);
            FileInfo[] arquivos = diretorio.GetFiles(&quot;*.*&quot;);
            DirectoryInfo[] subDiretorios = diretorio.GetDirectories();

            string temp;

            foreach (FileInfo file in arquivos)
            {
                //Guardo o caminho do arquivo em temp
                temp = path + file.Name;
                this.trataOBomDoInferno(temp);
            }
            foreach (DirectoryInfo dir in subDiretorios)
            {
                //Guardo o caminho do subDir em temp
                temp = string.Format(&quot;{0}{1}\\&quot;, path, dir.Name);
                System.Console.WriteLine(&quot;Aplicando recursão no diretório {0}\n&quot;, temp);
                this.run(temp);
            }
            return;
        }

        private void trataOBomDoInferno(string file)
        {
            if (new string[] { &quot;html&quot;, &quot;php&quot;, &quot;htm&quot;, &quot;css&quot;, &quot;js&quot;, &quot;txt&quot;, &quot;xml&quot; }.Where(p =&gt; file.EndsWith(p)).Count() &gt; 0)
            {
                System.Console.WriteLine(&quot;Tratando o arquivo {0}&quot;, file);
                if (File.Exists(file))
                {
                    System.Console.WriteLine(&quot;Existe: {0}\n&quot;, file);
                    StreamReader st = new StreamReader(file);

                    string texto = st.ReadToEnd();

                    st.Close();
                    Byte[] b = System.Text.Encoding.UTF8.GetBytes(texto);
                    Stream s = File.Create(file);
                    s.Write(b, 0, b.Length);
                    s.Close();
                }
                else
                {
                    System.Console.WriteLine(&quot;Não existe: {0}\n&quot;, file);
                }
            }
            else
            {
                System.Console.WriteLine(&quot;{0} é necessário ser tratado.&quot;, file);
            }
        }

    }
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.williamokano.com/2012/10/18/utf-8-com-bom-php-erros-dor-de-cabeca-um-little-help/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Enviando E-mail Autenticado SMTP e Gmail em C#</title>
		<link>http://www.williamokano.com/2012/10/05/enviando-e-mail-autenticado-smtp-e-gmail-em-c/</link>
		<comments>http://www.williamokano.com/2012/10/05/enviando-e-mail-autenticado-smtp-e-gmail-em-c/#comments</comments>
		<pubDate>Fri, 05 Oct 2012 17:36:49 +0000</pubDate>
		<dc:creator>williamokano</dc:creator>
				<category><![CDATA[C Sharp]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[autenticado]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[e-mail]]></category>
		<category><![CDATA[enviar]]></category>
		<category><![CDATA[gmail]]></category>
		<category><![CDATA[smtp]]></category>

		<guid isPermaLink="false">http://www.williamokano.com/?p=203</guid>
		<description><![CDATA[Olá, hoje irei &#8220;ensinar&#8221; como enviar um e-mail autenticado com C#. Para tanto, se faz necessário utilizar as seguintes bibliotecas: Como iremos enviar um e-mail autenticado via SMTP, precisamos instanciar um objeto do tipo SmtpClient, habilitar o SSL (O Gmail pede SSL) e passar as credenciais (através do Objeto NetworkCredential) para o atributo Credentials. Segue [...]]]></description>
				<content:encoded><![CDATA[<p>Olá, hoje irei &#8220;ensinar&#8221; como enviar um e-mail autenticado com C#.</p>
<p>Para tanto, se faz necessário utilizar as seguintes bibliotecas:</p>
<pre class="brush: csharp; title: ; notranslate">
using System.Net.Mail;
using System.Net;
</pre>
<p>Como iremos enviar um e-mail autenticado via SMTP, precisamos instanciar um objeto do tipo SmtpClient, habilitar o SSL (O Gmail pede SSL) e passar as credenciais (através do Objeto NetworkCredential) para o atributo Credentials. Segue código:</p>
<p><span id="more-203"></span></p>
<pre class="brush: csharp; title: ; notranslate">
SmtpClient client = new SmtpClient();
client.Host = &quot;smtp.gmail.com&quot;;
client.EnableSsl = true;
client.Credentials = new NetworkCredential(&quot;seulogin&quot;, &quot;suasenha&quot;); //PS.: não utilizar @gmail.com, é tudo antes do @. Ex.: william@gmail.com login = william
</pre>
<p>E agora iremos criar o E-mail propriamente dito e depois dispara-lo utilizando o método Send da classe SmtpClient. Segue o código:</p>
<pre class="brush: csharp; title: ; notranslate">
MailMessage mail = new MailMessage(); //Instancio o Objeto do tipo MailMessage
mail.Sender = new MailAddress(&quot;williamokano@gmail.com&quot;, &quot;William Okano&quot;); //Defino quem está enviado
mail.From = new MailAddress(&quot;williamokano@gmail.com&quot;, &quot;William Okano&quot;); //Defino o return path
mail.To.Add(new MailAddress(&quot;william.okano@webroom.com.br&quot;, &quot;William - Webroom&quot;)); //Adiciono um destinatário
mail.Subject = &quot;Teste E-mail Console Application&quot;; //Assunto do e-mail
mail.Body = &quot;&lt;strong&gt;Teste&lt;/strong&gt; de &lt;em&gt;e-mail&lt;/em&gt; ( :&quot;; //Corpo (mensagem) do e-mail (Em html pois logo abaixo ativamos o html)
mail.IsBodyHtml = true; //Avisamos que o e-mail é composto em HTML
mail.Priority = MailPriority.High; //Definimos a prioridade do e-mail como alta
</pre>
<p>E assim definimos nossa mensagem. Agora só falta disparar, e este, agora, é o mais fácil, sendo simplesmente:</p>
<pre class="brush: csharp; title: ; notranslate">
client.Send(mail);
</pre>
<p>Você pode cercar tudo com um try-catch para saber caso dê algum erro, etc. Não entrarei no método de capturar excessão.</p>
<p>Bom galera, foi isso! Um beijo e um queijo, e até o próximo &#8220;artigo&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.williamokano.com/2012/10/05/enviando-e-mail-autenticado-smtp-e-gmail-em-c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando um livro de visitas com PHP e MySQL [Vídeo-aula]</title>
		<link>http://www.williamokano.com/2012/09/04/criando-um-livro-de-visitas-com-php-e-mysql-video-aula/</link>
		<comments>http://www.williamokano.com/2012/09/04/criando-um-livro-de-visitas-com-php-e-mysql-video-aula/#comments</comments>
		<pubDate>Wed, 05 Sep 2012 00:03:20 +0000</pubDate>
		<dc:creator>williamokano</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.williamokano.com/?p=200</guid>
		<description><![CDATA[Olá amigos e amigas, inimigos e inimigas. Venho lhes apresentar hoje a primeira aula um novo projeto que estou fazendo, que será as vídeo aulas de programação. Estou começando com PHP, conheço um pouco melhor e acho que será mais fácil. Nesta primeira aula vou ensinar como criar um livro de visitas: Segue]]></description>
				<content:encoded><![CDATA[<p>Olá amigos e amigas, inimigos e inimigas.</p>
<p>Venho lhes apresentar hoje a primeira aula um novo projeto que estou fazendo, que será as vídeo aulas de programação.</p>
<p>Estou começando com PHP, conheço um pouco melhor e acho que será mais fácil.</p>
<p>Nesta primeira <span id="more-200"></span>aula vou ensinar como criar um livro de visitas:</p>
<p>Segue</p>
<p><iframe width="480" height="360" src="http://www.youtube.com/embed/iuXpa2N0GpU" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.williamokano.com/2012/09/04/criando-um-livro-de-visitas-com-php-e-mysql-video-aula/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>suPHP, HTTP Error 500 e dor de cabeça.</title>
		<link>http://www.williamokano.com/2012/07/05/suphp-http-error-500-e-dor-de-cabeca/</link>
		<comments>http://www.williamokano.com/2012/07/05/suphp-http-error-500-e-dor-de-cabeca/#comments</comments>
		<pubDate>Thu, 05 Jul 2012 12:40:54 +0000</pubDate>
		<dc:creator>williamokano</dc:creator>
				<category><![CDATA[Apache]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[erro 500]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[mod_suphp]]></category>
		<category><![CDATA[suphp]]></category>
		<category><![CDATA[su_php]]></category>

		<guid isPermaLink="false">http://www.williamokano.com/?p=192</guid>
		<description><![CDATA[E aí galera, quanto tempo que eu não posto nada aqui no meu blog, quase 1 ano. Bom, firulas a parte, hoje queria deixar uma coisa que me quebrou muito a cabeça em um servidor compartilhado e, talvez, por burrice minha, ou falta de atenção, acabou passando despercebido e isso me custou bastante tempo para [...]]]></description>
				<content:encoded><![CDATA[<p>E aí galera, quanto tempo que eu não posto nada aqui no meu blog, quase 1 ano.</p>
<p>Bom, firulas a parte, hoje queria deixar uma coisa que me quebrou muito a cabeça em um servidor compartilhado e, talvez, por burrice minha, ou falta de atenção, acabou passando despercebido e isso me custou bastante tempo para resolver o problema.</p>
<p>Fui subir uma aplicação desenvolvida em php a um servidor linux, e pra minha surpresa, toda vez dava um raio de um erro 500, e o projeto lá no meu pc, lindo e funcionando.</p>
<p>Depois de muito pesquisar, descobri que o &#8220;problema&#8221; era um tal de suPHP, que já ouvira falar mas nunca instalei/utilizei.</p>
<p>O mod_suphp, substitui o mod_php e assim, dizem, que aumenta a segurança, etc, etc, etc. Só que pra rodar esse mod tem um &#8220;porém&#8221;:</p>
<ul>
<li>Suas pastas devem estar com permissão 755</li>
<li>Seus arquivos devem estar com permissão 644</li>
</ul>
<p>&#8220;Tá&#8221;, mas e aí? E aí que eu subi geral com 755 e com esse módulo ativo, ele simplesmente te retorna um internal server error, &#8220;daí&#8221; você fica sem saber o que ocorreu, visto que eu não tinha acesso aos logs de erro.</p>
<div>Bom, mudei as permissões, e resolveu, simples assim.</div>
<div>Existe um comando que te auxilia no processo de alteração de permissão:</div>
<pre class="brush: bash; title: ; notranslate">
find /home/*/public_html -type d -exec chmod 755 {} \;
find /home/*/public_html -type f -exec chmod 644 {} \;
</pre>
<div>Basta trocar pelo caminho dos seus arquivos e resolver.</div>
<div>Outro problema que também pode gerar muito erro 500 em servidores apache é o tal do .htaccess com algum php_value ou php_flag, então fiquem sempre bem atentos a isso, e não deixem, assim como eu, passar um erro bobo tão despercebido e posteriormente ter tanta dor de cabeça!</div>
]]></content:encoded>
			<wfw:commentRss>http://www.williamokano.com/2012/07/05/suphp-http-error-500-e-dor-de-cabeca/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Criando um Hello World em C</title>
		<link>http://www.williamokano.com/2011/10/03/criando-um-hello-world-em-c/</link>
		<comments>http://www.williamokano.com/2011/10/03/criando-um-hello-world-em-c/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 12:03:10 +0000</pubDate>
		<dc:creator>williamokano</dc:creator>
				<category><![CDATA[C]]></category>
		<category><![CDATA[hello]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[world]]></category>

		<guid isPermaLink="false">http://www.williamokano.com/?p=182</guid>
		<description><![CDATA[Neste artigo irei escrever rapidamente como escrever um hello world em C. Como será utilizado C ANSI, poderá ser compilado em qualquer S.O. com suporte a linguagem (e pra ser sincero só testei em Windows e Linux). Vamos lá. Se você estiver utilizando Windows, ou alguma IDE, abra-a, mas nesse caso será necessário apenas um [...]]]></description>
				<content:encoded><![CDATA[<p>Neste artigo irei escrever rapidamente como escrever um hello world em C.</p>
<p>Como será utilizado C ANSI, poderá ser compilado em qualquer S.O. com suporte a linguagem (e pra ser sincero só testei em Windows e Linux).</p>
<p>Vamos lá.<span id="more-182"></span></p>
<p>Se você estiver utilizando Windows, ou alguma IDE, abra-a, mas nesse caso será necessário apenas um editor de texto.<br />
Eu costumo utilizar o notepad++ pra windows ou no linux o scite, mas quem gosta do kate, gedit ou mesmo o vi, pode utiliza-lo sem problema.</p>
<p>Escreva o seguinte código:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;stdio.h&gt;

int main(int argc, char* argv[]){
	printf(&quot;Hello world.\n&quot;);
	return 0;
}
</pre>
<p>Salve este arquivo como hello.c</p>
<p>Agora vamos lá ao comentário.</p>
<p>A Linha 1 é a inclusão do arquivo de assinaturas para entrada e saída básica.<br />
Não confunda com biblioteca, pois ela não é (não a stdio.<strong>H</strong>).<br />
A biblioteca em si está em algum lugar, já compilada, e apenas será linkada, mas precisa do arquivo de cabeçalho dela para poder utilizar as funções.</p>
<p>A terceira linha declara a função principal, ela não precisa dos argumentos passados (int argc, char* argv[]) nem do tipo de retorno, mas eu gosto de colocar.</p>
<p>A quarta linha é a saída, printf, ou seja, um print formatado (será abordado posteriormente em algum outro artigo).</p>
<p>E o return 0 é apenas para dizer ao sistema operacional que a função terminou.</p>
<p>Veja que se não haver a função main, nada será chamado, pois o compilador procura por esta função para dizer que ali é o entry point.</p>
<h1>Como compilar!</h1>
<p>Bom, se você está utilizando alguma IDE, você precisa fazer o build e depois o run e isso varia de IDE para IDE.<br />
Sei que no Dev-Cpp (Windows) é o F9 (atalho) e no Code::Blocks é o F6, não me recordo agora qual é, mas está por aí, eu juro.</p>
<p>Se você estiver utilizando o Linux (ou se baixou o GCC para windows), digite o seguinte comando no terminal:</p>
<pre class="brush: php; title: ; notranslate">
gcc hello.c -o hello
</pre>
<p>Se você estiver utilizando windows e compilando por linha de comando, é bom coloca no último hello a extensão &#8220;.exe&#8221;.</p>
<p>Se tudo correu bem, você irá executar o comando (./hello no linux ou hello.exe no windows) e ele escreverá na tela Hello World.</p>
<p>Bom, é só isso, um artigo singelo e logo logo tem mais.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.williamokano.com/2011/10/03/criando-um-hello-world-em-c/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Programação Orientada a Objetos em Java</title>
		<link>http://www.williamokano.com/2011/08/20/programacao-orientada-a-objetos-em-java/</link>
		<comments>http://www.williamokano.com/2011/08/20/programacao-orientada-a-objetos-em-java/#comments</comments>
		<pubDate>Sat, 20 Aug 2011 15:27:41 +0000</pubDate>
		<dc:creator>williamokano</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Orientação a Objetos]]></category>

		<guid isPermaLink="false">http://www.williamokano.com/?p=164</guid>
		<description><![CDATA[Programação Orientada a Objetos em Java Introdução Neste artigo irei descrever alguns conceitos de Orientação a Objetos, utilizando a linguagem Java. Para tanto, irei dividir o artigo em partes menores e irei posta-las conforme o tempo. A divisão será feita da seguinte maneira: Programação Orientada a Objetos em Java Reconhecendo Objetos Criando um tipo e [...]]]></description>
				<content:encoded><![CDATA[<p>Programação Orientada a Objetos em Java</p>
<h2>Introdução</h2>
<p>Neste artigo irei descrever alguns conceitos de Orientação a Objetos, utilizando a linguagem Java.</p>
<p>Para tanto, irei dividir o artigo em partes menores e irei posta-las conforme o tempo.</p>
<p>A divisão será feita da seguinte maneira:</p>
<ul>
<li><a href="http://www.williamokano.com/2011/08/19/programacao-orientada-a-objetos-em-java">Programação Orientada a Objetos em Java</a></li>
<li><a href="http://www.williamokano.com/2011/07/15/programacao-orientada-a-objetos-em-java-parte-1-reconhecendo-objetos/">Reconhecendo Objetos</a></li>
<li>Criando um tipo e Criando e Usando um Objeto</li>
<li>Métodos e Métodos com Retorno</li>
<li>Modificadores de Acesso</li>
<li>Métodos e Atributos Estáticos</li>
<li>Herança</li>
<li>Override</li>
<li>Overload</li>
<li>Classe e Método Abstrato</li>
<li>Interface</li>
<li>Excessões</li>
<li>Pacotes</li>
</ul>
<p><span id="more-164"></span></p>
<h2>Programação Orientada a Objetos</h2>
<p>A orientação a objetos é um paradigma de análise, projeto e programação de sistemas de software baseado na composição e interação entre diversas unidades de software chamadas de objetos. (Wikipédia <a href="http://pt.wikipedia.org/wiki/Orientação_a_objetos"></a>).</p>
<p>C++, C♯, VB.NET, Java, Object Pascal, Objective-C, Python, SuperCollider, Ruby e Smalltalk são exemplos de linguagens de programação orientadas a objetos. ActionScript, ColdFusion, Javascript, PHP (a partir da versão 4.0), Perl (a partir da versão 5) e Visual Basic 6,5 e 4 são exemplos de linguagens de programação com suporte a orientação a objetos.</p>
<p><strong>Classe</strong>: representa um conjunto de objetos com características afins. Uma classe define o comportamento dos objetos através de seus métodos, e quais estados ele é capaz de manter através de seus atributos.<br />
Exemplo de classe: Os seres humanos.</p>
<p><strong>Subclasse</strong>: é uma nova classe que herda características de sua(s) classe(s) ancestral(is).</p>
<p><strong>Objeto / instância de uma classe</strong>: um objeto é capaz de armazenar estados através de seus atributos e reagir a mensagens enviadas a ele, assim como se relacionar e enviar mensagens a outros objetos. Exemplo de objetos da classe Humanos: João, José, Maria</p>
<p><strong>Atributo</strong>: são características de um objeto. Basicamente a estrutura de dados que vai representar a classe. Exemplos: Funcionário: nome, endereço, telefone, CPF,&#8230;; Carro: nome, marca, ano, cor, …; Livro: autor, editora, ano. Por sua vez, os atributos possuem valores. Por exemplo, o atributo cor pode conter o valor azul. O conjunto de valores dos atributos de um determinado objeto é chamado de estado</p>
<p><strong>Método</strong>: define(m) o(s) comportamento(s) dos objetos.<br />
Bidu é uma instância da classe Cachorro, portanto tem habilidade para latir, implementada através do método deUmLatido.<br />
Um método em uma classe é apenas uma definição.<br />
A ação só ocorre quando o método é invocado através do objeto, no caso Bidu.<br />
Dentro do programa, a utilização de um método deve afetar apenas um objeto em particular.<br />
Todos os cachorros podem latir, mas você quer que apenas Bidu dê o latido.<br />
Normalmente, uma classe possui diversos métodos, que no caso da classe Cachorro poderiam ser sente, coma e morda.</p>
<p><strong>Mensagem</strong>: é uma chamada a um objeto para invocar um de seus métodos, ativando um comportamento descrito por sua classe.<br />
Também pode ser direcionada diretamente a uma classe (através de uma invocação a um método estático).</p>
<p><strong>Herança (ou generalização)</strong>: é o mecanismo pelo qual uma classe (sub-classe) pode estender outra classe (super-classe), aproveitando seus comportamentos (métodos) e variáveis possíveis (atributos).<br />
Um exemplo de herança: Mamífero é super-classe de Humano. Ou seja, um Humano é um mamífero.<br />
Há herança múltipla quando uma sub-classe possui mais de uma super-classe.<br />
Essa relação é normalmente chamada de relação &#8220;é um&#8221;.</p>
<p><strong>Associação</strong>: é o mecanismo pelo qual um objeto utiliza os recursos de outro.<br />
Pode tratar-se de uma associação simples &#8220;usa um&#8221; ou de um acoplamento &#8220;parte de&#8221;.<br />
Por exemplo: Um humano usa um telefone. A tecla &#8220;1&#8243; é parte de um telefone.</p>
<p><strong>Encapsulamento</strong>: consiste na separação de aspectos internos e externos de um objeto.<br />
Este mecanismo é utilizado amplamente para impedir o acesso direto ao estado de um objeto (seus atributos), disponibilizando externamente apenas os métodos que alteram estes estados.<br />
Exemplo: você não precisa conhecer os detalhes dos circuitos de um telefone para utilizá-lo.<br />
A carcaça do telefone encapsula esses detalhes, provendo a você uma interface mais amigável (os botões, o monofone e os sinais de tom).</p>
<p><strong>Abstração</strong>: é a habilidade de concentrar nos aspectos essenciais de um contexto qualquer, ignorando características menos importantes ou acidentais.<br />
Em modelagem orientada a objetos, uma classe é uma abstração de entidades existentes no domínio do sistema de software.</p>
<p><strong>Polimorfismo</strong>: consiste em quatro propriedades que a linguagem pode ter (atente para o fato de que nem toda linguagem orientada a objeto tem implementado todos os tipos de polimorfismo):<br />
Universal:<br />
Inclusão: um ponteiro para classe mãe pode apontar para uma instância de uma classe filha (exemplo em Java: &#8220;List lista = new LinkedList();&#8221; (tipo de polimorfismo mais básico que existe)<br />
Paramétrico: se restringe ao uso de templates (C++, por exemplo) e generics (Java/C?)<br />
Ad-Hoc:<br />
<strong> Sobrecarga</strong>: duas funções/métodos com o mesmo nome mas assinaturas diferentes<br />
Coerção: a linguagem que faz as conversões implicitamente (como por exemplo atribuir um int a um float em C++, isto é aceito mesmo sendo tipos diferentes pois a conversão é feita implicitamente)</p>
<p><strong>Interface</strong>: é um contrato entre a classe e o mundo externo. Quando uma classe implementa uma interface, ela está comprometida a fornecer o comportamento publicado pela interface.</p>
<p><strong>Pacotes</strong>: são referências para organização lógica de classes e interfaces.</p>
<p>Todos estes textos foram retirados da Wikipédia.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.williamokano.com/2011/08/20/programacao-orientada-a-objetos-em-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Listando arquivos e diretórios com PHP utilizando a classe DirectoryIterator</title>
		<link>http://www.williamokano.com/2011/08/19/listando-arquivos-e-diretorios-com-php-utilizando-a-classe-directoryiterator/</link>
		<comments>http://www.williamokano.com/2011/08/19/listando-arquivos-e-diretorios-com-php-utilizando-a-classe-directoryiterator/#comments</comments>
		<pubDate>Fri, 19 Aug 2011 20:23:19 +0000</pubDate>
		<dc:creator>williamokano</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.williamokano.com/?p=168</guid>
		<description><![CDATA[Olá, hoje irei postar aqui como listar arquivos e diretórios utilizando PHP. Só queria adiantar que existem vários métodos de se fazer isso e que esse é o que eu mais utilizo. Eu acho melhor por ser uma classe, logo pode ser extendida, etc. Bom, para listar os arquivos e diretórios você pode simplesmente intanciar [...]]]></description>
				<content:encoded><![CDATA[<p>Olá, hoje irei postar aqui como listar arquivos e diretórios utilizando PHP.</p>
<p>Só queria adiantar que existem vários métodos de se fazer isso e que esse é o que eu mais utilizo.</p>
<p>Eu acho melhor por ser uma classe, logo pode ser extendida, etc.<span id="more-168"></span></p>
<p>Bom, para listar os arquivos e diretórios você pode simplesmente intanciar um novo objeto do tipo DirectoryIterador passando o diretório como parâmetro no construtor e fazer um foreach nesse objeto. Segue exemplo:</p>
<pre class="brush: php; title: ; notranslate">
$iterador = new DirectoryIterator(&quot;/home/william/&quot;);
foreach ( $iterador as $entrada ) {
	echo $entrada-&gt;getFilename(), &quot;&lt;br/&gt;&quot;;
}
</pre>
<p>Você pode fazer ainda isso recursivamente, apesar de gostar de fazer manualmente. Segue o código:</p>
<pre class="brush: php; title: ; notranslate">
$iterator = new RecursiveDirectoryIterator('/var/www');
$recursiveIterator = new RecursiveIteratorIterator($iterator);

foreach ( $recursiveIterator as $entry ) {
	echo $entry-&gt;getFilename(), &quot;\n&quot;;
}
</pre>
<p>Até o próximo artigo, que acredito que será de java e POO!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.williamokano.com/2011/08/19/listando-arquivos-e-diretorios-com-php-utilizando-a-classe-directoryiterator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adicionando redes sociais aos seus posts.</title>
		<link>http://www.williamokano.com/2011/08/15/adicionando-redes-sociais-aos-seus-posts/</link>
		<comments>http://www.williamokano.com/2011/08/15/adicionando-redes-sociais-aos-seus-posts/#comments</comments>
		<pubDate>Mon, 15 Aug 2011 17:44:28 +0000</pubDate>
		<dc:creator>williamokano</dc:creator>
				<category><![CDATA[API]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<category><![CDATA[google buzz]]></category>
		<category><![CDATA[google plus]]></category>
		<category><![CDATA[like button]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[plugin social]]></category>
		<category><![CDATA[redes sociais]]></category>
		<category><![CDATA[tweet button]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.williamokano.com/?p=161</guid>
		<description><![CDATA[Olá, vim fazer o merchan de um plugin que eu escrevi para adicionar redes sociais ao seu blog sem necessidade de alterar o template. Sim, é esse que estou utilizando atualmente, foi desenvolvido por mim, com ajuda do Claudney Santana do cuca digital. Como eu subi no repositório do WordPress, é só pesquisar por &#8220;WP [...]]]></description>
				<content:encoded><![CDATA[<p>Olá, vim fazer o merchan de um plugin que eu escrevi para adicionar redes sociais ao seu blog sem necessidade de alterar o template.</p>
<p>Sim, é esse que estou utilizando atualmente, foi desenvolvido por mim, com ajuda do <a href="http://cucadigital.com.br">Claudney Santana</a> do cuca digital.</p>
<p>Como eu subi no repositório do WordPress, é só pesquisar por &#8220;<strong>WP Super Redes Sociais</strong>&#8221; que você o encontrará.<br />
<span id="more-161"></span></p>
<p>Para configura-lo, depois de instalado e ativado, vá no menu esquerdo da sua dash board e acesse o CHW Plugins.</p>
<p>Lá você pode fazer todas as configurações, como mostrar qual o usuário do twitter deve ser o do via (ex.: via @williamokano).</p>
<p>Você pode escolher o idioma do facebook.</p>
<p>E você ainda pode editar o CSS.</p>
<p>É bem simples e nada mais é do que um &#8220;catadão&#8221; das API&#8217;s já fornecidas pelas redes sociais.</p>
<p>Se tiver alguma sugestão de melhoria ou crítica, alguma funcionalidade específica ou alteração que não esteja conseguindo fazer, ou tenha feito e quer me ajudar na melhoria deste, deixe um comentário!!!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.williamokano.com/2011/08/15/adicionando-redes-sociais-aos-seus-posts/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Manipulando o banco de dados MySQL utilizando PHP</title>
		<link>http://www.williamokano.com/2011/08/09/manipulando-o-banco-de-dados-mysql-utilizando-php/</link>
		<comments>http://www.williamokano.com/2011/08/09/manipulando-o-banco-de-dados-mysql-utilizando-php/#comments</comments>
		<pubDate>Tue, 09 Aug 2011 20:02:44 +0000</pubDate>
		<dc:creator>williamokano</dc:creator>
				<category><![CDATA[MySQL]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[MYSQL]]></category>

		<guid isPermaLink="false">http://www.williamokano.com/?p=151</guid>
		<description><![CDATA[Utilizando banco de dados MySQL com PHP. Olá, neste artigo irei demonstrar brevemente como utilizar o banco de dados MySQL com PHP. Também irei dar uma breve explicação sobre SQL, na qual você deverá se aprofundar melhor. Só para deixar claro, irei utilizar o gerenciador fornecido pelo MySQL, o MySQL Workbench, que está na versão [...]]]></description>
				<content:encoded><![CDATA[<p>Utilizando banco de dados MySQL com PHP.</p>
<p>Olá, neste artigo irei demonstrar brevemente como utilizar o banco de dados MySQL com PHP.</p>
<p>Também irei dar uma breve explicação sobre SQL, na qual você deverá se aprofundar melhor.</p>
<p>Só para deixar claro, irei utilizar o gerenciador fornecido pelo MySQL, o MySQL Workbench, que está na versão 5.2.34 quando escrevo este post.</p>
<p>Download do Mysql e do MySQL workbench podem ser realizados na página <a href="http://www.mysql.com/downloads/">http://www.mysql.com/downloads/</a>.</p>
<p>Vamos lá.<br />
<span id="more-151"></span></p>
<h2>O que é banco de dados</h2>
<p><strong>Banco de dados</strong> (ou base de dados), é um conjunto de registros dispostos em estrutura regular que possibilita a reorganização dos mesmos e produção de informação.<br />
Um banco de dados normalmente agrupa registros utilizáveis para um mesmo fim.<br />
Um banco de dados é usualmente mantido e acessado por meio de um software conhecido como <strong>Sistema Gerenciador de Banco de Dados</strong> (SGBD).<br />
Normalmente um SGBD adota um modelo de dados, de forma pura, reduzida ou estendida. Muitas vezes o termo banco de dados é usado, de forma errônea, como sinônimo de SGBD.<br />
O modelo de dados mais adotado hoje em dia é o modelo relacional, onde as estruturas têm a forma de tabelas, compostas por tuplas (linhas) e colunas.<br />
Fonte: <a href="http://pt.wikipedia.org/wiki/Banco_de_dados">Wikipedia</a>.</p>
<h2>O que é SQL</h2>
<p><strong>Structured Query Language</strong>, ou Linguagem de Consulta Estruturada ou SQL, é uma linguagem de pesquisa declarativa para banco de dados relacional (base de dados relacional). Muitas das características originais do SQL foram inspiradas na álgebra relacional.<br />
Fonte: <a href="http://pt.wikipedia.org/wiki/SQL">Wikipedia</a>.</p>
<h2>Comandos SQL</h2>
<p>Comandos SQL tentam seguir um padrão, ANSI e ISO, porém algumas empresas costumar colocar alguns códigos próprios em seus gerenciadores, para otimização interna, etc.</p>
<p>Os comandos mais utilizados, e que vamos ver aqui, são os comandos para <a href="http://pt.wikipedia.org/wiki/CRUD">CRUD</a>.</p>
<p>	* <strong>CREATE</strong> &#8211; Comando Reponsável por criar uma tabela ou banco de dados, etc.<br />
	* <strong>INSERT</strong> &#8211; Comando Reponsável por inserir dados na tabela.<br />
	* <strong>SELECT</strong> &#8211; Comando responsável por buscar dados na tabela.<br />
	* <strong>UPDATE</strong> &#8211; Comando responsável por atualizar os dados de uma tabela.<br />
	* <strong>DELETE</strong> &#8211; Comando responsável por remover determinado dado (ou todos <img src='http://www.williamokano.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> ) de uma tabela.<br />
	* <strong>TRUNCATE</strong> &#8211; Comando responsável por LIMPAR uma tabela. Até as chaves de auto incremento voltam ao início.</p>
<h2>Exemplos</h2>
<p>Alguns exemplos de uso. Como base, iremos tomar como base um sistema básico de usuários com hierarquia.</p>
<p>Um usuário tem os atributos id (único e auto incremento), nome, login, senha e classe.<br />
Para id utilizaremos o tipo int.<br />
Para nome, login e senha utilizaremos varchar.<br />
E para classe também utilizaremos int.</p>
<p>Porque usar int na classe ao invés de utilizar varchar? Bom, isso é simples. Imagina que nós armazenamos a classe num atributo de texto, e temos 10000 usuários da classe usuário.<br />
Beleza, até ai sem problema. Mas agora não queremos mais que a classe usuário se chame usuário e sim Users. Teríamos que mudar 10000 registros.</p>
<p>Com o relacionamento, simplesmente alterando a tabela relacionada e altera de todos, pois ele está relacionado com a ID (que não muda) do que com o nome da classe.</p>
<p>Bom, a nossa tabela de relacionamento irá armazenar apenas a ID e o nome da classe. Bem simples não?</p>
<p>Uma imagem de como irá ficar as tabelas e o relacionamento.</p>
<p><img src="http://www.williamokano.com/wp-content/uploads/2011/08/php_mysql_relacionamento.png"/></p>
<p>O código pra gerar essa tabela com o relacionamento eu postarei logo abaixo explicando-o.</p>
<pre class="brush: sql; title: ; notranslate">
CREATE SCHEMA IF NOT EXISTS `dados` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ;
USE `dados` ;
-- -----------------------------------------------------
-- Table `dados`.`classes`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `dados`.`classes` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `nome` VARCHAR(45) NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `dados`.`usuarios`
-- -----------------------------------------------------
CREATE  TABLE `dados`.`usuarios` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `nome` VARCHAR(45) NULL ,
  `login` VARCHAR(45) NULL ,
  `senha` VARCHAR(32) NULL ,
  `classe` INT NULL ,
  PRIMARY KEY (`id`) ,
  INDEX `idx_classe` (`classe` ASC) ,
  CONSTRAINT `idx_classe`
    FOREIGN KEY (`classe` )
    REFERENCES `dados`.`classes` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
</pre>
<p>Bom, vamos lá, logo na primeira linha, vemos um CREATE SCHEMA `dados`, ou seja, vamos criar um <a href="http://pt.wikipedia.org/wiki/Esquema_de_banco_de_dados">esquema de dados</a> chamado dados. Usualmente irei me referir a ele como nosso banco de dados.</p>
<p>USE `dados` quer dizer que todas as consultas posteriores serão aplicados a esse esquema.</p>
<p>CREATE  TABLE IF NOT EXISTS `dados`.`classes` &#8211; Iremos criar uma tabela, apenas se não existir, chamada classes. Observe que utilizei `dados`.`classes`, que significa esquema e tabela.<br />
Como utilizamos o USE anteriormente, isso é redundante, mas como estou utilizando o <a href="http://www.mysql.com/downloads/workbench/">MySQL Workbench</a> para criar as querys, ele gera isso sozinho.</p>
<p>Bom, fora o create, iremos definir os atributos dessa tabela classes, que são ID e NOME.</p>
<p>ID é do tipo INT (inteiro, integer), não pode ser nulo, ou seja, sempre terá um valor do tipo selecionado e é auto incrementado, ou seja, não precisamos definir qual a ID pois ela aumentará automáticamente a cada novo registro.</p>
<p>Definimos a chave primária como sendo a ID, ou seja, definimos que ela nunca irá se repetir, e ela será indexada, ou seja, a grosso modo dizendo, será mais rápido buscar por esse campo.</p>
<p>O atributo nome é do tipo VARCHAR, e não CHAR, ambos se referem a texto. A diferença de um para o outro você pode conferir neste link <a href="http://dev.mysql.com/doc/refman/4.1/pt/char.html">Os Tipos CHAR e VARCHAR</a></p>
<p>Os atributos da segunda tabela são muito parecidos, a única diferença que talvez você tenha notado, é que lá além da primary key, existem também INDEX, CONSTRAINT, FOREIGN KEY e REFERENCES.</p>
<p>Isso significa que estou criando outro índice, só que desta vez com uma &#8220;ligação&#8221;, &#8220;amarramento&#8221; (CONSTRAINT), que será nossa relação com a tabela classes</p>
<p>FOREIGN KEY é com qual tabela iremos relacionar com nossa &#8220;chave estrangeira&#8221; (FOREIGN KEY = Chave Estrangeira) e será referenciado o campo ID da tabela (REFERENCES (id)).</p>
<p>&#8220;ON DELETE NO ACTION&#8221; e &#8220;ON UPDATE NO ACTION&#8221; significa que ao deletar ou atualizar um registro com relacionamento, nada será feito. Geralmente realizar esta ação gera um erro de constraint.</p>
<p>Agora explicado como funciona o banco, vamos inserir alguns registros, utilizar os comandos anteriormente citados e logo após como utiliza-los em PHP.</p>
<h2>Exemplo de Comando <strong>INSERT</strong></h2>
<p>O comando insert, serve para inserir dados. Existem vários jeitos de utilizar o comando, portante irei passar aqui apenas a sintaxe básica.</p>
<p>A sintaxe é a seguinte</p>
<pre class="brush: sql; title: ; notranslate">
INSERT INTO `nome_da_tabela` (campo1, campo2, campo3, campon) VALUES ('valor_campo1', 'valor_campo2', 'valor_campo3', 'valor_campon');
</pre>
<p>As aspas simples são necessárias quando se está utilizando Strings ou Datas, mas não são necessárias quando são números, e isso você verá quando formos inserir os dados dos usuários.</p>
<p>Observe o código de inserção de classes:</p>
<pre class="brush: sql; title: ; notranslate">
INSERT INTO `classes` (`nome`) VALUES ('Usuário');
</pre>
<p>O que ela faz é simplesmente pegar a tabela &#8220;classes&#8221; e inserir o valor &#8220;Usuário&#8221; no campo &#8220;nome&#8221;. Em nosso caso, é uma inserção simples, e não precisamos passar a ID, pois ela é gerada automaticamente.<br />
Vamos inserir as classes restantes.</p>
<pre class="brush: sql; title: ; notranslate">
INSERT INTO `classes` (`nome`) VALUES ('Moderador');
INSERT INTO `classes` (`nome`) VALUES ('Super Moderador');
INSERT INTO `classes` (`nome`) VALUES ('Administrador');
INSERT INTO `classes` (`nome`) VALUES ('Programador');
</pre>
<p>E agora vamos inserir os usuários:</p>
<pre class="brush: sql; title: ; notranslate">
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Maria', 'maria', 'maria123', 1);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Hildeu', 'hildeu', '123bbbas', 1);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Jorge', 'jorge', 'vidaloka', 1);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Fernando', 'fernando', '1a2b3c', 2);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Felipe', 'felipe', 'harrypotter', 3);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Bruno', 'bruno', 'alessandra', 3);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Roberto', 'roberto', 'vanessa', 4);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('Vinícius', 'vinicius', 'fuzzer', 4);
INSERT INTO `usuarios` (`nome`, `login`, `senha`, `classe`) VALUES ('William', 'william', '@de#AsnH$', 5);
</pre>
<p>Observe que o nome dos campos estão delimitados por crases e que nos valores, alguns são delimitados por aspas simples e outros nem são delimitados.</p>
<p>Isso foi explicado um pouco acima. rsrs.</p>
<h2>O Comando SELECT</h2>
<p>O comando SELECT é o responsável por realizarmos buscas em nosso banco de dados. A sintaxe básica é:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT campo1, campo2, campo3 FROM nome_da_tabela WHERE condicao;
</pre>
<p>campo1, campo2, campo3 são os dados que eu quero pesquisar, eu poderia simplesmente mudar para * e retornar todos os campos. As vezes você quer dados mais específicos, outras vezes não, depende da sua necessidade.</p>
<p>nome_da_tabela acho que é meio auto-explicativo, mas é a tabela que você quer pesquisar. Temos apenas a tabela usuarios e classes em nosso projeto.<br />
Acho importante ressaltar que poderíamos realizar a consulta em duas, três, N tabelas.</p>
<p>Por exemplo, iremos consultar o nome e classe dos todos os nossos usuarios:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT nome, classe FROM usuarios;
</pre>
<p>E agora vamos buscar apenas os programadores, ou seja, vamos buscar em duas tabelas:</p>
<pre class="brush: sql; title: ; notranslate">
SELECT usuarios.nome, classes.nome as classe FROM usuarios, classes WHERE classes.nome = &quot;Programador&quot; AND usuarios.classe = classes.id;
</pre>
<p>Veja que não é um bixo de 7 cabeças, a query (consulta) no fundo tem um sentido lógico.</p>
<p>&#8220;WHERE condicao&#8221; pode ser omitido, então retornaria todos os elementos, mas caso estejamos pesquisando, por exemplo todos que sejam da classe Administrador ficaria &#8220;WHERE classe = 4&#8243;.</p>
<p>Aqui é uma parte importante, pois podemos buscar de várias formas, a mais comum é a WHERE campo = &#8216;valor&#8217;, porém também temos operadores como o LIKE, o IN, o NOT.</p>
<p>Para exemplos melhores, recomendo ler uma apostila especializada em SQL, porém não utilizaremos esses operadores neste artigo.</p>
<h2>O Comando UPDATE</h2>
<p>Este comando acho que não preciso encher de firula, ele simplesmente atualiza os dados da tabela.<br />
Sua sintaxe é:</p>
<pre class="brush: sql; title: ; notranslate">
UPDATE nome_tabela SET nome_campo = 'novo_valor' WHERE condicao;
</pre>
<p>Esse comando é meio que auto explicativo, mas vamos a algumas observações:</p>
<p>	1 &#8211; Podemos atualizar mais de um campo ao mesmo tempo, nesse caso apenas separaríamos por uma vírgula (,) e colocaríamos outro_campo = &#8216;outro_valor&#8217;.<br />
	2 &#8211; Se não for utilizada a condição, você irá alterar os campos de todos os registros, isso é meio problemático rs. A não ser que você queira realmente fazer isso, como desativar todos os usuários, resetar todas as senhas, não sei rsrsrs.</p>
<p>Um exemplo para alterar a senha do usuário william:</p>
<pre class="brush: sql; title: ; notranslate">
UPDATE usuarios SET senha='123mudarasenha' WHERE login = 'william';
</pre>
<h2>O comando DELETE</h2>
<p>O comando DELETE serve simplesmente para remover, apagar, deletar, dar cabo (como preferir chamar, rsrs) em um determinado dado de uma determinada tabela, ou todos os dados de uma tabela, caso utilizado sem o WHERE.</p>
<p>Sua sintaxe básica é:</p>
<pre class="brush: sql; title: ; notranslate">
DELETE FROM nome_da_tabela WHERE condicao;
</pre>
<p>Como você já deve ter imaginado, se eu executar este comando sem passar a condição WHERE irei sumir com todos os dados dessa tabela. No Workbench por padrão é bloqueado UPDATE e DELETE sem a clausula WHERE, mas pode ser desativado, mas isso não é regra.</p>
<h2>O comando TRUNCATE</h2>
<p>O comando TRUNCATE tem por finalidade <strong>limpar todos os dados de uma tabela</strong>, ou seja, além de eliminar todos os registros, ele reinicia a numeração de auto incremento.</p>
<p>Sua sintaxe é:</p>
<pre class="brush: sql; title: ; notranslate">
TRUNCATE TABLE nome_da_tabela;
</pre>
<p>Bom, finalizado essa simplória parte sobre SQL, vamos agora como manipular isso em PHP.</p>
<h2>Brincando de MySQL com PHP</h2>
<p>Bom, agora vamos a parte que interessa. O que iremos fazer? Bom, não temos muita coisa no banco de dados, apenas duas tabelas.</p>
<p>Então, vamos realizar um simples sistema de gerenciamento, não iremos utilizar os dados de login nem nada, são apenas para &#8220;enfeite&#8221;, até porque, já tenho um <a href="http://www.williamokano.com/2011/07/17/criando-um-sistema-de-login-simples-com-php-mysql-sessao/">post sobre sistemas de login</a></p>
<p>Bom, iremos divir o artigo em partes:</p>
<p>	1 &#8211; Criando o arquivo de conexão<br />
	2 &#8211; Listagem de todos os usuários;<br />
	3 &#8211; Edição de usuário;<br />
	4 &#8211; Inserir novos usuários;<br />
	5 &#8211; Deletar usuários;<br />
	6 &#8211; Listagem de todas as classes;<br />
	7 &#8211; Edição de classes;<br />
	8 &#8211; Inserir novas classes;<br />
	9 &#8211; Deletar classes;</p>
<h2>Criando o arquivo de conexão</h2>
<p>O arquivo de conexão será responsável por, deerr, fazer a conexão. Ele deverá ser incluído em todas as páginas.</p>
<p>A função para conectar ao mysql é a <a href="http://br.php.net/mysql_connect">mysql_connect</a>.</p>
<p>Nossa página ficará da seguinte forma:</p>
<pre class="brush: php; title: ; notranslate">
/* ---------- ARQUIVO DE CONEXÃO COM O BANCO DE DADOS MYSQL ---------- */

/**
 * Constante de login do servidor de dados mysql
 */
define(&quot;DB_LOGIN&quot;, &quot;root&quot;);

/**
 * Constante da senha do servidor de dados mysql
 */
define(&quot;DB_SENHA&quot;, &quot;123456&quot;);

/**
 * Endereço do servidor de dados mysql
 */
define(&quot;DB_LOCAL&quot;, &quot;127.0.0.1&quot;);

/**
 * Banco de dados que iremos utilizar no servidor de dados conectado
 */
define(&quot;DB_BANCO&quot;, &quot;site-local&quot;);

/**
 * Conectamos e armazenamos o link de conexão
 */
$link = mysql_connect(DB_LOCAL, DB_LOGIN, DB_SENHA) or die(&quot;Não foi possível conectar com o servidor de dados.&quot;);;

/**
 * Selecionamos agora o banco de dados
 */
mysql_select_db(DB_BANCO, $link) or die(&quot;Não foi possível selecionar o banco no servidor especificado.&quot;);

/**
 * Definimos a codificação do banco como UTF-8, para evitar problemas com encoding
 */
mysql_set_charset(&quot;utf8&quot;, $link);
</pre>
<p>Esse arquivo será o responsável por conectar e não precisará sofrer mais nenhuma alteração.</p>
<p>Só lembrando que ele deverá ser incluído em todas as páginas que forem utilizar banco de dados.</p>
<h2>Listagem de todos os usuários</h2>
<p>Bom, para nossa listagem de usuários, não irei me focar em orientação a objetos, nem frameworks. Não utilizarei PDO, pois pretendo tentar passar a função nativa do mysql para PHP além de que, pretendo escrever posteriormente um artigo sobre PDO, na qual vocês poderão testar qual vocês acham melhor.</p>
<p>Para nossa listagem de usuários, iremos precisar de uma tabela, realizar a consulta, um loop para preencher os dados, nada muito complicado.</p>
<p>Nossa página ficaria mais ou menos semelhante a abaixo comentada:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
require_once(&quot;conexao.php&quot;);
?&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
        &lt;title&gt;Listagem de usuários&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        
        &lt;!-- CRIAMOS UMA TABELA PARA A LISTAGEM DE USUÁRIOS --&gt;
        &lt;table&gt;
            &lt;tr&gt;
                &lt;td&gt;ID&lt;/td&gt;
                &lt;td&gt;Nome&lt;/td&gt;
                &lt;td&gt;Login&lt;/td&gt;
                &lt;td&gt;Senha&lt;/td&gt;
                &lt;td&gt;Classe&lt;/td&gt;
                &lt;td&gt;Ações&lt;/td&gt;
            &lt;/tr&gt;
            &lt;?php
            
            //Crio a SQL de consulta
            $qry = &quot;SELECT u.id, u.nome, u.login, u.senha, c.nome as classe
                    FROM usuarios u
                    INNER JOIN classes c ON c.id = u.classe
                    ORDER BY u.nome ASC;&quot;;
            
            //Executo a consulta
            $exe_usuarios = mysql_query($qry);
            
            //agora faço um while de todos os resultados para preencher a tabela
            while($row = mysql_fetch_array($exe_usuarios)){
                ?&gt;
                &lt;tr&gt;
                    &lt;td&gt;&lt;?php echo $row[&quot;id&quot;]; ?&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;?php echo $row[&quot;nome&quot;]; ?&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;?php echo $row[&quot;login&quot;]; ?&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;?php echo $row[&quot;senha&quot;]; ?&gt;&lt;/td&gt;
                    &lt;td&gt;&lt;?php echo $row[&quot;classe&quot;]; ?&gt;&lt;/td&gt;
                    &lt;td&gt;
                        &lt;a href=&quot;editar_usuario.php?id=&lt;?php echo $row[&quot;id&quot;]; ?&gt;&quot;&gt;Editar&lt;/a&gt;
                        &lt;a href=&quot;deletar_usuario.php?id=&lt;?php echo $row[&quot;id&quot;]; ?&gt;&quot;&gt;Deletar&lt;/a&gt;
                    &lt;/td&gt;
                &lt;/tr&gt;
                &lt;?php
            }
            
            ?&gt;
        &lt;/table&gt;
        &lt;!-- FIM DA TABELA --&gt;
        
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<h2>Edição de usuário</h2>
<p>Observe que na tabela anterior, nas ações de editar e deletar, foi passado junto ao link a ID, pois iremos tratar lá qual usuários iremos alterar.</p>
<p>Para tanto, precisaremos de realizar uma conexão com o banco e rodar uma Query (Consulta) de atualização (UPDATE). Os dados irão vir de um formulário HTML.</p>
<p>Segue o código comentado:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
require_once(&quot;conexao.php&quot;);

//pego a ID da url
$id = (int) 0 + $_GET[&quot;id&quot;];

//verifico se a ID ainda é numérica, pois caso não seja pode ser
//uma tentativa de SQL Injection
if (!is_numeric($id)) {
    die(&quot;Tentativa de SQL Injection.&quot;);
}

//verifico se clicaram no botão atualizar, ou seja, foi feito um POST
if (getenv(&quot;REQUEST_METHOD&quot;) == &quot;POST&quot;) {
    //irei utilizar um método mais manual para evitar sql inject
    //Levaremos em consideração que alguns caracteres não devem ser
    //cadastrados no banco, vamos criar um array para isto
    $invalidos = (array) array(&quot;'&quot;, &quot;\&quot;&quot;, &quot;;&quot;, &quot;--&quot;);
    //verificamos se no POST não tem nenhum desses dados em nenhum dos campos
    foreach ($_POST as $valor) {
        foreach ($invalidos as $invalido) {
            if(strpos($valor, $invalido) !== false){
                die(&quot;Tentativa de SQL Inject. N&amp;atilde;o utilize nenhum desses caracteres: &lt;strong&gt;&quot; . implode(&quot; &quot;, $invalidos) . &quot;&lt;/strong&gt;&quot;);
            }
        }
    }
    
    //se chegou aqui, os dados foram validados, agora faço a consulta de atualizar no banco
    $qry_atualizacao = &quot;UPDATE usuarios SET nome = '{$_POST[&quot;nome&quot;]}', login = '{$_POST[&quot;login&quot;]}', senha = '{$_POST[&quot;senha&quot;]}', classe = {$_POST[&quot;classe&quot;]} WHERE id = {$id};&quot;;
    
    //apenas executo a query
    if(mysql_query($qry_atualizacao)){
        $status_atualizacao = &quot;Usuário atualizado com sucesso.&quot;;
    }else{
        $status_atualizacao = &quot;O cadastro não foi atualizado. Informe o administrador do sistema sobre este erro e como fez para chegar até ele.&quot;;
    }
    
}

//caso contrário, faço a consulta no banco normalmente e exibo os dados
//em um formulário HTML
//Crio a string da query, observe que não estou juntando a tabela de classes
//pois desta vez me interessa o número e não o nome
$qry_usuario = &quot;SELECT * FROM usuarios WHERE id = {$id};&quot;;
$exe_usuarios = mysql_query($qry_usuario);

//verifico se houve 1 e apenas um usuário, caso isso não seja verdade, gero um erro
if (mysql_num_rows($exe_usuarios) != 1) {
    die(&quot;Erro ao consultar. Itens retornado: &quot; . mysql_num_rows($exe_usuarios) . &quot;. Deve ser apenas 1.&quot;);
}

//se cheguei aqui, está tudo ok, agora faço a form e 
$usuario = mysql_fetch_array($exe_usuarios, MYSQL_ASSOC);

//agora eu busco todas as classes, vou fazer um combo box para que possa editar a classe também
$qry_classes = &quot;SELECT * FROM classes ORDER BY nome ASC;&quot;;
$exe_classes = mysql_query($qry_classes);
?&gt;

&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
        &lt;title&gt;Listagem de usuários&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        
        &lt;!-- VERIFICO SE EXISTE UMA VARIAVEL CHAMADA ATUALIZADO E EXIBO A MENSAGEM --&gt;
        &lt;?php if(isset($status_atualizacao)): echo $status_atualizacao; endif; ?&gt;
        
        &lt;!-- AQUI CRIAREMOS UMA TABELA E UM FORM COM OS DADOS DO USUÁRIO JÁ PREENCHIDOS --&gt;
        
        &lt;!-- é importante que o método seja o post --&gt;
        &lt;!-- o action é em para qual página passaremos os dados, será para ela mesmo --&gt;
        &lt;form name=&quot;frmEdicao&quot; method=&quot;post&quot; action=&quot;editar_usuario.php?id=&lt;?php echo $id; ?&gt;&quot;&gt;
            &lt;table&gt;
                &lt;tr&gt;
                    &lt;td&gt;Nome:&lt;/td&gt;
                    &lt;td&gt;&lt;input name=&quot;nome&quot; type=&quot;text&quot; value=&quot;&lt;?php echo $usuario[&quot;nome&quot;]; ?&gt;&quot; size=&quot;25&quot; /&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;Login:&lt;/td&gt;
                    &lt;td&gt;&lt;input name=&quot;login&quot; type=&quot;text&quot; value=&quot;&lt;?php echo $usuario[&quot;login&quot;]; ?&gt;&quot; size=&quot;25&quot; /&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;Senha:&lt;/td&gt;
                    &lt;td&gt;&lt;input name=&quot;senha&quot; type=&quot;text&quot; value=&quot;&lt;?php echo $usuario[&quot;senha&quot;]; ?&gt;&quot; size=&quot;25&quot; /&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;Classe:&lt;/td&gt;
                    &lt;td&gt;
                        &lt;!-- FAÇO UM WHILE DE TODAS AS CLASSES --&gt;
                        &lt;select name=&quot;classe&quot;&gt;
                            &lt;?php
                            while($classe = mysql_fetch_array($exe_classes)){
                                ?&gt;
                                    &lt;option &lt;?php if($usuario[&quot;classe&quot;] == $classe[&quot;id&quot;]): ?&gt;selected=&quot;selected&quot;&lt;?php endif; ?&gt; value=&quot;&lt;?php echo $classe[&quot;id&quot;]; ?&gt;&quot;&gt;&lt;?php echo $classe[&quot;nome&quot;]; ?&gt;&lt;/option&gt;
                                &lt;?php
                            }
                            ?&gt;
                        &lt;/select&gt;
                    &lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td colspan=&quot;2&quot;&gt;&lt;input type=&quot;submit&quot; value=&quot;Alterar dados&quot; /&gt;&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/table&gt;
        &lt;/form&gt;
              
        &lt;!-- FIM DA TABELA E DO FORM --&gt;
        
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<h2>Inserir novos usuários</h2>
<p>Bom, e lá vamos nós. Nesta parte de inserir usuários, vamos aproveitar a mesma estrutura da página de edição, com algumas pequenas alterações, como por exemplo, os dados não virão preenchidos.</p>
<p>Atenção apenas a parte de inserção, que antes era a de alteração.</p>
<p>Para tal, antes de começarmos a codificar a página de inserção, insira um link na index.php para a página de cadastro. Cole o código abaixo antes da TAG </body>, ou em qualquer outro lugar que quiser.</p>
<pre class="brush: php; title: ; notranslate">
&lt;a href=&quot;inserir_usuario.php&quot;&gt;Cadastro de Usuários&lt;/a&gt;
</pre>
<p>E o código da página de inserção de usuário fica da seguinte forma:</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
require_once(&quot;conexao.php&quot;);
//verifico se clicaram no botão atualizar, ou seja, foi feito um POST
if (getenv(&quot;REQUEST_METHOD&quot;) == &quot;POST&quot;) {
    //irei utilizar um método mais manual para evitar sql inject
    //Levaremos em consideração que alguns caracteres não devem ser
    //cadastrados no banco, vamos criar um array para isto
    $invalidos = (array) array(&quot;'&quot;, &quot;\&quot;&quot;, &quot;;&quot;, &quot;--&quot;);
    //verificamos se no POST não tem nenhum desses dados em nenhum dos campos
    foreach ($_POST as $valor) {
        foreach ($invalidos as $invalido) {
            if (strpos($valor, $invalido) !== false) {
                die(&quot;Tentativa de SQL Inject. N&amp;atilde;o utilize nenhum desses caracteres: &lt;strong&gt;&quot; . implode(&quot; &quot;, $invalidos) . &quot;&lt;/strong&gt;&quot;);
            }
        }
    }

    //valido os dados antes de inserir
    $valido = true;
    $mensagem_erro = &quot;&quot;;
    
    //valido nome
    if(strlen($_POST[&quot;nome&quot;]) &lt; 3){
        $valido = false;
        $mensagem_erro .= &quot;Nome muito curto. Mínimo de 3 caracteres.&lt;br/&gt;&quot;;
    }
    
    //valido login
    if(strlen($_POST[&quot;login&quot;]) &lt; 5){
        $valido = false;
        $mensagem_erro .= &quot;Login muito curto. Mínimo de 5 caracteres.&lt;br/&gt;&quot;;
    }
    
    //valido senha
    if(strlen($_POST[&quot;senha&quot;]) &lt; 6){
        $valido = false;
        $mensagem_erro .= &quot;Senha muito curta. Mínimo de 6 caracteres.&lt;br/&gt;&quot;;
    }
    
    //valido a classe
    if(!is_numeric($_POST[&quot;classe&quot;])){
        $valido = false;
        $mensagem_erro .= &quot;Campo classe informado não é um número.&lt;br/&gt;&quot;;
    }
    
    if ($valido) {
        //se chegou aqui, os dados foram validados, agora faço a consulta de inserir no banco
        $qry_insert = &quot; INSERT INTO usuarios (nome, login, senha, classe)
                    VALUES ('{$_POST[&quot;nome&quot;]}', '{$_POST[&quot;login&quot;]}', '{$_POST[&quot;senha&quot;]}', {$_POST[&quot;classe&quot;]});&quot;;

        //apenas executo a query
        if (mysql_query($qry_insert) === false) {
            //se der erro, exibo uma mensagem nada amigável na tela
            die(&quot;Ocorreu um erro ao inserir este usuário no banco de dados.&quot;);
        } else {
            //caso contrário, volto para a página de listagem de usuários
            header(&quot;location: index.php&quot;);
        }
    }
}

//busco todas as classes, vou fazer um combo box para que possa editar a classe também
$qry_classes = &quot;SELECT * FROM classes ORDER BY nome ASC;&quot;;
$exe_classes = mysql_query($qry_classes);
?&gt;

&lt;html&gt;
    &lt;head&gt;
        &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot; /&gt;
        &lt;title&gt;Cadastro de usuários&lt;/title&gt;
    &lt;/head&gt;
    &lt;body&gt;
        
        &lt;!-- SE EXISTIR ALGUMA MENSAGEM DE ERRO EXIBIMOS ELA AQUI --&gt;
        &lt;?php if(isset($mensagem_erro[1])): echo $mensagem_erro; endif; ?&gt;
        
        &lt;!-- AQUI CRIAREMOS UMA TABELA E UM FORM COM OS DADOS DO USUÁRIO JÁ PREENCHIDOS --&gt;

        &lt;!-- é importante que o método seja o post --&gt;
        &lt;!-- o action é em para qual página passaremos os dados, será para ela mesmo --&gt;
        &lt;form name=&quot;frmEdicao&quot; method=&quot;post&quot; action=&quot;inserir_usuario.php&quot;&gt;
            &lt;table&gt;
                &lt;tr&gt;
                    &lt;td&gt;Nome:&lt;/td&gt;
                    &lt;td&gt;&lt;input name=&quot;nome&quot; type=&quot;text&quot; value=&quot;&lt;?php if (isset($_POST)): echo $_POST[&quot;nome&quot;]; endif; ?&gt;&quot; size=&quot;25&quot; /&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;Login:&lt;/td&gt;
                    &lt;td&gt;&lt;input name=&quot;login&quot; type=&quot;text&quot; value=&quot;&lt;?php if (isset($_POST)): echo $_POST[&quot;login&quot;]; endif; ?&gt;&quot; size=&quot;25&quot; /&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;Senha:&lt;/td&gt;
                    &lt;td&gt;&lt;input name=&quot;senha&quot; type=&quot;text&quot; value=&quot;&lt;?php if (isset($_POST)): echo $_POST[&quot;senha&quot;]; endif; ?&gt;&quot; size=&quot;25&quot; /&gt;&lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td&gt;Classe:&lt;/td&gt;
                    &lt;td&gt;
                        &lt;!-- FAÇO UM WHILE DE TODAS AS CLASSES --&gt;
                        &lt;select name=&quot;classe&quot;&gt;
                            &lt;?php
                            while ($classe = mysql_fetch_array($exe_classes)) {
                                ?&gt;
                                &lt;option &lt;?php if (isset($_POST) &amp;&amp; $_POST[&quot;classe&quot;] == $classe[&quot;id&quot;]): ?&gt;selected=&quot;selected&quot;&lt;?php endif; ?&gt; value=&quot;&lt;?php echo $classe[&quot;id&quot;]; ?&gt;&quot;&gt;&lt;?php echo $classe[&quot;nome&quot;]; ?&gt;&lt;/option&gt;
                                &lt;?php
                            }
                            ?&gt;
                        &lt;/select&gt;
                    &lt;/td&gt;
                &lt;/tr&gt;
                &lt;tr&gt;
                    &lt;td colspan=&quot;2&quot;&gt;&lt;input type=&quot;submit&quot; value=&quot;Inserir usuário&quot; /&gt;&lt;/td&gt;
                &lt;/tr&gt;
            &lt;/table&gt;
        &lt;/form&gt;

        &lt;!-- FIM DA TABELA E DO FORM --&gt;

    &lt;/body&gt;
&lt;/html&gt;
</pre>
<h2>Deletar usuários</h2>
<p>A página de deletar usuários será a mais fácil de todas, pois não utilizarei interface e tal, a única opção de deletar será o link fornecido ao lado do editar.</p>
<p>Eu sei que alguém pode clicar por engano, mas não é do tutorial ensinar tratar esse tipo de coisa e sim como manusear MySQL utilizando PHP.</p>
<p>Segue o código limpo e clean!</p>
<pre class="brush: php; title: ; notranslate">
//pego a ID e verifico se é numérica, caso não seja, pode ser tentativa
//de SQL Inject
$id = (int) 0 + $_GET[&quot;id&quot;];

if(!is_numeric($id)){
    die(&quot;Tentativa de SQL Injection. ID deve ser numérica.&quot;);
}

//se cheguei aqui, tudo OK, incluo o arquivo de conexão, deleto o registro e
//volto a página inicial, de listagem

require_once(&quot;conexao.php&quot;);

if(mysql_query(&quot;DELETE FROM usuarios WHERE id = {$id};&quot;)){
    header(&quot;location: index.php?del=ok&quot;);
}else{
    header(&quot;location: index.php?del=fail&quot;);    
}
</pre>
<h2>O que falta fazer?</h2>
<p>Bom amigos, chegamos ao final de mais um artigo, acredito que neste ponto vocês possam ser capazes de fazer os módulos restantes e também já criar seus próprios módulos.</p>
<p>O que ficou faltando?<br />
<strong>Listagem de todas as classes</strong>, <strong>Edição de classes</strong>, <strong>Inserir novas classes</strong>, <strong>Deletar classes</strong>.</p>
<p>Para aquele que tem preguiça de de ctrl + c e ctrl + v, segue um link para meu projeto completo <a href="http://www.williamokano.com/exemplos/post_151/php_mysql.rar">Projeto completo + Dump do banco de dados</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.williamokano.com/2011/08/09/manipulando-o-banco-de-dados-mysql-utilizando-php/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
