Ir para conteúdo

POWERED BY:

Arquivado

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

gpassarelli

Implatacao Codigo

Recommended Posts

Fala galera e aew, beleza? entao to usando o codigo da nossa amiga Andreia de Combos de estados e cidades usando Ajax mas tva querendo implementar um novo filtro para uma 3 tabela.

a organizacao seria:

Paises / Cidades / Cursos.

Ja tenti de varias maneiras mas nao to conseguindo...sempre da algum erro.

Se tiverem como me ajudar...ficaria muito grato.

 

ajax_combo.asp

<!--#include file="conexao.asp"-->
   <%
   call abre_conexao
  
   sql = "select id_estado, estado from estados order by estado"
   set tab = conexao.execute(sql)
   %>
   <html>
   <head>
   <script src="seleciona_cidade.js"></script>
   </head>
   <title>Exemplo de Ajax</title>
  
   <style type="text/css">
   table
   {
   font-family: verdana;
   font-size: 11px;
   color: #000099;
   font-weight: bold;
   }
  
   select
   {
   font-family: verdana;
   font-size: 11px;
   }
   </style>
  
   <body>
  
   <table border="1" width="40%" cellspacing="0" cellpadding="5" bgcolor="#EAEBEF" bordercolorlight="#FFFFFF" bordercolordark="#E3E5EA">
	   <tr>
		   <td width="10%">Estado:</td>
		   <td width="30%"><select name="estados" onchange="MandaID(this.value)">
				   <option value="">Selecione</option>
				   <% while not tab.eof %>
				   <option value="<%= tab("id_estado") %>"><%= tab("estado") %></option>
				   <% tab.movenext
						wend
				   %>
				   </select>
		   </td>
	   </tr>
	   <tr>
		   <td>Cidade:</td>
		   <td><div id="exibe_cidade"><select><option value="">Selecione um estado</option></select></div></td>
	   </tr>
   </table>
  
   <%
   call fecha_conexao
   set tab = nothing
   %>
  
   </body>
   </html>

seleciona_cidade.js

var xmlHttp
  
   function MandaID(str)
   {
   xmlHttp=GetXmlHttpObject()
   if (xmlHttp==null)
   {
   alert ("Este browser não suporta HTTP Request")
   return
   }
  
  
   var url="seleciona_cidade.asp"
   url=url+"?id_estado="+str
   url=url+"&sid="+Math.random()
   xmlHttp.onreadystatechange=stateChanged
   xmlHttp.open("GET",url,true)
   xmlHttp.send(null)
   }
  
   function stateChanged()
   {
   if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
   {
   document.getElementById("exibe_cidade").innerHTML=xmlHttp.responseText
   }
   }
  
   function GetXmlHttpObject()
   {
   var objXMLHttp=null
   if (window.XMLHttpRequest)
   {
   objXMLHttp=new XMLHttpRequest()
   }
   else if (window.ActiveXObject)
   {
   objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")
   }
   return objXMLHttp
   }

seleciona_cidade.asp

<!--#include file="conexao.asp"-->
  
   <%
   Response.Charset = "ISO-8859-1"
   id_estado = request.querystring("id_estado")
   %>
  
   <select name="cidades">
   <% if id_estado = "" then %>
	   <option value="">Selecione um estado</option>
   <% else
  
		 call abre_conexao
		  
		sql_cidade="SELECT id_cidade, cidade FROM CIDADES WHERE id_estado="& id_estado
		set tab_cidade = conexao.execute(sql_cidade)
		while not tab_cidade.eof
   %>
		   <option value="<%= tab_cidade("id_cidade") %>"><%= tab_cidade("cidade") %></option>
  
   <% tab_cidade.movenext
		wend
  
		call fecha_conexao
		set tab_cidade = nothing
  
		end if
   %>
   </select>

Estrutura do Banco de Dados

Nome da tabela2: Cursos

Nome do campo1: id_curso (auto-numerico)

Nome do campo2: id_cidade (número)

Nome do campo3: curso (texto)

 

Nome da tabela1: Cidades

Nome do campo1: id_cidade (auto-numerico)

Nome do campo2: id_estado (número)

Nome do campo3: cidade (texto)

 

Nome da tabela2: Estados

Nome do campo1: id_estado (auto-numerico)

