Busca Cep ViaCep dando erro Pessoal estou tentando criar uma tela onde digito o cep e retorna os dados, porém ele está dando um erro conforme a imagem que estou anexando e o código é o seguinte: ...
MO
Busca Cep ViaCep dando erro  
Pessoal estou tentando criar uma tela onde digito o cep e retorna os dados, porém ele está dando um erro conforme a imagem que estou anexando e o código é o seguinte:

 
  1. <?php
  2. class frmcep extends TPage{
  3. protected $form;
  4. function __construct()
  5. {
  6. parent::__construct();
  7. $this->form = new TQuickForm("Funcionarios");
  8. $rua = new TEntry('rua');
  9. $rua->setEditable(FALSE);
  10. $bairro = new TEntry('bairro');
  11. $bairro->setEditable(FALSE);
  12. $cep = new TEntry('cep');
  13. $cidade = new TEntry('cidade');
  14. $cidade->setEditable(FALSE);
  15. $uf = new TEntry('uf');
  16. $uf->setEditable(FALSE);
  17. //cep
  18. $buscacep = new TAction(array($this, 'oncep'));
  19. $cep->setExitAction($buscacep);
  20. // mascaras
  21. $cep->setMask('99999999');
  22. //validação
  23. $rua->addValidation('rua',new TRequiredValidator);
  24. $bairro->addValidation('bairro',new TRequiredValidator);
  25. $cidade->addValidation('cidade',new TRequiredValidator);
  26. $uf->addValidation('uf',new TRequiredValidator);
  27. $this->form->addQuickField('cep:',$cep,100);
  28. $this->form->addQuickField('Rua:',$rua,400);
  29. $this->form->addQuickField('Bairro:',$bairro,200);
  30. $this->form->addQuickField('Cidade:',$cidade,200);
  31. $this->form->addQuickField('UF:',$uf,30);
  32. parent::add($this->form);
  33. }
  34. /**
  35. * onSearch()
  36. * @param string $param 'cep'
  37. */
  38. public static function oncep($cep)
  39. {
  40. $cep = preg_replace("/\D/","", $cep);
  41. if ($cep != "")
  42. {
  43. $resultado = simplexml_load_string( @file_get_contents("http://viacep.com.br/ws/".$cep."/xml/"));
  44. $erro = (string) $resultado->erro;
  45. if ( !$erro )
  46. {
  47. $objects['cep'] = (string) $resultado->cep;
  48. $objects['logradouro'] = (string) $resultado->logradouro;
  49. $objects['complemento'] = (string) $resultado->complemento;
  50. $objects['bairro'] = (string) $resultado->bairro;
  51. $objects['localidade'] = (string) $resultado->localidade;
  52. $objects['uf'] = (string) $resultado->uf;
  53. $objects['unidade'] = (string) $resultado->unidade;
  54. $objects['ibge'] = (string) $resultado->ibge;
  55. $objects['gia'] = (string) $resultado->gia;
  56. return $objects;
  57. } else return FALSE;
  58. } else return FALSE;
  59. }
  60. }
  61. ?>

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (9)


LC

Talvez o file_get_contents esteja bloqueado no seu servidor, normalmente em servidor compartilhado ele fica bloqueado, então eu fiz o seguinte:
Usei desta forma:
 
  1. <?php
  2. $resultado = simplexml_load_string( curl_file_get_contents( "https://viacep.com.br/ws/" . $Cep . "/xml/" ) );
  3. ?>


 
  1. <?php
  2. /**
  3. * Função para substituir o file_get_contents
  4. * O file_get_contents em alguns servidores pode estar desabilitado
  5. * Leandro 03/08/2017
  6. */
  7. public static function curl_file_get_contents( $site_url )
  8. {
  9. $timeout = 5; // set to zero for no timeout
  10. $ch = curl_init();
  11. curl_setopt( $ch, CURLOPT_URL, $site_url );
  12. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
  13. curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
  14. curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
  15. curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
  16. $file_contents = curl_exec( $ch );
  17. curl_close( $ch );
  18. return $file_contents;
  19. }
  20. ?>

MO

