Endrigo,
Reescrevi a função da netmake pra poder entender e encontrei o problema.
Fica faltando a busca na tabela de municipio para poder colocar o código do município no combobox ao invés do nome.
Estou trabalhando nisso.
Segue o código do evento onChange do campo cep:
[code]try {
$cep_uf = “”;
$cep_nome = “”;
$cep_cidade = “”;
$cep_bairro = “”;
$cep_rua = “”;
$resp = consultaCEP({CEP}, $cep_uf, $cep_nome, $cep_cidade, $cep_bairro, $cep_rua, $cep_tipoext);
{Bairro} = $cep_bairro;
{Endereco} = $cep_nome;
{Municipio} = $cep_cidade;
{Complemento} = $cep_tipoext;
{UF} = $cep_uf;
} catch(Exception $e) {
$resp = $e->getMessage();
{Bairro} = $resp;
}[/code]
E o código da função reescrito:
[code]<?php
/**
* Funções de consulta de CEP ScriptCase
*/
function consultaCEP($CEP, &$cepUF, &$cepNome, &$cepCidade, &$cepBairro, &$cepRua, &$cepTipoExt)
{
$cepUF = “”;
$cepNome = “”;
$cepCidade = “”;
$cepBairro = “”;
$cepRua = “”;
global $cepPath, $achouCEP, $achouLogr, $arqLogr, $localCEP;
global $cepLocalidades, $cepQuantLoc, $cepEspeciais, $cepQuantEsp;
$cepLocalidades = array();
$cepEspeciais = array();
$cepQuantLoc = 0;
$cepQuantEsp = 0;
$arqLogr = "";
$achouLogr = "";
$achouCEP = "";
$localCEP = "";
$opcao = "";
$est = "";
$localidade = "";
$tipo = "";
$logradouro = "";
$formOrigem = "";
$cepPath = $_SESSION['scriptcase']['nm_root_cep'] . $_SESSION['scriptcase']['nm_path_cep'];
$_UF = "";
$_NOME = "";
$_CEP8 = "";
$_CIDADE = "";
$_BAIRRO = "";
$_RUA = "";
$_SESSION['scriptcase']['nm_charset_cep'] = "ISO-8859-1";
if (isset($_SESSION['scriptcase']['charset']) && !empty($_SESSION['scriptcase']['charset']))
{
$_SESSION['scriptcase']['nm_charset_cep'] = $_SESSION['scriptcase']['charset'];
}
$mensErro = "";
// Verifica integridade dos arquivos do CEP
if (is_file($cepPath . "/arquivos/cep_contrl_arq.txt"))
{
$raqContrl = file($cepPath . "/arquivos/cep_contrl_arq.txt");
foreach ($raqContrl as $cadaContrl)
{
$dadosContrl = explode("@#@", $cadaContrl);
if (isset($dadosContrl[1]) && !empty($dadosContrl[0]))
{
if (md5_file($cepPath . "/arquivos/cep_logradouros_" . $dadosContrl[0] . ".txt") != $dadosContrl[1])
{
$mensErro .= "Os arquivos de acesso ao CEP estão corrompidos. <br>";
break;
}
}
}
}
// Verifica existencia dos arquivos do CEP
if (!is_file($cepPath . "/arquivos/cep_faixas_estados.txt"))
{
$mensErro .= "Não foram encontrados os arquivos de acesso ao CEP. <br>";
}
// Busca por CEP
if (isset($CEP) && !empty($CEP))
{
$CEP = str_replace(".", "", str_replace("-", "", $CEP));
}
// Erro
else
{
$mensErro .= "CEP n&atild;o especificado.";
}
if (!empty($mensErro))
{
$mensErro .= "Estes arquivos podem ser baixados do site do Scriprcase e copiados para o diretório onde foi instalado o PROD, <br>";
$mensErro .= "dentro da seguinte estrutura: ../prod/cep/arquivos.<br>";
if (isset($_GET["onchange"]) && $_GET["onchange"] == "s")
{
$mensErro = str_replace("<br>", "", $mensErro);
}
return($mensErro);
exit;
}
// Decide qual acao sera executada
// Localiza UF
$_UF = "";
$estados = file($cepPath . "/arquivos/cep_faixas_estados.txt");
foreach ($estados as $cadaFaixa)
{
$estDados = explode("@nm@", $cadaFaixa);
if ( ($CEP >= $estDados[1]) && ($CEP <= $estDados[2]) )
{
$_UF = $estDados[0];
break;
}
}
if ("" == $_UF)
{
return("CEP Não encontrado.");
}
// Busca por Localidade
cepLerLocalidades(strtolower($_UF));
$registros = 0;
while ($registros < $cepQuantLoc)
{
$cadaLoc = explode("@nm@", $cepLocalidades[$registros]);
if ($cadaLoc[0] == $_UF && $cadaLoc[2] == $CEP)
{
$_CIDADE = $cadaLoc[1];
$_CEP8 = $CEP;
$registros = $cepQuantLoc;
}
$registros++;
}
// Busca por Logradouro
cepLerFaixasCepLocalidades(strtolower($_UF), $CEP);
$registros = 0;
if ($achouCEP == "S")
{
while ($registros == 0)
{
$cadaLogradouro = fgets($arqLogr, 1024);
$cadaLoc = explode("@nm@", $cadaLogradouro);
if (isset($cadaLoc[3]) && $cadaLoc[3] == $CEP)
{
$_UF = $cadaLoc[0];
$_NOME = $cadaLoc[2];
$_CEP8 = $cadaLoc[3];
$_CIDADE = $cadaLoc[4];
$_BAIRRO = $cadaLoc[5];
$_TIPO_EXT = $cadaLoc[6];
if (!empty($cadaLoc[1]))
{
/* $_TIPO_EXT .= " " . $cadaLoc[1]; */
$_NOME = trim($cadaLoc[1]) . " " . $_NOME;
}
$_COMPLE = $cadaLoc[7];
$registros = 1;
}
else
{
if (!isset($cadaLoc[4]) || $localCEP != $cadaLoc[4])
{
$registros = 1;
}
}
}
fclose($arqLogr);
}
// Busca por Logradouro Especial
cepLerEspeciais(strtolower($_UF));
$registros = 0;
while ($registros < $cepQuantEsp)
{
$cadaLoc = explode("@nm@", $cepEspeciais[$registros]);
if ($cadaLoc[1] == $CEP)
{
$_UF = $cadaLoc[2];
$_NOME = $cadaLoc[0];
$_CEP8 = $cadaLoc[1];
$_CIDADE = $cadaLoc[4];
$_BAIRRO = $cadaLoc[5];
$_RUA = $cadaLoc[7];
$_TIPO_EXT = $cadaLoc[6];
if (!empty($cadaLoc[8]))
{
$_RUA = trim($cadaLoc[8]) . " " . $_RUA;
}
if (!empty($cadaLoc[3]))
{
$_RUA .= ", " . $cadaLoc[3];
}
$_COMPLE = "";
$registros = $cepQuantEsp;
}
$registros++;
}
$cepUF = $_UF;
$cepNome = $_NOME;
$cepCidade = $_CIDADE;
$cepBairro = $_BAIRRO;
$cepRua = $_RUA;
$cepTipoExt = $_TIPO_EXT;
return($mensErro);
}
function cepLerLocalidades($pEstado)
{
global $cepPath, $cepLocalidades, $cepQuantLoc;
if (!empty($cepLocalidades))
{
return;
}
$cepLocalidades = file($cepPath . "/arquivos/cep_localidades_" . $pEstado . ".txt");
$cepQuantLoc = count($cepLocalidades);
}
function cepLerEspeciais($pEstado)
{
global $cepPath, $cepEspeciais, $cepQuantEsp;
if (!empty($cepEspeciais))
{
return;
}
$cepEspeciais = file($cepPath . "/arquivos/cep_grandes_usuarios_" . $pEstado . ".txt");
$cepQuantEsp = count($cepEspeciais);
}
function cepLerFaixasCepLocalidades($pEstado, $pCEP)
{
global $cepPath, $achouCEP, $achouLogr, $localCEP;
$achouCEP = "N";
$cepFaixas = file($cepPath . "/arquivos/cep_faixas_localidades.txt");
foreach ($cepFaixas as $cadaFaixa)
{
$cadaLoc = explode("@nm@", $cadaFaixa);
if ($cadaLoc[0] == strtoupper($pEstado) && ($pCEP >= $cadaLoc[2] && $pCEP <= $cadaLoc[3]))
{
$achouCEP = "S";
break;
}
}
if ($achouCEP == "S")
{
$localCEP = $cadaLoc[1];
cepLerPointerLogradouros($pEstado, $cadaLoc[1]);
if ($achouLogr == "N")
{
$achouCEP = "N";
}
}
}
function cepLerPointerLogradouros($pEstado, $pCidade)
{
global $cepPath, $arqLogr, $achouLogr;
$achouLogr = "N";
$arqPoint = file($cepPath . "/arquivos/cep_pointer_log_" . $pEstado . ".txt");
$cidPesq = retiraAcentos($pCidade);
foreach ($arqPoint as $cadaPoint)
{
$cadaLoc = explode("@nm@", $cadaPoint);
$cidPt = retiraAcentos($cadaLoc[0]);
if ($cidPt == $cidPesq)
{
$achouLogr = "S";
break;
}
}
if ($achouLogr == "N")
{
return;
}
$arqLogr = fopen($cepPath . "/arquivos/cep_logradouros_" . strtolower($pEstado) . ".txt", 'r');
fseek($arqLogr, $cadaLoc[1]);
}
function retiraAcentos($pCampo)
{
$pCampo = strtolower($pCampo);
$pCampo = str_replace("á", "a", $pCampo);
$pCampo = str_replace("à", "a", $pCampo);
$pCampo = str_replace("ã", "a", $pCampo);
$pCampo = str_replace("â", "a", $pCampo);
$pCampo = str_replace("é", "e", $pCampo);
$pCampo = str_replace("ê", "e", $pCampo);
$pCampo = str_replace("í", "i", $pCampo);
$pCampo = str_replace("ó", "o", $pCampo);
$pCampo = str_replace("õ", "o", $pCampo);
$pCampo = str_replace("ô", "o", $pCampo);
$pCampo = str_replace("ú", "u", $pCampo);
$pCampo = str_replace("ü", "u", $pCampo);
$pCampo = str_replace("ç", "c", $pCampo);
return $pCampo;
}
function decodeISO(&$val)
{
$val = mb_convert_encoding($val, $_SESSION['scriptcase']['nm_charset_cep'], "ISO-8859-1");
}
?>[/code]
[]s