Ir para conteúdo

Arquivado

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

Myrhay

Ajuda com Combobox Estado/Cidade/Bairro/Ramo

Recommended Posts

Boa tarde Gente, estou com dificuldade com esse combobox, tenho que selecionar o Estado, depois seleciono a cidade, depois o bairro e por ultimo o Segmento

 

Segue o código que uso

 

index.php

<?php

if (file_exists('init.php'))
{
	require_once 'init.php';
}
else
{
	exit('N�o foi poss�vel encontrar o arquivo de inicializa��o');
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript" src="ajax.js"></script>
<script type="text/javascript" src="funcoes.js"></script>
<title>Cidades | Estados</title>
</head>
<body onload="buscaEstados()">

<form method="post" action="">

    <select name="uf" id="uf" onchange="buscaCidades(this.value)">
    </select>


    <select name="cidade" id="cidade" >
      <option value="">Selecione a Cidade</option>
    </select>
    
     <select name="bairro" id="bairro" >
      <option value="">Selecione o bairro</option>
    </select>
  
  	<select name="ramo" id="ramo" >
      <option value="">Selecione o ramo</option>
    </select>

</form>

</body>
</html>

 

funcoes.php

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

header('Content-Type: application/xml');

$xml = "<?xml version='1.0' encoding='iso-8859-1'?>\r\n";


switch ($acao)
{
	case 'buscaEstados':
	    buscaEstados();
	    break;
	case 'buscaCidades':
	    buscaCidades();
	    break;
    case 'buscaBairro':
	    buscaBairro();
	    break;
}


function buscaEstados()
{
	global $xml;
	
	$xml .= '<estados>';
	
	$MySQLi = new MySQLi(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_NOME);
	
	$sql = $MySQLi->query('Select * From estados Order By nome ASC');
	
	while ($f = $sql->fetch_object())
	{
		$xml .= '  <estado>';
		$xml .= '    <id>' . $f->id . '</id>';
		$xml .= '    <sigla>' . $f->sigla . '</sigla>';
		$xml .= '    <nome>' . $f->nome . '</nome>';
		$xml .= '  </estado>';
	}
	
	$sql->close();
	$MySQLi->close();
	
	$xml .= '</estados>';
	echo $xml;
}



function buscaCidades()
{
	$uf = isset($_GET['uf']) ? (int)$_GET['uf'] : 1;
	
	global $xml;
	
	$xml .= '<cidades>';
	
	$MySQLi = new MySQLi(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_NOME);
	
	$sql = $MySQLi->query('Select id, nome From cidades Where id_uf = ' . $uf . ' Order By nome ASC');
	
	while ($f = $sql->fetch_object())
	{
		$xml .= '  <cidade>';
		$xml .= '    <id>' . $f->id . '</id>';
		$xml .= '    <nome>' . $f->nome . '</nome>';
		$xml .= '  </cidade>';
	}
	
	$sql->close();
	$MySQLi->close();
	
	$xml .= '</cidades>';
	echo $xml;
}



function buscaBairro()
{
	$cidade = isset($_GET['cidade']) ? (int)$_GET['cidade'] : 2;

	global $xml;

	$xml .= '<bairros>';

	$MySQLi = new MySQLi(BD_SERVIDOR, BD_USUARIO, BD_SENHA, BD_NOME);

	$sql = $MySQLi->query('Select * From bairro Where id_cid = ' . $cidade . ' Order By nome ASC');

	while ($f = $sql->fetch_object())
	{
		$xml .= '  <bairro>';
		$xml .= '    <id>' . $f->id . '</id>';
		$xml .= '    <nome>' . $f->nome . '</nome>';
		$xml .= '  </bairro>';
	}

	$sql->close();
	$MySQLi->close();

	$xml .= '</bairros>';
	echo $xml;
}

?>

funcoes.js


function buscaEstados()
{
	var uf = document.getElementById('uf');
	
	var op = document.createElement('option');
    op.setAttribute('value', '');
    op.appendChild(document.createTextNode("Carregando..."));
    uf.appendChild(op);
	
	var ajax = openAjax();
	
	ajax.open('GET', 'funcoes.php?acao=buscaEstados', true);
	
	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 o Estado'));
				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(siglaEstado + ' - ' + nomeEstado));
					opcao.appendChild(document.createTextNode(nomeEstado));
					uf.appendChild(opcao);
					
				}
				
			}
		}
	}
    ajax.send(null);
    
}