amigo não sei mais o que faço, tentei o seu código e não tive êxito, tentei outras coisas sem sucesso. Tentei até mesmo o código javascript da viaCep e tb. não consegui :(
MO

 
  1. <?php
  2. /**
  3. * BuscaCepFormView
  4. *
  5. * @version 1.0
  6. * @author Ademilson Nunes
  7. */
  8. class BuscaCepFormView extends TPage
  9. {
  10. private $form;
  11. public function __construct()
  12. {
  13. parent::__construct();
  14. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  15. $script = new TElement('script');
  16. $script->type = 'text/javascript';
  17. //Limpa valores do formulário de cep.
  18. $javascript = "
  19. function limpa_formulário_cep(){
  20. document.getElementById('rua').value=('');
  21. document.getElementById('bairro').value=('');
  22. document.getElementById('cidade').value=('');
  23. document.getElementById('uf').value=('');
  24. document.getElementById('ibge').value=('');
  25. }
  26. function meu_callback(conteudo) {
  27. if (!("erro" in conteudo))
  28. {
  29. //Atualiza os campos com os valores.
  30. document.getElementById('rua').value=(conteudo.logradouro);
  31. document.getElementById('bairro').value=(conteudo.bairro);
  32. document.getElementById('cidade').value=(conteudo.localidade);
  33. document.getElementById('uf').value=(conteudo.uf);
  34. document.getElementById('ibge').value=(conteudo.ibge);
  35. } //end if.
  36. else
  37. {
  38. //CEP não Encontrado.
  39. limpa_formulário_cep();
  40. alert("CEP não encontrado.");
  41. }
  42. }
  43. function pesquisacep(valor)
  44. {
  45. //Nova variável "cep" somente com dígitos.
  46. var cep = valor.replace(/\D/g, '');
  47. //Verifica se campo cep possui valor informado.
  48. if (cep != "")
  49. {
  50. //Expressão regular para validar o CEP.
  51. var validacep = /^[0-9]{8}$/;
  52. //Valida o formato do CEP.
  53. if(validacep.test(cep))
  54. {
  55. //Preenche os campos com "..." enquanto consulta webservice.
  56. document.getElementById('rua').value="...";
  57. document.getElementById('bairro').value="...";
  58. document.getElementById('cidade').value="...";
  59. document.getElementById('uf').value="...";
  60. document.getElementById('ibge').value="...";
  61. //Cria um elemento javascript.
  62. var script = document.createElement('script');
  63. //Sincroniza com o callback.
  64. script.src = 'https://viacep.com.br/ws/'+ cep + '/json/?callback=meu_callback';
  65. //Insere script no documento e carrega o conteúdo.
  66. document.body.appendChild(script);
  67. } //end if.
  68. else
  69. {
  70. //cep é inválido.
  71. limpa_formulário_cep();
  72. alert("Formato de CEP inválido.");
  73. }
  74. } //end if.
  75. else {
  76. //cep sem valor, limpa formulário.
  77. limpa_formulário_cep();
  78. }
  79. };";
  80. $script->add($javascript);
  81. ////////////////////////////////////////////////////////////////////////////////////////////////////////
  82. $this->form = new TForm('BuscaCorreioForm');
  83. $table = new TTable;
  84. $this->form->add($table);
  85. $notebook = new TNotebook;
  86. $notebook->setSize(650, 150);
  87. $notebook->appendPage('Exemplo de Busca nos Correios usando CEP', $this->form);
  88. $cep = new TEntry('cep');
  89. $logradouro = new TEntry('logradouro');
  90. $numero = new TEntry('numero');
  91. $bairro = new TEntry('bairro');
  92. $cidade = new TEntry('cidade');
  93. $uf = new TEntry('uf');
  94. $cep->setSize(100);
  95. $logradouro->setEditable(false);
  96. $cep->setMask('99999-999');
  97. $logradouro->setSize(200);
  98. $numero->setSize(50);
  99. $bairro->setSize(200);
  100. $bairro->setEditable(false);
  101. $cidade->setSize(150);
  102. $cidade->setEditable(false);
  103. $uf->setSize(30);
  104. $uf->setEditable(false);
  105. $buscaCep = new TAction(array($this, 'onSearch'));
  106. $cep->setExitAction($buscaCep);
  107. $row = $table->addRow();
  108. $row->addCell(new TLabel('CEP:'));
  109. $row->addCell($cep);
  110. $row = $table->addRow();
  111. $row->addCell(new TLabel('Endereço:'));
  112. $row->addCell($logradouro);
  113. $row->addCell(new TLabel('Número:'));
  114. $row->addCell($numero);
  115. $row = $table->addRow();
  116. $row->addCell(new TLabel('Bairro:'));
  117. $row->addCell($bairro);
  118. $row->addCell(new TLabel('Cidade:'));
  119. $row->addCell($cidade);
  120. $row->addCell(new TLabel('UF:'));
  121. $row->addCell($uf);
  122. $this->form->setFields(array($cep,
  123. $logradouro,
  124. $numero,
  125. $bairro,
  126. $cidade,
  127. $uf));
  128. parent::add($notebook);
  129. }
  130. /**
  131. * onSearch()
  132. * @param string $param 'cep'
  133. */
  134. public static function pesquisacep($param)
  135. {
  136. $obj = new StdClass;
  137. $buscaCep = new TBuscaCorreio;
  138. $data = $buscaCep->getData($param['cep']);
  139. $obj->logradouro = $data['Logradouro'];
  140. $obj->cidade = $data['Cidade'];
  141. $obj->bairro = $data['Bairro'];
  142. $obj->uf = $data['UF'];
  143. TForm::sendData('BuscaCorreioForm', $obj);
  144. }
  145. }
  146. ?>

LC

Assim funcionou aqui comigo:
 
  1. <?php
  2. /**
  3. * BuscaCepFormView
  4. *
  5. * @version 1.0
  6. * @author Ademilson Nunes
  7. */
  8. class BuscaCepFormView extends TPage
  9. {
  10. private $form;
  11. public function __construct()
  12. {
  13. parent::__construct();
  14. $this->form = new TForm('BuscaCepFormView');
  15. $table = new TTable;
  16. $this->form->add($table);
  17. $notebook = new TNotebook;
  18. $notebook->setSize(650, 150);
  19. $notebook->appendPage('Exemplo de Busca nos Correios usando CEP', $this->form);
  20. $cep = new TEntry('cep');
  21. $logradouro = new TEntry('logradouro');
  22. $numero = new TEntry('numero');
  23. $bairro = new TEntry('bairro');
  24. $cidade = new TEntry('cidade');
  25. $uf = new TEntry('uf');
  26. $cep->setSize(100);
  27. $logradouro->setEditable(false);
  28. $cep->setMask('99999-999');
  29. $logradouro->setSize(200);
  30. $numero->setSize(50);
  31. $bairro->setSize(200);
  32. $bairro->setEditable(false);
  33. $cidade->setSize(150);
  34. $cidade->setEditable(false);
  35. $uf->setSize(30);
  36. $uf->setEditable(false);
  37. $buscaCep = new TAction(array($this, 'onSearch'));
  38. $cep->setExitAction($buscaCep);
  39. $row = $table->addRow();
  40. $row->addCell(new TLabel('CEP:'));
  41. $row->addCell($cep);
  42. $row = $table->addRow();
  43. $row->addCell(new TLabel('Endereço:'));
  44. $row->addCell($logradouro);
  45. $row->addCell(new TLabel('Número:'));
  46. $row->addCell($numero);
  47. $row = $table->addRow();
  48. $row->addCell(new TLabel('Bairro:'));
  49. $row->addCell($bairro);
  50. $row->addCell(new TLabel('Cidade:'));
  51. $row->addCell($cidade);
  52. $row->addCell(new TLabel('UF:'));
  53. $row->addCell($uf);
  54. $this->form->setFields(array($cep,
  55. $logradouro,
  56. $numero,
  57. $bairro,
  58. $cidade,
  59. $uf));
  60. parent::add($notebook);
  61. }
  62. /**
  63. * onSearch()
  64. * @param string $param 'cep'
  65. */
  66. public static function pesquisacep($param)
  67. {
  68. $obj = new StdClass;
  69. $buscaCep = new TBuscaCorreio;
  70. $data = $buscaCep->getData($param['cep']);
  71. $obj->logradouro = $data['Logradouro'];
  72. $obj->cidade = $data['Cidade'];
  73. $obj->bairro = $data['Bairro'];
  74. $obj->uf = $data['UF'];
  75. TForm::sendData('BuscaCorreioForm', $obj);
  76. }
  77. /**
  78. * Busca endereço pelo cep
  79. */
  80. public static function onSearch($param)
  81. {
  82. //var_dump($param);
  83. //faz a busca pelo cep informado
  84. $cep = BuscaCepFormView::buscaCep($param['cep']);
  85. var_dump($cep);
  86. if ( $cep )
  87. {
  88. $obj = new StdClass;
  89. $obj->logradouro = $cep['Logradouro'];
  90. $obj->cidade = $cep['Localidade'];
  91. $obj->bairro = $cep['Bairro'];
  92. $obj->uf = $cep['UF'];
  93. TForm::sendData('BuscaCepFormView', $obj);
  94. }
  95. else
  96. {
  97. new TMessage('info', 'Informe um CEP corretamente, endereço não econtrado !');
  98. }
  99. }
  100. /**
  101. * By Marco AR Campos
  102. * Função de busca de Endereço pelo CEP
  103. * Parametro - &Cep "09210000"
  104. * Retorno - Array ('CEP','Logradouro','Complemento','Bairro','Localidade ','UF','Unidade','IBGE','GIA','TipoLogradouro','LogradouroSemTipo')
  105. */
  106. public static function buscaCep( $Cep )
  107. {
  108. $Cep = preg_replace( "/D/", "", $Cep );
  109. if ( $Cep != "" )
  110. {
  111. $resultado = simplexml_load_string( BuscaCepFormView::curl_file_get_contents( "https://viacep.com.br/ws/" . $Cep . "/xml/" ) );
  112. $erro = (string) $resultado->erro;
  113. if ( !$erro )
  114. {
  115. $objects[ 'CEP' ] = (string) $resultado->cep;
  116. $objects[ 'Logradouro' ] = (string) $resultado->logradouro;
  117. $objects[ 'Complemento' ] = (string) $resultado->complemento;
  118. $objects[ 'Bairro' ] = (string) $resultado->bairro;
  119. $objects[ 'Localidade' ] = (string) $resultado->localidade;
  120. $objects[ 'UF' ] = (string) $resultado->uf;
  121. $objects[ 'Unidade' ] = (string) $resultado->unidade;
  122. $objects[ 'IBGE' ] = (string) $resultado->ibge;
  123. $objects[ 'GIA' ] = (string) $resultado->gia;
  124. // ajuste incluído por Leandro Coelho - 12/12/2016
  125. $p = strpos( $objects[ 'Logradouro' ], ' ' );
  126. $objects[ 'TipoLogradouro' ] = substr( $objects[ 'Logradouro' ], 0, $p );
  127. $objects[ 'LogradouroSemTipo' ] = substr( $objects[ 'Logradouro' ], ($p + 1 ) );
  128. return $objects;
  129. }
  130. else
  131. {
  132. return FALSE;
  133. }
  134. }
  135. else
  136. {
  137. return FALSE;
  138. }
  139. }
  140. /**
  141. * Função para substituir o file_get_contents
  142. * O file_get_contents em alguns servidores pode estar desabilitado
  143. * Leandro 03/08/2017
  144. */
  145. public static function curl_file_get_contents( $site_url )
  146. {
  147. $timeout = 5; // set to zero for no timeout
  148. $ch = curl_init();
  149. curl_setopt( $ch, CURLOPT_URL, $site_url );
  150. curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
  151. curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, $timeout );
  152. curl_setopt( $ch, CURLOPT_SSL_VERIFYHOST, false );
  153. curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, false );
  154. $file_contents = curl_exec( $ch );
  155. curl_close( $ch );
  156. return $file_contents;
  157. }
  158. }
  159. ?>

