quarta-feira, 13 de junho de 2018

Melhor sistema para buscar endereço pelo CEP em PHP


Trazemos aqui um recurso avançado, e ao mesmo tempo muito simples de se fazer, para cadastrar um endereço num sistema em PHP pegando os dados (rua, complemento, bairro, cidade, estado) pela digitação apenas do CEP.

Vamos dizer que você tem um formulário numa página (index.php, por exemplo) com o campo para o usuário digitar o CEP:

<form method="post" action="funCEP.php">
   <input type="text" maxlength="8" name="cep" id="cep">
   <button type="submit">Consultar</button>
</form>

Então o usuário digita o CEP e clica no botão para enviar o formulário ao arquivo php que fará a consulta no sistema ViaCep, que por sua vez retorna os valores caso o valor de CEP fornecido for válido.

A mágica está então no arquivo funCEP.php: primeiro, ele pega a variável do CEP enviada pelo formulário e executa uma função para extrair somente os números (pode ser que o usuário tenha inserido uma letra ou um traço separador). Daí, ele pega os números extraídos e os submete ao banco de dados do ViaCep retornando os campos (logradouro, bairro, cidade, etc.).

O código completo do arquivo funCEP.php é este:

<?php
$str = $_POST['cep'];
// extrair só números da variável
function soNumero($str) {
    return preg_replace("/[^0-9]/", "", $str);
}
$ecCEP = soNumero($str);
$num = strlen($ecCEP);
// em caso de erro
if ($num <> 8) {
  echo "CEP inválido";
// se tudo certo com o CEP
} else {
  // pegar endereço pelo CEP
  function get_endereco($cep){
    $url = "http://viacep.com.br/ws/$cep/xml/";
    $xml = simplexml_load_file($url);
    return $xml;
  }
  $endereco = (get_endereco("$ecCEP"));
  // guardando variáveis
  $ecRua = $endereco->logradouro;
  $ecEndComp = $endereco->complemento;
  $ecBairro = $endereco->bairro;
  $ecCidade = $endereco->localidade;
  $ecUF = $endereco->uf;
}

Daí é só pegar as variáveis com cada detalhe do endereço e usá-las para salvar em seu banco de dados ou apenas exibi-las no próprio arquivo funCEP.php, por exemplo:

echo $ecCidade;

Nenhum comentário:

Postar um comentário