function buscaCidades(uf)
{

	var cidades = document.getElementById('cidade');
	cidades.innerHTML = '';
	var op = document.createElement('option');
    op.setAttribute('value', '');
    op.appendChild(document.createTextNode("Carregando..."));
    cidades.appendChild(op);
	
	var url = 'funcoes.php?acao=buscaCidades&uf=' + uf;
	var ajax = openAjax();
	
	ajax.open('GET', url, true);
	ajax.onreadystatechange = function()
	{
		if (ajax.readyState == 4)
		{
			if (ajax.status == 200)
			{
				cidades.innerHTML = '';
				

				
				var xml = ajax.responseXML;
				var cidade = xml.getElementsByTagName('cidade');
				
				for (var i = 0; i < cidade.length; i++)
				{
					var idCidade = cidade[i].getElementsByTagName('id')[0].firstChild.nodeValue;
					var nomeCidade = cidade[i].getElementsByTagName('nome')[0].firstChild.nodeValue;
					
					var opcao = document.createElement('option');
					opcao.setAttribute('value', idCidade);
					opcao.appendChild(document.createTextNode(nomeCidade));
					cidades.appendChild(opcao);
				}
			}
		}
	}
	ajax.send(null);
}



function buscaBairro(cidade)
{

	var bairro = document.getElementById('bairro');
	bairro.innerHTML = '';
	var op = document.createElement('option');
    op.setAttribute('value', '');
    op.appendChild(document.createTextNode("Carregando..."));
    bairro.appendChild(op);

	var url = 'funcoes.php?acao=buscaBairro&cidade=' + cidade;
	var ajax = openAjax();

	ajax.open('GET', url, true);
	ajax.onreadystatechange = function()
	{
		if (ajax.readyState === 4)
		{
			if (ajax.status === 200)
			{
				bairro.innerHTML = '';



				var xml = ajax.responseXML;
				var bairro = xml.getElementsByTagName('bairro');

				for (var i = 0; i < bairro.length; i++)
				{
					var idBairro = bairro[i].getElementsByTagName('id')[0].firstChild.nodeValue;
					var nomeBairro = bairro[i].getElementsByTagName('nome')[0].firstChild.nodeValue;

					var opcao = document.createElement('option');
					opcao.setAttribute('value', idBairro);
					opcao.appendChild(document.createTextNode(nomeBairro));
					bairro.appendChild(opcao);
				}
			}
		}
	}
	ajax.send(null);
}

 

Se puderem me ajudar agradeço muito.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual seria a dificuldade que você está tendo?

O Que está funcionando e o que não está até o momento?

Compartilhar este post


Link para o post
Compartilhar em outros sites

No caso 

5 horas atrás, RodriAndreotti disse:

Qual seria a dificuldade que você está tendo?

O Que está funcionando e o que não está até o momento?

No caso conseguir fazer até a cidade, quando utilizo para o bairro e ramo já não funciona, não consigo ver se o erro é no codigo.

Compartilhar este post


Link para o post
Compartilhar em outros sites
7 horas atrás, RodriAndreotti disse:

Mas qual o erro que ocorre quando você executa?
Tentou debugar no firebug?

Opa boa tarde, depois de muito mexer, verifiquei esse erro 

Uncaught TypeError: Cannot set property 'innerHTML' of undefined
    at XMLHttpRequest.ajax.onreadystatechange

O que poderia ser?

Segue o código  e é justamente no bairro.innerHTML = '';

function buscaBairro(cidade)
{

	var bairro = document.getElementById('bairro');
	bairro.innerHTML = '';
	var op = document.createElement('option');
    op.setAttribute('value', '');
    op.appendChild(document.createTextNode("Carregando..."));
    bairro.appendChild(op);

	var url = 'funcoes.php?acao=buscaBairro&cidade=' + cidade;
	var ajax = openAjax();

	ajax.open('GET', url, true);
	ajax.onreadystatechange = function()
	{
		if (ajax.readyState == 4)
		{
			if (ajax.status == 200)
			{
				bairro.innerHTML = '';
				var xml = ajax.responseXML;
				var bairro = xml.getElementsByTagName('bairro');

				for (var i = 0; i < bairro.length; i++)
				{
					var idBairro = bairro[i].getElementsByTagName('id')[0].firstChild.nodeValue;
					var nomeBairro = bairro[i].getElementsByTagName('nome')[0].firstChild.nodeValue;

					var opcao = document.createElement('option');
					opcao.setAttribute('value', idBairro);
					opcao.appendChild(document.createTextNode(nomeBairro));
					bairro.appendChild(opcao);
				}
			}
		}
	}
	ajax.send(null);
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então... o próprio erro está te dizendo o problema.

Uncaught TypeError: Cannot set property 'innerHTML' of undefined

 

Ele diz que você está setando a propriedade innerHTML de uma variável que não foi definida ainda.

Observe este trecho:

bairro.innerHTML = '';
var xml = ajax.responseXML;
var bairro = xml.getElementsByTagName('bairro');

Veja que você seta o innerHTML do bairro antes de declarar a variável bairro, então você está tentando acessar uma variável que ainda não existe.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu problema não é com PHP. Vou mover para área correta. Ainda na oportunidade, vide os tópicos:

 

ATENÇÃO: Seu problema é realmente com o PHP ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
×

Informação importante

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