Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Pessoal estou tentando fazer um select país, estado, cidade, apartir de um script que encontrei na NET (originalmente co dois níveis), mas estou com dois problemas:
1) RODANDO O SCRIPT EM UMA PÁGINA APARTE tipo: http://url/scriptisolado.php
No script original os estados são populados a partir de un onload no body, eu tirei esse onload, coloqueio meu select do país e aí sim coloqueio a chamada da função chamando o select do Estado. Tipo:
<select name="idpais" onChange="buscaEstados(this.value)" id="idpais">
<!--option value="30" selected="selected">Brasil</option-->
<option value="0">País</option>
<? for($i=0; $i<$row_pais; $i++) { ?>
<option value="<? echo mysql_result($sql_pais, $i, "idpais"); ?>"> <? echo mysql_result($sql_pais, $i, "pais"); ?></option>
<? } ?>
</select>
E recebo a informação no Javascript da seguinte forma:
function buscaEstados(idpais)
{
var idpais = idpais;
var uf = document.getElementById('uf');
var op = document.createElement('option');
op.setAttribute('value', '');
op.appendChild(document.createTextNode("Carregando Estados"));
uf.appendChild(op);
var ajax = openAjax();
ajax.open('GET', 'funcoes.php?acao=buscaEstados&idpais='+idpais, true);//&idpais=
ajax.onreadystatechange = function()
{
if (ajax.readyState == 4)
{
if (ajax.status == 200)
{
uf.innerHTML = '';
var opcao = document.createElement('option');
opcao.setAttribute('value', '');
opcao.appendChild(document.createTextNode('Selecione'));
uf.appendChild(opcao);
var xml = ajax.responseXML;
var estado = xml.getElementsByTagName('estado');
for (var i = 0; i < estado.length; i++)
{
var idEstado = estado[i].getElementsByTagName('id')[0].firstChild.nodeValue;
//var siglaEstado = estado[i].getElementsByTagName('sigla')[0].firstChild.nodeValue;
var nomeEstado = estado[i].getElementsByTagName('nome')[0].firstChild.nodeValue;
var opcao = document.createElement('option');
opcao.setAttribute('value', idEstado);
opcao.appendChild(document.createTextNode(nomeEstado)); //siglaEstado + ' - ' +
uf.appendChild(opcao);
}
}
}
}
ajax.send(null);
}
Até aí beleza, mas a partir daí começam os problemas. Na página que gera o XML para popular o select estado, se coloco o código para receber a variável com o idpais
$idpais=$_GET['idpais'];
o código não carrega o select Estado. Embora ao dar um alert no Javascript ele retorna normalmente o id do país que eu selecionei. Segue o código do php que gera o XML.
<?php
if (file_exists('init.php'))
{
require_once 'init.php';
}exit('Não foi possível encontrar o arquivo de inicialização');
}
$acao = isset($_GET['acao']) ? $_GET['acao'] : FALSE;
$idpais=$_GET['idpais']; // QUANDO TENTO RECEBER IDPAIS, O CÓDIGO NÃO CARREGA OS ESTADOS/CIDADES
header('Content-Type: application/xml');
$xml = "<?xml version='1.0' encoding='iso-8859-1'?>\r\n";
switch ($acao)
{
case 'buscaEstados':
buscaEstados($idpais);
break; buscaCidades();
break;
}
function buscaEstados($idpais)global $xml,$teste;
$xml .= '<estados>';
$MySQLi = new MySQLi(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_NOME);$sql = $MySQLi->query("Select * From estado where idpais='$idpais' Order By estado ASC");
while ($f = $sql->fetch_object())
{
$xml .= ' <estado>';
$xml .= ' <id>' . $f->idestado . '</id>';
//$xml .= ' <sigla>' . $f->sigla . '</sigla>';
$xml .= ' <nome>' . $f->estado. '</nome>';
$xml .= ' </estado>';
}
$sql->close();
$MySQLi->close();
$xml .= '</estados>';
echo $xml;
}
function buscaCidades()$uf = isset($_GET['uf']) ? (int)$_GET['uf'] : 1;
global $xml,$idpais;
$xml .= '<cidades>';
$MySQLi = new MySQLi(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_NOME);
$sql = $MySQLi->query('Select idcidade,cidade From cidades Where idestado = ' . $uf . ' Order By cidade ASC');
while ($f = $sql->fetch_object())
{
$xml .= ' <cidade>';
$xml .= ' <id>' . $f->idcidade . '</id>';
$xml .= ' <nome>' . $f->cidade. '</nome>';
$xml .= ' </cidade>';
}
$sql->close();
$MySQLi->close();
$xml .= '</cidades>';
echo $xml;
}
?>
2) RODANDO O SCRIPT DENTRO DA MINHA ESTRUTURA tipo: http://url/minhapágina.php (contendo estrutura do script isolado)
Bom, o problema 2 é mais ou menos o seguinte, como disse, estou usando um script que encontrei na NET, que carrega os selects com ajax em dois níveis, mas preciso de três, e além dos selects, tenho outros campos no meu form. Ao transportar (não é include) os selects para dentro do meu form (com os includes e referências aos javascripts necessários e certinhos), ele não popula os selects Estado e Cidade é de jeito nenhum, não dá erro de JS, nem há erro de include do script que gera o XML, ele executa o JS, mas os dois selects só ficam carregando...).
Segue trecho da minha página onde transporto o script que peguei na net, para melhor entendimento:
<tr>
<td width="31%" class="rounded-company style1 style2" scope="col"><?=$label_email;?></td>
<td ><input name="nome" type="text" id="nome" tabindex="6" value="<?=$objTribalista->trib_email;?>" size="40" maxlength="255"/>
</td>
</tr>
<tr>
<td width="31%"><span class="style2"><a href="#" title="<?=$tolltip_nascimento;?>"><?=$label_pais;?></a></span></td>
<td><span class="rounded-q1 style1 style2"><select name="idpais" onChange="buscaEstados(this.value)" id="idpais">
<!--option value="30" selected="selected">Brasil</option-->
<option value="0">País</option>
<? for($i=0; $i<$row_pais; $i++) { ?>
<option value="<? echo mysql_result($sql_pais, $i, "idpais"); ?>"> <? echo mysql_result($sql_pais, $i, "pais"); ?></option>
<? } ?>
</select>
</span></td>
</tr>
<tr>
<td width="31%"><a href="#" title="<?=$tolltip_nascimento;?>"><?=$label_estado;?></a></td>
<td><span class="rounded-q1 style1 style2"><select name="uf" id="uf" onchange="buscaCidades(this.value)">
</select>
</span></td>
</tr>
<tr>
<td width="31%"><span class="style2"><a href="#">
</a><a href="#" title="<?=$tolltip_nascimento;?>"> <?=$label_cidade;?></a></span></td>
<td><span class="rounded-q1 style1 style2"> <select name="cidade" id="cidade">
</select>
</span></td>
</tr>
<tr>
<td><span class="style2"><a href="#"><?=$label_endereco;?></a></span></td>
<td><span class="rounded-q1 style1 style2">
<input name="endereco" type="text" id="endereco" tabindex="6" value="<?=$objTribalista->trib_endereco;?>" maxlength="250"/>
</span></td>
</tr>
Bom, não sou nenhum expert em PHP e muito menos em Ajax, mas depois de 3 dias, me rendo ao conhecimento coletivo. Se alguém puder me ajudar ficarei eternamente agradecido.Carregando comentários...