<?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>Cauan Cabral - Geek &#187; algoritmo</title>
	<atom:link href="http://cauancabral.net/tag/algoritmo/feed/" rel="self" type="application/rss+xml" />
	<link>http://cauancabral.net</link>
	<description>Geek, nerd e apaixonado por tecnologia</description>
	<lastBuildDate>Fri, 25 Jun 2010 23:31:18 +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>Valida&#231;&#227;o de dados em PHP5 &#8211; final</title>
		<link>http://cauancabral.net/2008/02/10/validao-de-dados-em-php5-final/</link>
		<comments>http://cauancabral.net/2008/02/10/validao-de-dados-em-php5-final/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 02:26:21 +0000</pubDate>
		<dc:creator>Cauan Cabral</dc:creator>
				<category><![CDATA[Desenvolvimento Web]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[algoritmo]]></category>
		<category><![CDATA[php5]]></category>
		<category><![CDATA[segurança]]></category>
		<category><![CDATA[validação]]></category>

		<guid isPermaLink="false">http://geek.cauancabral.net/2008/02/10/validao-de-dados-em-php5-final/</guid>
		<description><![CDATA[Olá a todos, Continuando e finalizando a sequência de artigos sobre validação ( veja também a parte 1, 2 e 3 ), iremos abordar a união de procedimentos na validação. Como vimos anteriormente, todo cuidado é pouco, então quanto maior &#8230; <a href="http://cauancabral.net/2008/02/10/validao-de-dados-em-php5-final/">Continue lendo <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Olá a todos,</p>
<p>Continuando e finalizando a sequência de artigos sobre validação ( veja também a parte <a title="Parte 1" href="http://cauancabral.net/blog/2008/01/02/validacao-de-dados-em-php5-parte-1/">1</a>, <a title="Parte 2" href="http://cauancabral.net/blog/2008/01/03/validacao-de-dados-em-php5-parte-2/">2</a> e <a title="Parte 3" href="http://cauancabral.net/blog/2008/01/23/validao-de-dados-em-php5-parte-3/">3</a> ), iremos abordar a união de procedimentos na validação.</p>
<p>Como vimos anteriormente, todo cuidado é pouco, então quanto maior o número de testes que submetermos um dado, maior a chance de ele chegar a nós da forma que esperamos ( sem causar danos a integridade do sistema ).</p>
<p>Vimos que a utilização de ER é essencial, toda vez que soubermos o padrão do valor esperado. Ou seja, se sabemos que um número de telefone é da forma &#8220;3333-4444&#8243;, e que isso nunca irá mudar, teremos as ER&#8217;s como nossa arma mais forte.</p>
<p>Mas existem casos em que não temos idéia do que o usuáiro pode inserir em um campo. Nestes casos, uma ER não tem grande utilidade, e temos de recorrer a outros recursos, como algumas funções do próprio PHP ou MySQL/Postgree para &#8220;limpar&#8221; as informações, de modo que ela não prejudique o fucionamento do sistema. Algumas destas funções são:</p>
<ul>
<li><a title="Referência da função" href="http://br.php.net/manual/pt_BR/function.strip-tags.php" onclick="pageTracker._trackPageview('/outgoing/br.php.net/manual/pt_BR/function.strip-tags.php?referer=');">strip_tags()</a> , que tenta limpar ( retirar tags HTML e PHP ) e retornar uma string passada como parâmetro.</li>
<li><a title="Referência da função" href="http://br.php.net/manual/pt_BR/function.htmlentities.php" onclick="pageTracker._trackPageview('/outgoing/br.php.net/manual/pt_BR/function.htmlentities.php?referer=');">htmlentities()</a> , substitui TODOS os caracteres que possuírem um correspondente html.</li>
</ul>
<p>Unindo a utilização destas funções, ER ( quando convir, não se esqueça que para se utilizar uma ER temos de ter um padrão esperado ) e cuidado na hora de pegar valores dos arrays superglobais ( $_POST, $_GET, &#8230; ), teremos um sistema com uma boa segurança a injeção de códigos por terceiros.</p>
<p>Vamos então fazer uma função ( não farei uma classe pois a idéia é ser bem especifico, podendo a função ser utilizada como um método sem problemas ).</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
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">function</span> valida<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$valor</span><span style="color: #339933;">,</span> <span style="color: #000088;">$tipo</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #000088;">$erCPF</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/[0-9]{3}\.[0-9]{3}\.[0-9]{3}\-[0-9]{2}/'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$erCEP</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/[0-9]{5}\-[0-9]{3}/'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$erFONE</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/(0((([0-9]{2}){2})|([0-9]{2})))?[0-9]{3,5}\-[0-9]{4}/'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$erEMAIL</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/[[:alnum:]]\@[[:alnum:]]+(\.[[:alnum:]])+/'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$erDATA</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[012])\/[12][0-9]{3}/'</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$erTEXTO</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/([a-z][A-Z])*/'</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//aceita somente letras</span>
<span style="color: #000088;">$erALPHANUM</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/[[:alnum:]]*/'</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//aceita numeros e letras</span>
<span style="color: #000088;">$erNUM</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'/[0-9]*/'</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//aceita somente numeros</span>
<span style="color: #000088;">$erALL</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'*'</span><span style="color: #339933;">;</span><span style="color: #666666; font-style: italic;">//aceita qualquer coisa</span>
<span style="color: #000088;">$tipo</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strtoupper</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$tipo</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #000088;">$padrao</span> <span style="color: #339933;">=</span> <span style="color: #0000ff;">'er'</span><span style="color: #339933;">.</span><span style="color: #000088;">$tipo</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//faço concatenação do prefixo 'er' com o tipo, para formar o nome da variavel com o padrao correto.</span>
<span style="color: #000088;">$valor</span> <span style="color: #339933;">=</span> <span style="color: #990000;">strip_tags</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">htmlentities</span><span style="color: #009900;">&#40;</span><span style="color: #990000;">trim</span><span style="color: #009900;">&#40;</span><span style="color: #000088;">$valor</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'&amp;lt;a&amp;gt;&amp;lt;b&amp;gt;&amp;lt;i&amp;gt;&amp;lt;p&amp;gt;'</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span> <span style="color: #666666; font-style: italic;">//limpo a variavel com valor, retirando possíveis funções do PHP ou tags HTML que possam ser prejudiciais ao sistema, mas permitindo algumas que podem ser uteis em determinados casos</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> <span style="color: #990000;">preg_match</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$$padrao</span><span style="color: #339933;">,</span> <span style="color: #000088;">$valor</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'O dado passou pela validação de padrão.&amp;lt;br/&amp;gt;'</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//podemos validar melhor alguns dados</span>
<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span> <span style="color: #000088;">$tipo</span> <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">case</span> <span style="color: #0000ff;">'CPF'</span><span style="color: #339933;">:</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> validaCPF<span style="color: #009900;">&#40;</span> <span style="color: #000088;">$valor</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'O CPF é válido.'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'O CPF não é valido'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">//você pode por um 'case' para cada tipo de dado que quiser validar com alguma formula especifica</span>
<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'O dado foi validado'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">break</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">true</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'O dado não passou pela validação de padrão.&amp;lt;br/&amp;gt;'</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">return</span> <span style="color: #009900; font-weight: bold;">false</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Bom, este é um exemplo de função que poderíamos utilizar para validação de dados, podendo ser inserida em uma classe com um método dela.</p>
<p>Mas como utilizamos ela? Simples, veja( supondo que temos vindo de um formulário um campo email, via POST:</p>

<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;"><span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span> valida<span style="color: #009900;">&#40;</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: #0000ff;">'email'</span> <span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#41;</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Email válido'</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">else</span>
<span style="color: #b1b100;">echo</span> <span style="color: #0000ff;">'Email inválido'</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p>Fica fácil não?</p>
<p>Bom, nesta função, é chamada outra função ( validaCPF ), que não é de minha autoria, e que dei os devidos <a title="autor: Jefferson Estanislau da Silva" href="http://www.vivaolinux.com.br/scripts/verScript.php?codigo=401" onclick="pageTracker._trackPageview('/outgoing/www.vivaolinux.com.br/scripts/verScript.php?codigo=401&amp;referer=');">créditos</a> na parte 3 desta série. Esta função implementa o algoritmo de validação do CPF, com seu digito verificador e tudo mais. É um algoritmo muito difundido, e bem documentado na internet, faça uma busca se estiver interessado no assunto. É  interessante.</p>
<p><a title="Veja ele em uso" href="http://cauancabral.net/blog/wp-content/uploads/2008/02/validacao.php">Função para validação de dado</a> &#8211; <a title="( veja o fonte )" href="http://cauancabral.net/blog/wp-content/uploads/2008/02/validacao.txt">( veja o fonte )</a><a title="Baixe o arquivo do exemplo" href="http://cauancabral.net/blog/wp-content/uploads/2008/02/validacao.php"> </a></p>
<p>É isso, espero ter ajudado, qualquer coisa, mail-me.</p>
<p>Até a próxima.</p>
<div id="crp_related"><h3>Outros posts que podem interessar:</h3><ul><li><a href="http://cauancabral.net/2008/01/03/validacao-de-dados-em-php5-parte-2/" rel="bookmark" class="crp_title">Validação de dados em PHP5 &#8211; Parte 2</a></li><li><a href="http://cauancabral.net/2008/01/23/validao-de-dados-em-php5-parte-3/" rel="bookmark" class="crp_title">Valida&#231;&#227;o de dados em PHP5 &#8211; Parte 3</a></li><li><a href="http://cauancabral.net/2008/01/02/validacao-de-dados-em-php5-parte-1/" rel="bookmark" class="crp_title">Validação de dados em PHP5 &#8211; Parte 1</a></li><li><a href="http://cauancabral.net/2008/12/12/3f-ferias-da-faculdade-finalmente/" rel="bookmark" class="crp_title">3F: Férias da Faculdade, Finalmente.</a></li><li><a href="http://cauancabral.net/2009/02/23/cakephp-duvidas-comuns-1/" rel="bookmark" class="crp_title">CakePHP &#8211; dúvidas comuns #1</a></li></ul></div>]]></content:encoded>
			<wfw:commentRss>http://cauancabral.net/2008/02/10/validao-de-dados-em-php5-final/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