?>
MO

Chefe deu um erro:

Notice: Trying to get property of non-object in C:Vertrigowwwsisbs_testeappcontrolapresentacaoEncontraCepFormView.class.php on line 126

Notice: Trying to get property of non-object in C:Vertrigowwwsisbs_testeappcontrolapresentacaoEncontraCepFormView.class.php on line 129

Notice: Trying to get property of non-object in C:Vertrigowwwsisbs_testeappcontrolapresentacaoEncontraCepFormView.class.php on line 130

Notice: Trying to get property of non-object in C:Vertrigowwwsisbs_testeappcontrolapresentacaoEncontraCepFormView.class.php on line 131

Notice: Trying to get property of non-object in C:Vertrigowwwsisbs_testeappcontrolapresentacaoEncontraCepFormView.class.php on line 132

Notice: Trying to get property of non-object in C:Vertrigowwwsisbs_testeappcontrolapresentacaoEncontraCepFormView.class.php on line 133

Notice: Trying to get property of non-object in C:Vertrigowwwsisbs_testeappcontrolapresentacaoEncontraCepFormView.class.php on line 134

Notice: Trying to get property of non-object in C:Vertrigowwwsisbs_testeappcontrolapresentacaoEncontraCepFormView.class.php on line 135

Notice: Trying to get property of non-object in C:Vertrigowwwsisbs_testeappcontrolapresentacaoEncontraCepFormView.class.php on line 136

Notice: Trying to get property of non-object in C:Vertrigowwwsisbs_testeappcontrolapresentacaoEncontraCepFormView.class.php on line 137
array(11) { ["CEP"]=> string(0) "" ["Logradouro"]=> string(0) "" ["Complemento"]=> string(0) "" ["Bairro"]=> string(0) "" ["Localidade"]=> string(0) "" ["UF"]=> string(0) "" ["Unidade"]=> string(0) "" ["IBGE"]=> string(0) "" ["GIA"]=> string(0) "" ["TipoLogradouro"]=> string(0) "" ["LogradouroSemTipo"]=> bool(false) }
LC

Na linha 126 ai sua tem o q ?
MO

126 - $erro = (string) $resultado->erro;
MO

Amigo acho que descobri o problema, na minha casa eu utilizo a internet sem proxy e funcionou perfeitamente, acho que o proxy do trabalho não está permitindo fazer a busca, vou procurar o administrador e relatar este problema. O que acontecer eu repasso depois.
MO

Deu certo, agora vou implementar no meu sistema, obrigado Leandro Coelho pela enorme ajuda e paciência