Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ewerton Madeira

Preenchimento de CEP não funciona na hospedagem

Recommended Posts

Boa tarde pessoal!

 

Eu estou com o seguinte problema:

 

Eu coloquei na página de cadastro do meu sistema um preenchimento automático de CEP com JQuery. Ele funciona perfeitamente no "Localhost" e no servidor grátis que eu hospedei para fazer testes(hostinger), Mas simplesmente não funciona na hospedagem que eu contratei, que foi do UOL HOST. Eu não faço a mínima ideia do porque disso ter acontecido. Eu pesquisei bastante e não achei ninguém que tenha passado pelo mesmo problema. A minha esperança agora é alguém aqui do fórum poder me ajudar.

 

Seguem abaixo os códigos.

 

cadastro.php

<span>CEP: </span><input type="text" class="cep" id="cep" onblur="pesquisacep(this.value);" required name="cep" /> <a href="http://www.buscacep.correios.com.br/" target="_blank">Não sei o meu CEP</a><br />
<span>Endereço: </span><input type="text" class="endereco" id="rua" required  name="endereco" /> <br />
<span>Nº: </span><input type="text" class="num" required id="num" name="num" /> <br />
<span>Complemento: </span><input type="text" class="compl" name="compl" /> <br />
<span>Estado: </span><input type="text" required id="estado" name="estado" class="est" id="uf" /><br />
<span>Cidade: </span><input type="text" required name="cidade" id="cidade" class="cid" /><br />
<span>Bairro: </span><input type="text" class="bairro" id="bairro" required name="bairro" /> <br />

cep.js

$(document).ready( function() {
   /* Executa a requisição quando o campo CEP perder o foco */
   $('#cep').blur(function(){
           /* Configura a requisição AJAX */
           $.ajax({
                url : 'consultarCep.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){
                        $('.endereco').val(data.rua);
                        $('.bairro').val(data.bairro);
                        $('.cid').val(data.cidade);
                        $('.est').val(data.estado);
 
                        $('.num').focus();
                    }
                }
           });   
   return false;    
   })
});

consutarCep.php

<?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);
 
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Primeiro: aperte f12 no chrome e veja em network como os dados estão "chegando".

 

 

Segundo: ainda no chrome, verifique o "console" pra ver se não há erros

Terceiro: cuidado com caminhos relativos em urls.

 

 

Quarto: Não seria melhor usar o do correios?

 

 

Ultimo: como você está respondendo em json, é bom que os erros estejam desativados no php para não receber o Fatal Error do php ao invés do json.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Wallace, como assim usar o do correios? Existe algum script dos correios para preenchimento automático de CEP?

 

 

Pra ilustrar melhor o que acontece eu vou postar as imagens dos formulários.

 

 

 

 

Imagem 1 - Formulário no servidor "LOCALHOST". Quando digito o CEP Preenche automaticamente os outros campos do endereço.

aldt.jpg

 

Imagem 2 - Formulário no servidor do UOL HOST. Após preencher o CEP ele não preenche automaticamente o restante dos campos refente ao endereço,

5tak.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela dica Renato, mas pra dessa forma não é viável pra mim. O script que eu uso é bem simples e preenche os campos automaticamente sem precisar atualizar a página.

 

A grande questão é. Porque eu consigo utilizar esse preenchimento de CEP no Localhost e hospedado no hostinger mas no Uol Host ele não funciona?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente allow_url_fopen está desativado no UOL, se for isto basta usar cURL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

ESerra, eu não sou muito familiarizado com cURL, você teria um exemplo de como eu possa fazer isso?

Claro, dá uma lida ai.

 

Os correios fornecem API para isto? Acho que não né... se não fornecem é exatamente para não ser usado como está sendo proposto, de qualquer sorte, no phpclasses tem alguns implementações prontas para buscar o endereço direto dos correios.

Compartilhar este post


Link para o post
Compartilhar em outros sites

"hahaha" ESerra. Eu procurei artigos sobre cURL na internet sim, só não achei uma forma de utiliza-lá para o meu fim (preenchimento automático de cep).

 

Eu tentei adaptar o script mas não deu certo.

 

<?php
	$ch = curl_init();	
	$cep = $_POST['cep'];	
	curl_setopt( $ch, CURLOPT_URL, "http://cep.republicavirtual.com.br/web_cep.php?formato=xml&cep=".$cep );	
	$reg = curl_exec( $ch );	 
	 
	$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);
	
	curl_close( $ch );
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Citei o Correios porque acho mais fácil obter os dados.

É direto, nem precisa dar json_encode.

 

// suponha que a url chegou assim via $.ajax  = http://seusite.com.br/?cep=32.400-000$cep = $_GET['cep'];$cep = preg_replace('/[^0-9]+/', null, $cep); // remove os pontinhos e os hífens$json = file_get_contents("http://cep.correiocontrol.com.br/$cep.json");echo $json;


