Olá pessoal. Nesse post vou mostrar para vocês como criar uma funcionalidade para um formulário de cadastro onde o usuário informa o CEP do seu endereço e os campos rua, bairro, cidade e estado são preenchidos automaticamente.
Essa técnica é bastante utilizada hoje em dia em diversos sites da web e traz ótimos resultados uma vez que você garante a integridade e padronização das informações que estão sendo salvas, além de facilitar bastante a vida do usuário.Para auxiliar esse processo, o site http://cep.republicavirtual.com.br disponibiliza uma base de dados(Clique aqui para baixar) com todos os CEPs do Brasil para você fazer odownload e acoplar ao seu projeto e também um webservice caso deseje fazer uma requisição. O webservice está configurado para responder em XML, QueryString eJavaScript.
No nosso exemplo, utilizaremos a segunda opção. Criaremos nosso formulário e faremos uma requisição AJAX com o webservice da República Virtual para solicitar os dados no formato XML. Para facilitar a utilização de AJAX, usarei o JQuery. (Leia um artigo onde explico como trabalhar com AJAX + JQuery).
Antes de começarmos a implementação, organize os seus arquivos da seguinte maneira:
- index.php : página principal (onde vai o formulário)
- jquery.js: plugin javascript para auxiliar
- cep.js : arquivo javascript onde será configurado a requisição AJAX
- consultar_cep.php :Arquivo que fará a requisição com o WebService
Primeiramente, vamos implementar o arquivo index.php com o formulário de cadastro:
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 | <!DOCTYPE html>
<html>
<head>
<title>Consulta de CEP - por rafaelWendel.com</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type='text/javascript' src='http://files.rafaelwendel.com/jquery.js'></script>
<script type='text/javascript' src='cep.js'></script>
</head>
<body>
<h1>Preenchimento automático com consulta de CEP - por <a href="http://www.rafaelwendel.com" title="Visite o blog www.rafaelwendel.com">rafaelWendel.com</a></h1>
<form id="form1" class="form1" method="post">
<label>CEP (Somente números):</label><br />
<input type="text" name="cep" id="cep" maxlength="8" />
<br /><br />
<label>Rua:</label><br />
<input type="text" name="rua" id="rua" size="45" />
<br /><br />
<label>Número:</label><br />
<input type="text" name="numero" id="numero" size="5" />
<br /><br />
<label>Bairro:</label><br />
<input type="text" name="bairro" id="bairro" size="25" />
<br /><br />
<label>Cidade:</label><br />
<input type="text" name="cidade" id="cidade" size="25" />
<br /><br />
<label>Estado:</label><br />
<input type="text" name="estado" id="estado" size="2" />
<br /><br />
<input type="submit" value="Salvar Dados" />
</form>
</body>
</html> |
Note que é importante darmos nome e ids para todos os campos de texto do formulário pois isso facilita a manipulação de seus valores por meio do js/jquery.
Agora vamos configurar a requisição AJAX dentro do arquivo cep.js :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | $(document).ready( function() {
/* Executa a requisição quando o campo CEP perder o foco */
$('#cep').blur(function(){
/* Configura a requisição AJAX */
$.ajax({
url : 'consultar_cep.php', /* URL que será chamada */
type : 'POST', /* Tipo da requisição */
data: 'cep=' + $('#cep').val(), /* dado que será enviado via POST */
dataType: 'json', /* Tipo de transmissão */
success: function(data){
if(data.sucesso == 1){
$('#rua').val(data.rua);
$('#bairro').val(data.bairro);
$('#cidade').val(data.cidade);
$('#estado').val(data.estado);
$('#numero').focus();
}
}
});
return false;
})
}); |
A função está configurada para ser executada quando o foco sair do campo CEP. A requisição é feita via método POST com o arquivo consultar_cep.php e o tipo de transmissão que vamos utilizar é o JSON. Em caso de sucesso, os dados do endereço serão inseridos em seus campos correspondentes no formulário e o foco irá para o campoNúmero.
Bom, agora falta apenas o arquivo consultar_cep.php :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php
$cep = $_POST['cep'];
$reg = simplexml_load_file("http://cep.republicavirtual.com.br/web_cep.php?formato=xml&cep=" . $cep);
$dados['sucesso'] = (string) $reg->resultado;
$dados['rua'] = (string) $reg->tipo_logradouro . ' ' . $reg->logradouro;
$dados['bairro'] = (string) $reg->bairro;
$dados['cidade'] = (string) $reg->cidade;
$dados['estado'] = (string) $reg->uf;
echo json_encode($dados);
?> |
Para buscar as informações utilizo a função simplexml_load_file (Leia um artigo que escrevi sobre a leitura de arquivos XML).
Note que para executarmos uma requisição no WebService, devemos especificar naURL o formato que desejamos (no nosso caso, XML) e o cep a ser consultado (Linha 5).
Feito isso basta jogar as informações dentro de um array (Importante a conversão parastring porque a função simplexml_load_file retorna Objetos XML) e depois codificar para o formato JSON.
Pronto! Agora é só testar.


