Sie sind auf Seite 1von 2

62 :: TIdigital / Artigo Tcnico / PHP

Gustavo Guanabara
especialista em Cincia da Computao. Professor de universidades e cursos profissionalizantes do Rio de Janeiro, atua principalmente lecionando em disciplinas nas reas de engenharia web e interao humano-computador. Tambm diretor do site Guanabara.info e apresentador do Guanacast, um podcast sobre tecnologia.

Buscador de CEP em PHP


Voc j deve ter visto aqueles sites de comrcio eletrnico onde voc infor ma o seu CEP e automaticamente o sistema preenche o nome da sua rua, bairro e cidade no formulrio de cadastro. O site dos Correios disponibiliza o servio de consulta a CEPs, mas criar uma pgina com um link para o usurio desviar a sua navegao para os Correios, consultar o seu CEP e voltar ao seu site para preencher os dados soa, no mnimo, amador. H uma grande probabilidade do seu visitante desistir de se cadastrar e procurar um outro ser vio. E no se engane, at os usurios inexperientes adotam esse tipo de postura, mesmo que inconscientemente. A dica que eu trouxe nessa terceira edio da Tidigital vai resolver este problema de forma simples e objetiva. <html> <body> <form method="post" action="buscacep.php"> CEP: <input type="text" name="cep" id="cep" maxlength="5" size="5"> <input type="text" name="cmp" id="cmp" maxlength="3" size="3"> <input type="submit" value="Buscar"> </form> </body> </html> No arquivo formcep.html, apresentado anteriormente, criamos um formulrio simples, onde digitaremos o CEP em duas caixas separadas: uma para os cinco primeiros dgitos e outra para os trs ltimos. Se voc quiser, pode ainda criar uma caixa nica com oito dgitos e pedir que o seu visitante digite apenas os dgitos do CEP. O arquivo formcep.html far uma chamada ao arquivo buscacep.php, que cuidar do trabalho pesado. 01: <html> 02: <body> 03: <?php 04: function valida_cep($n, $c) { 05: $cepcompl = $n . $c; 06: if (strlen($cepcompl) != 8) return false; 07: for($i=0;$i<8;$i++) { vai ter que ficar de olho nas novas verses do banco para manter-se sempre em dia com os CEPs brasileiros. Pensando nesse problema, o pessoal da Repblica Virtual criou um WebService espetacular, para o qual voc passa os parmetros e ele retorna os dados mais atuais. Esse ser vio ainda permite que o retorno dos dados seja feito em formato XML (padro), Query String ou via JavaScript. Veja um exemplo desse servio acessando o endereo: http:// republicavirtual.com.br/web_cep.php?cep=22070011. Para o uso com o PHP, recorreremos ao mtodo Query String que vai facilitar nossa vida, j que poderemos colocar os valores em um vetor. Faamos ento um exemplo simples que utilize esse recurso incorporado aos nossos scripts.

D pra usar a base de dados dos Correios?


A base de dados com os CEPs do Brasil inteiro est disponvel para consulta de qualquer pessoa com acesso internet, basta visitar http://www.correios.com.br/ servicos/cep, preencher os dados e ver o resultado. Infelizmente, a empresa impediu que scripts para web utilizem esse banco de dados para criar uma boa interatividade com seus visitantes. Simplesmente, toda busca realizada retorna um resultado criptografado, o que impede que o PHP, ou qualquer outra linguagem, faa uso dessas informaes.

E agora, o que eu fao?


Antes que voc entre em desespero, tenho uma boa notcia. Apesar de todo esse bloqueio dos Correios, muitos programadores criaram maneiras de manter esse contedo disponvel como domnio pblico, inclusive para ns programadores. A soluo que eu mais gosto a do site Repblica Virtual (www.republicavirtual.com.br/cep). L voc vai encontrar uma base de dados atualizadssima disponvel para baixar e utilizar gratuitamente nos seus projetos. O nico inconveniente que essa atualizao acontece constantemente, e voc

Tidigital / Artigo Tcnico / PHP :: 63

PHP
08: $digito = ord($cepcompl[$i]); 09: if (($digito < 48)||($digito > 57)) return false; 10: } 11: return $cepcompl; 12: } 13: function busca_cep($c){ 14: $site = 'http://republicavirtual.com.br/'; 15: $site .= 'web_cep.php?cep='; 16: $site .= urlencode($c).'&formato=query_string'; 17: $str = @file_get_contents($site); 18: if (!$str){ 19: $str = "&resultado=0"; 20: } 21: parse_str($str, $ret); 22: return $ret; 23: } 24: $cepn = (isset($_POST['cep'])?$_POST['cep']:''); 25: $cepc = (isset($_POST['cmp'])?$_POST['cmp']:''); 26: $cep = valida_cep($cepn, $cepc); 27: if ($cep) { 28: $ender = busca_cep($cep); 29: if ($ender['resultado'] > 0) { 30: echo $ender['tipo_logradouro'] . " <br> "; 31: echo $ender['logradouro'] . "<br>"; 32: echo $ender['bairro'] . "<br>"; 33: echo $ender['cidade'] . "<br>"; 34: echo $ender['uf'] . "<br>"; 35: } 36: else echo $ender['resultado_txt']; 37: } 38: ?> 39: </body> 40: </html> Analisando o cdigo acima, vemos as funes valida_cep (linhas 4 a 12) e busca_cep (linhas 13 a 23). O cdigo principal do script est entre as linhas 24 e 37. numricos, a funo retornar false.

Cdigo da funo busca_cep()


A funo receber apenas um parmetro $c, que o CEP completo, com 8 dgitos; As linhas 14 a 17 faro uma chamada ao WebService da Repblica Virtual, passando dois parmetros: o CEP e o formato de resposta, que nesse caso Query String; O resultado dessa busca ser uma string com todos os parmetros em uma nica linha, guardada na varivel $str. Caso essa busca resulte em algum erro ou o CEP no exista, colocaremos resultado=0 na varivel $str das linhas 18 a 20; A linha 21 faz um parse_str() na varivel gerada. Isso causar uma alocao dos parmetros em um vetor, o que facilitar no preenchimento do resultado. Cdigo do script principal As linhas 24 e 25 recebero os valores que foram digitados no formulrio em formcep.html; A linha 26 chama a funo valida_cep() para verificar se o CEP vlido; Se tudo estiver correto, a linha 28 chama a funo busca_cep() que preencher o vetor $ender com os parmetros de retorno do WebService; O nosso script sempre vai verificar o item $ender[resultado]. Se ele for 0, a busca resultou em erro. Se for 1, voc j tem o vetor preenchido com todos os parmetros. Veja uma maneira simples de como tratar esses resultados analisando as linhas 29 a 37. Agora com voc! Use esse script como base para preencher automaticamente seus campos e torne os seus formulrios de cadastro mais profissionais. Voc pode ver o resultado no endereo http://www.arteccom.com.br/cep/formcep.html. Nos vemos no prximo ms, com mais uma dica que vai aumentar a sua produtividade como programador PHP!

Cdigo da funo valida_cep()


A funo receber dois parmetros: o nmero $n e o complemento $c; A linha 5 cria um nmero nico com 8 dgitos e a linha 6 verifica se o CEP possui realmente esses 8 dgitos; O lao da linha 7 a 10 verificar se cada um dos dgitos um nmero de 0 a 9. Isso feito verificando o valor ord() de cada dgito; Caso o cdigo no contenha exatamente 8 dgitos

Das könnte Ihnen auch gefallen