Nome do campo2: estado (texto)

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual erro é gerado ?

 

olha este exemplo:

 

Tabela estados

Campos: Cod, Estado

 

Tabela Cidades

Campos: CodCidade, Cidade, CodEstado

 

Tabela Imoveis

Campos: CodImovel, CodEstado, Imoveis, CodCidade

 

Arquivo default.asp

 

<%
 'AQUI REALIZAMOS A CONEXÃO COM O BANCO DE DADOS. NENHUM SEGREDO.
 Set conexao = Server.CreateObject("ADODB.connection")
 DSNtest = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("dados_01.mdb")
 conexao.Open DSNtest

 sql = "select * from estados"
 set rs = conexao.Execute(sql)
%>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>:: ::</title>
<style type="text/css">
<!--
/*CSS SIMPLES.*/
body {
 margin-left: 0px;
 margin-top: 0px;
 margin-right: 0px;
 margin-bottom: 0px;
}
-->
</style></head>

<body>

<script language="javascript" src="ajax.js"></script>
<FORM method="post" name="frm1" id="frm1">
<table width="779" height="19" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
	<td width="163" height="40" valign="top"><table width="163" border="0" cellspacing="0" cellpadding="0">
	  <tr>
		<td height="29" background="Imagens/menu_001.gif"> </td>
	  </tr>
	  <tr>
		<td height="450" valign="top" bgcolor="#ECF2F0"><table width="150" border="0" cellspacing="0" cellpadding="0">
		  <tr>
			<td height="19">
	   <select style="width:200" id="estado" name="estado" onchange="trazdados();">
	 <option value="0"></option>
				<%
	'ABAIXO NÓS PREENCHEMOS A PRIMEIRA COMBO. 
	'PRECISAREMOS DO ID DA PRIMEIRA COMBO PARA PREENCHER O AS OUTRAS DUAS.
	'PORTANTO COLOQUEM NO VALUE DA COMBO O CÓDIGO DELA. PARA PEGARMOS DEPOIS...
	while not rs.EOF
	%>
				<option value="<%Response.Write(rs("COD") & "|" & rs("ESTADO"))%>" <%=selected%>><%=rs("ESTADO")%></option>
				<%
	   rs.MoveNext
	  wend
	   
	  rs.close
	  set rs = nothing   
	  %>
			  </select>
			</td>
		  </tr>
		  <tr>
			<td height="19">
   <!--  SEGUNDA COMBO. COLOCO ELA VAZIA  -->
   <span id='divcombouf'>
			  <select style="width:200" id="cidade" name="cidade" onChange="dadoscidade();">
	  <option value="0"></option>
	 </select>
   </span>
   </td>
		  </tr>
		  <tr>
			<td height="19">
   <!-- TERCEIRA COMBO. A EXPLICAÇÃO DA SEGUNDA (ACIMA) É EXATEMENTE IGUAL. NÃO MUDA NADA. -->
   <span id='divcomboimovel'>
			  <select style="width:200" id="imovel" name="imovel">
				<option value="0"></option>
			  </select>
   </span>
   </td>
		  </tr>
		  <tr>
			<td height="19"> </td>
		  </tr>
		</table></td>
	  </tr>
	</table></td>
	<td width="453"></td>
	<td width="163" valign="top"><table width="163" border="0" cellspacing="0" cellpadding="0">
	  <tr>
		<td height="29" background="Imagens/menu_002.gif"> </td>
	  </tr>
	  <tr>
		<td height="450" bgcolor="#F9FBFA"> </td>
	  </tr>
	</table></td>
  </tr>
</table>
<table width="779" border="0" align="center" cellpadding="0" cellspacing="0">
  <tr>
	<td height="33" background="Imagens/barra_003.gif"> </td>
  </tr>
</table>

<input type="hidden" name="codestado" id="codestado" value="<%=codestado%>" size="3">
<input type="hidden" name="codcidade" id="codcidade" value="<%=codcidade%>" size="3">
<input type="hidden" name="codimovel" id="codimovel" value="<%=codimovel%>" size="3">
</form>
</body>
</html>

<script>