Nesse caso, teria que estar com o allow_url_fopen ativado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala galera. Sei que esse post está meio atrasado mas tive o mesmo problema com a mesma hospedagem. Resolvi fazendo o seguinte. Vá em Hospedagem de Sites, Configurações Avançadas e Aplicações. Habilite a função PHP.ini para poder editar. Voltando na pasta onde encontra o site, entre nele (php.ini) e ache a linha allow_url_fopen. Coloque On. Logo depois, volte a página de Configurações Avançadas, reinicie o Pool e o cache. Pronto. Problema resolvido !!! Espero que ajude!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fala galera. Sei que esse post está meio atrasado mas tive o mesmo problema com a mesma hospedagem. Resolvi fazendo o seguinte. Vá em Hospedagem de Sites, Configurações Avançadas e Aplicações. Habilite a função PHP.ini para poder editar. Voltando na pasta onde encontra o site, entre nele (php.ini) e ache a linha allow_url_fopen. Coloque On. Logo depois, volte a página de Configurações Avançadas, reinicie o Pool e o cache. Pronto. Problema resolvido !!! Espero que ajude!

 

titocrf nem estou mais usando a hospedagem do Uol host cara, mas muito obrigado. Tenho certeza que tem mais gente com a mesma dúvida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ai pessoal sou novato em programação, mas graças a minha insistência em vencer e passar noites testando códigos e tentando entender o seu funcionamento o que é mais importante para dar início ao campo da programação, estudando e tentando implementar essa função dos correios em um dos meus projetos, consegui a solução para o script do Cep dos correios acima do Ewerton Madeira.

 

Na verdade a partir do PHP 5.4 pelos menos na minha hospedagem que seria Uol Host a função allow_url_fopen esta desabilitada permanentemente do servidor apache do Uol Host, devido a brechas de segurança como (como cod injection), conforme suas restrições, e mesmo que você habilite allow_url_fopen on no arquivo .htaccess , não surgirá efeito devido ao bloqueio pelo Uol, então consegui a solução , segue o código:

 

 

O arquivo js que chamará a função ConsularCep:

$(document).ready(function() {
    /* Executa a requisição quando o campo CEP perder o foco */
    $('#cep').blur(function(){
    /* Configura a requisição AJAX */
    $.ajax({
    url : 'consultarCep.php', /* URL que será chamada */
    type : 'GET', /* 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){
    $('.endereco').val(data.rua);
    $('.bairro').val(data.bairro);
    $('.cid').val(data.cidade);
    $('.est').val(data.estado);
    $('.num').focus();
    }
    }
    });
    return false;
    })
    });
	

O index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="jquery-1.3.2.js"></script>
<script type="text/javascript" src="cep.js" charset="iso-8859-1"></script>
<title>BUSCAR CEP</title>
</head>
<body>
<!----------Creditos | Adaptado por Jeovane Carvalho
http://www.jcimoveisbrasil.com 
street-games@hotmail.com ------>

<form action="" method="">
<span>CEP: </span><input type="text" class="cep" id="cep" onblur="pesquisacep(this.value);" name="cep" />  <a href="http://www.buscacep.correios.com.br/" target="_blank">Não sei o meu CEP</a><br />
<span>Endereço: </span><input type="text" class="endereco" size="30" id="rua" required name="endereco" /> <br />
<span>Nº: </span><input type="text" class="num" size="30"  required id="num" name="num" /> <br />
<span>Complemento: </span><input type="text" size="30"  class="compl" name="compl" /> <br />
<span>Bairro: </span><input type="text" size="30"  class="bairro" id="bairro" required name="bairro" /> <br />
<span>Cidade: </span><input type="text" size="30"  required name="cidade" id="cidade" class="cid" /><br />
<span>Estado: </span><input type="text" size="30"  required id="estado" name="estado" class="est" /><br />
</form>
</body>
</html>

e finalmente a função que traz as consultas :

<?php

//Creditos | Adaptado por Jeovane Carvalho//
//http://www.jcimoveisbrasil.com //
//street-games@hotmail.com //

//GET busca o que você digitou no campo index e manda para a função abaixo//
$cep = $_GET['cep'];

//// guarda uma copia do xml no seu servidor
$ch = curl_init("http://cep.republicavirtual.com.br/web_cep.php?formato=xml&cep=".$cep."");
$fp = fopen("feedcache.xml", "w");

curl_setopt($ch, CURLOPT_FILE, $fp);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);
fclose($fp);

// carrega o arquivo, porém agora local
$xml = simplexml_load_file("feedcache.xml");
$subs = $xml->feed->entry['circulation'];
//---
$dados['sucesso'] =(string) $xml ->resultado;
$dados['rua'] =    (string) $xml ->tipo_logradouro . ' ' . $xml ->logradouro;
$dados['bairro'] = (string) $xml->bairro;
$dados['cidade'] = (string) $xml ->cidade;
$dados['estado'] = (string) $xml ->uf;
echo json_encode($dados);

?>

Sei que muitas pessoas ainda têm dificuldades em usar a função dos correios, mas aqui segue o script pronto para uso.

 

Para ver funcionando deixei um link do site para teste:

 

http://www.jcimoveisbrasil.com/busca_json/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.