Ir para conteúdo

POWERED BY:

Arquivado

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

karpov

PHP/Ajax select

Recommended Posts

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';
}
else
{
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;
case 'buscaCidades':
    buscaCidades();
    break;
}


function buscaEstados($idpais)
{
global $xml,$teste;

$xml .= '<estados>';

$MySQLi = new MySQLi(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_NOME);
$idpais=30;  // SE TENTO COMPARAR SE IDPAIS TEM VALOR DÁ PAU... ELE SÓ PASSA SETAR MANUALMENTE (PARA EFEITO DE TESTES)
$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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.