//ESSA FUNÇÃO IRÁ TRAZER O ID DO ESTADO SELECIONADO NA PRIMEITA COMBO PARA PODERMOS PREENCHER A SEGUNDA E TERCEIRA COMBO.
function trazdados()
{
	//AQUI "INFORMAMOS" QUE O PRIMEIRA COMBO SERÁ SELECIOANDA E DEPOIS DAMOS UM SPLIT NA BARRA (|) QUE
	//SEPARA OS VALORES QUE ESTÃO NO VALUE DA COMBO1. SE você'S EXIBREM O CÓDIGO FONTE NO BROWSER VERÃO QUE A COMBO1 ESTARÁ ASSIM:
	// IDESTADO | NOMEESTADO.
	var arr = new String(frm1.estado.value);
	arr = arr.split('|');

  //AQUI TRAZEMOS APENAS O ID DE CADA ESTADO QUE FOR SELECIONADO.  
	frm1.codestado.value = arr[0];

  combocidade(); //CHAMA A FUNÇÃO AJAX QUE PREENCHER A COMBO CIDADE, ASSIM QUE É SELECIONADO UM REGISTRO NA COMBO1.
  comboimovel(); //CHAMA A FUNÇÃO AJAX QUE PREENCHER A COMBO IMÓVEK, ASSIM QUE É SELECIONADO UM REGISTRO NA COMBO1.	
	   
}

//AQUI É A FUNÇÃO QUE PREENCHE A COMBO CIDADE.
//NÃO VOU ME APROFUNDAR NA EXPLICAÇÃO DESSA FUNÇÃO, JÁ QUE NOS OUTROS ARTIGOS QUE FIZ SOBRE AJAX, TEM A EXPLICAÇÃO SOBRE ELA.
//MAS REPAREM NO NOME DA DIV QUE DEMOS AQUI: divcombouf. É O MESMO NOME QUE DEMOS NO ID DAQUELA DIV QUE EXISTE ANTES DA COMBO2 NA PÁGINA.
function combocidade()
{
	var combouf = createXMLHTTP();
	combouf.open("post", "objestado.asp", true);
	combouf.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	combouf.onreadystatechange=function(){
	 if (combouf.readyState==4){// abaixo o texto do gerado no arquivo executa.asp e colocado no div
	  document.all.divcombouf.innerHTML = combouf.responseText;}}
	  combouf.send("codestado=" + frm1.codestado.value);

}

function comboimovel()
{
	var comboimovel = createXMLHTTP();
	comboimovel.open("post", "objimovel.asp", true);
	comboimovel.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	comboimovel.onreadystatechange=function(){
	 if (comboimovel.readyState==4){// abaixo o texto do gerado no arquivo executa.asp e colocado no div
	  document.all.divcomboimovel.innerHTML = comboimovel.responseText;}}
	  comboimovel.send("codestado=" + frm1.codestado.value + "&codcidade="+frm1.codcidade.value);
 
}

function dadoscidade()
{
	var arr = new String(frm1.cidade.value);
	arr = arr.split("|");
  
	frm1.codcidade.value = arr[3];

	comboimovel();
}

</script>

Arquivo objestado.asp

<%
'FAZ A CONEXÃO, SEM NENHUM SEGREDO.
Set conexao = Server.CreateObject("ADODB.connection")
DSNtest = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("dados_01.mdb")
conexao.Open DSNtest

'RESGATA O ID DO ESTADO SELECIONADO PARA FAZER A SELAÇÃO DA COMBO DOIS (CIDADE).
codestado = request("codestado")

'AQUI ESTÁ NOSSO SELECT.
sql = "SELECT ESTADOS.COD, ESTADOS.ESTADO, CIDADES.CIDADE, CIDADES.CODCIDADE, IMOVEIS.CODIMOVEL, IMOVEIS.IMOVEIS "
sql = sql & "FROM (ESTADOS INNER JOIN CIDADES ON ESTADOS.COD = CIDADES.CODESTADO) "
sql = sql & "INNER JOIN IMOVEIS ON CIDADES.CODCIDADE = IMOVEIS.CODCIDADE WHERE ESTADOS.COD = " & codestado & " order by cidades.cidade"
set rs = conexao.Execute(sql)
%>

<!-- AUI MONTAMOS NOSSA COMBO DE CIDADE, CONFORME O ESTADO SELECIONADO -->
<table cellpadding="0" cellspacing="0" border="0">
 <tr>
  <td>
	   <select style="width:200" id="cidade" name="cidade" onChange="dadoscidade(this.value);">
				<%
	  while not rs.EOF
	   
	   'if CStr(codestado) = Cstr(rs("COD")) then
	   ' selected = "selected"
	   'else
	   ' selected = ""
	   'end if
	  %>
				<option value="<%Response.Write(rs("COD") & "|" & rs("ESTADO") & "|" & rs("CIDADE") & "|" & rs("CODCIDADE") & "|" & rs("CODIMOVEL") & "|" & rs("IMOVEIS"))%>" <%'=selected%>><%=server.HTMLEncode(rs("CIDADE"))%></option>
				<%
		rs.MoveNext
	  wend
	   
	  rs.close
	  set rs = nothing   
	  %>
			  </select>
  </td>
 </tr>
</table>


Arquivo objimovel.asp

[code]<%
'CONEXÃO COM O BANCO.
Set conexao = Server.CreateObject("ADODB.connection")
DSNtest = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.Mappath("dados_01.mdb")
conexao.Open DSNtest

codestado = request("codestado")
codcidade = request("codcidade")

if len(codcidade) then
 filtro = " and CIDADES.codcidade = "&codcidade
else
 filtro = ""
end if

' CLÁSULA SQL.
sql = "SELECT ESTADOS.COD, ESTADOS.ESTADO, CIDADES.CIDADE, CIDADES.CODCIDADE, IMOVEIS.CODIMOVEL, IMOVEIS.IMOVEIS "
sql = sql & "FROM ESTADOS INNER JOIN (CIDADES INNER JOIN IMOVEIS "
sql = sql & "ON CIDADES.CODCIDADE = IMOVEIS.CODCIDADE) ON ESTADOS.COD = CIDADES.CODESTADO "
sql = sql & "WHERE ESTADOS.COD = " & codestado & filtro & " ORDER BY IMOVEIS.IMOVEIS"
'response.Write(sql)
'response.End()
set rs = conexao.Execute(sql)
%>

<table cellpadding="0" cellspacing="0" border="0">
 <tr>
  <td>
	   <select style="width:200" id="imovel" name="imovel">
				<%while not rs.EOF%>
				<option value="<%Response.Write(rs("COD") & "|" & rs("ESTADO") & "|" & rs("CIDADE") & "|" & rs("CODCIDADE") & "|" & rs("CODIMOVEL") & "|" & rs("IMOVEIS"))%>" <%'=selected%>><%=server.HTMLEncode(rs("IMOVEIS"))%></option>
				<%
		rs.MoveNext
	  wend
	   
	  rs.close
	  set rs = nothing   
	  %>
			  </select>
  </td>
 </tr>
</table>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro xanburzum, entao a duvida esta no seguinte, eu tinha criado uma outra pg para selecionar apenas o curso selecionando o combo e funciona perfeito, mas aew qnd eu coloco junto com o primeiro combo... nao funciona...=/ acho o problema esta na juncao dos 2. pq os dois separados funciona perfeitamente...

 

Vou dar uma olhada no seu aqui....qualquer duvida eu posto...

Abracao

 

Cara, copiei exatamente todos os codigos seu, e fiz o bando de dados...

Mas nao funcionou meu...

Alguma ideia?

Compartilhar este post


Link para o post
Compartilhar em outros sites

que erro esta ocorrendo?

 

nao tem como corrigir sem saber o erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

entao cara ele nao da erro de nao exibir o conteudo saca, o erro eh q nao muda o 3 combo sacou/

to postando os arquivos aqui, so abaixa e poem pra rodar...aew fica mais facil...

 

Brigadao desde ja...

Download

Compartilhar este post


Link para o post
Compartilhar em outros sites

gpassarelli, poste a mensagem de erro. Assim facilitará para todos poderem lhe ajudar.

 

Lembe-se que nosso tempo é curto para responder as dúvidas. Logo, baixar um script, configurar no servidor e testar, fica fora de cogitação. Pelo menos para mim.

 

Obs. Você pode disponibilizar o script on-line também para que façamos testes caso necessário

Compartilhar este post


Link para o post
Compartilhar em outros sites

é melhor fazer como o hargon sugeriu

 

poe online e poste os erros aqui

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.