Ir para conteúdo

Arquivado

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

TeixeiraRamos

Combobox banco de dados MySQL

Recommended Posts

Tenho um banco de dados com uma tabela chamada tb_registros. Essa tem uma das colunas chamada "nome_paises".

Desejo povoar uma Combobox com todos os registros do campo "nome_paises".

A ideia é escolher um pais da lista, clicar em botão para abrir uma página daquele pais da opção da Combobox.

Caso tenha algum modelo para estudar e aplicar, por favor, informe. Já fiz diversas buscas, mas estou com dificuldade para entender como aplicar para o meu caso. Obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha, eu vou tentar ser o mais claro possível exemplificado a lógica do processo e de forma enxuta apenas para facilitar o entendimento.

Para popular um combobox, basicamente efetuar um loop com os dados do banco, ex:

...faça a conexão com o banco, monte sua sql etc...
...e neste exemplo, trato o Recordset definido como "rs"...
...
<form method="post" action="endereco_de_destino">
<select name="myCombo">
<option>Selecione o País</option>
<%
'início do loop
Do While Not rs.EOF
%>
<option value="<% Response.Write(rs("nome_paises")) %>"><% Response.Write(rs("nome_paises")) %></option>
<%
rs.MoveNext
Loop
%>
</select>
<input type="submit" value="Enviar">
</form>
...

Simples assim. Ao submeter o formulário, será enviado para a página de destino o valor da opção escolhida no combobox (select), então na página de destino, recupere este valor assim:

myCountry = Request.Form("myCombo")

e trate como desejado...

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Public2004,
Muito obrigado pela sua atenção. Vou aplicar agora o que você sugeriu.

Dou um retorno tão logo termine.

Saúde, Paz e Sucesso sempre.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Public2004,

Ocorreu o seguinte:

Aqui abre a página, seleciono um país, mas vem todos da tb_siglas_paises. Fiz algo errado.

<head>
<!--#Include file="bdmysqlConexao.asp"-->
<%
	call abrecon
	
	strSql = " SELECT nome_pais FROM tb_siglas_paises ORDER BY nome_pais "
	set rs=Server.CreateObject("ADODB.RecordSet")
	rs.Open strSql, cn
%>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Paises e suas Histórias</title>
</head>

<body>
<form method="post" action="historia_pais.asp">
<select name="myCombo">
<option>Selecione o País</option>
<%
	'inicio do loop
	if not rs.eof then
	    do while not rs.eof
%>
<option value="<% Response.Write(rs("nome_pais")) %>"><% Response.Write(rs("nome_pais")) %></option>
<%
	rs.MoveNext
	Loop
end if
%>
</select>
<input type="submit" value="Enviar" />
</form>
</body>
</html>
<%
Call Fechacon
%>

Além do campo "nome_pais" desejo incluir outros na "historia_pais.asp".
Dessa forma achei que o pais selecionado poderia ficar em destaque e as outras colunas abaixo em uma tabela. Mas estou errando em alguma coisa.

"historia_pais.asp" está assim:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<!--#Include file="bdmysqlConexao.asp"-->

<%
	call abrecon
	
	strSql = " SELECT " 
	strSql = strSql & " tb_siglas_paises.nome_pais, " 
	strSql = strSql & " tb_continentes.nome_continente, "
	strSql = strSql & " tb_siglas_paises.zona_CQ, "
	strSql = strSql & " tb_siglas_paises.zona_ITU, "
	strSql = strSql & " tb_siglas_paises.codigo_bandeira_entidade "
	strSql = strSql & " FROM tb_continentes "
	strSql = strSql & " INNER JOIN tb_siglas_paises " 
	strSql = strSql & " ON tb_continentes.continente_id = tb_siglas_paises.nome_continente "
	strSql = strSql & " ORDER BY tb_siglas_paises.nome_pais "
        set rs=Server.CreateObject("ADODB.RecordSet")
	rs.Open strSql, cn
%>


<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>História do País</title>
</head>

<body>
<h1>Você pesquisou o país:</h1> <%myCountry = Request.Form("myCombo")%>

<table width="60%" border="1" cellpadding="1" cellspacing="0">
<thead>
<tr align="center" bgcolor="#999999">
    <th>País</th>
    <th>Contimente</th>
    <th>Zona CQ</th>
    <th>Zona ITU</th>
    <th>Bandeira</th>
</tr>
<%
  if not rs.eof then
      do while not rs.eof
%>
<tr>
    <td><%=rs("nome_pais")%></td>
    <td><%=rs("nome_continente")%></td>
    <td><%=rs("zona_CQ")%></td>
    <td><%=rs("zona_ITU")%></td>
    <td width="3%"><%=rs("codigo_bandeira_entidade")%></td>
</tr>
<%
  rs.MoveNext
  Loop
end if	
%>
</thead>
</table>

</body>
</html>
<%
Call Fechacon
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

A primeira página está funcionando Ok, certo? Está populando o combo corretamente. Na segunda página (historia_pais.asp), a primeira coisa que sugiro é recuperar o valor do combo e armazenar em uma variável, ex:

myCountry = Request.Form("myCombo")

e já trate isso caso tenha algum erro, tipo se tiver vazio apresenta uma msg de erro ou algum redirecionamento e evita carregar toda a página desnecessariamente, caso ok, prossiga e monte a sua sql utilizando essa variável como parâmetro, justamente para filtrar somente os dados relacionados a esta variável (país), pois pelo que vi, você não está fazendo uso dela em sua sql...

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Public2004,

Estou há horas tentando.

a primeira coisa que sugiro é recuperar o valor do combo e armazenar em uma variável, ex:

myCountry = Request.Form("myCombo"

Já coloquei em diversa partes da página "historia_pais.asp" e não deu nenhuma mensagem. Continua abrindo a página com todos os países.

evita carregar toda a página desnecessariamente

Só deixei na SQL o campo "nome_pais".

<%
	call abrecon
	
	strSql = " SELECT " 
	strSql = strSql & " tb_siglas_paises.nome_pais " 
	strSql = strSql & " FROM tb_siglas_paises "
	strSql = strSql & " ORDER BY tb_siglas_paises.nome_pais "
    set rs=Server.CreateObject("ADODB.RecordSet")
	rs.Open strSql, cn
%>

justamente para filtrar somente os dados relacionados a esta variável (país), pois pelo que vi, você não está fazendo uso dela em sua sql...

A minha SQL está na página "historia_pais|.asp" conforme acima.

<head>
<!--#Include file="bdmysqlConexao.asp"-->
<%
	call abrecon
	strSql = " SELECT " 
	strSql = strSql & " tb_siglas_paises.nome_pais " 
	strSql = strSql & " FROM tb_siglas_paises "
	strSql = strSql & " ORDER BY tb_siglas_paises.nome_pais "
        set rs=Server.CreateObject("ADODB.RecordSet")
	rs.Open strSql, cn
%>

Por favor, observe que, só tem a "nome_pais", mesmo assim depois de selecionar e clicar no botão "Enviar" abre a página "historia_pais" com todos os países e não só aquele que selecionei.

Resumindo, não estou fazendo corretamente o que você orientou por ignorância mesmo. Me esforcei, mas não estou conseguindo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como diz o esquartejador, "vamos por partes"... Pensa no resultado final e como você deve chegar a ele. Você tem o critério de busca (país selecionado no combo), então na página "historia_pais.asp", você deve tratar esse critério junto a sua sql para filtrar os resultados. Repare que recuperamos este valor e armazenamos eu uma variável (myCountry), mas em nenhum momento você utilizou ele na sua sql.

Pense que sua "string sql" seja uma instrução parecida com isso:

Vá até o banco de dados "A" e me traga os registros da tabela "B", coluna "C", onde os registros sejam iguais a "NOSSA VARIÁVEL", ordenando por "ordem alfabética ascendente ou descendente".

strSql = " SELECT "
strSql = strSql & " tb_siglas_paises.nome_pais "
strSql = strSql & " WHERE tb_siglas_paises.nome_pais = '"& myCountry &"' "
strSql = strSql & " ORDER BY tb_siglas_paises.nome_pais "

Repare agora que neste exemplo, inseri na sql a condição para buscar os registros que sejam iguais a nossa variável (myCountry).

...

Obs. Como teste apenas para ter certeza que o form está enviando a variável corretamente, na página "historia_pais.asp" bem no início da página insira:

<%
myCountry = Request.Form("myCombo")
Response.Write(myCountry)
Response.End
%>

Abra o navegador e veja o resultado, caso apareça o valor selecionado no combo, volte e deixe apenas a primeira linha.

Prossiga...

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A sql

<head>
<!--#Include file="bdmysqlConexao.asp"-->
<%
	call abrecon
	strSql = " SELECT "
	strSql = strSql & " tb_siglas_paises.nome_pais "
	strSql = strSql & " FROM tb_siglas_paises "
	strSql = strSql & " WHERE tb_siglas_paises.nome_pais = '"& myCountry &"' "
	strSql = strSql & " ORDER BY tb_siglas_paises.nome_pais "
	set rs=Server.CreateObject("ADODB.RecordSet")
	rs.Open strSql, cn
%>

Na página historia_pais.asp

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%
myCountry = Request.Form("myCombo")
Response.Write(myCountry)
Response.End
%>

<!--#Include file="bdmysqlConexao.asp"-->
<%
	call abrecon
	strSql = " SELECT " 
	strSql = strSql & " tb_siglas_paises.nome_pais " 
	strSql = strSql & " FROM tb_siglas_paises "
	strSql = strSql & " ORDER BY tb_siglas_paises.nome_pais "
        set rs=Server.CreateObject("ADODB.RecordSet")
	rs.Open strSql, cn
%>

Desculpe você pediu para deixar a primeira linha, mas não deu mensagem e a página "teste_paisessuahistorioa.asp" abre com a caixa combobox vazia.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Agora eu é q estou ficando confuso... já entrou outra página no meio... como disse, vamos por partes:

1 - Você tem uma página com o form que carrega o combo. Ela funciona? Popula o combo? Qual o nome dela? Qual página que ela vai chamar?

2 - A página que será chamada, você coloca o código que citei apenas para testar se está passando o valor, e pode ser na primeira linha da página, não tem problema, é só para teste. explicando:

myCountry = Request.Form("myCombo")

'Aqui você recupera o valor do combo e armazena na variável citada;

Response.Write(myCountry)

'Imprime na tela o valor da variável; Deve ser o mesmo valor que selecionou no combo na página anterior;
Response.End

'Encerra a execução dos códigos; Como é apenas para teste, não precisa executar o restante da página;

'Se aparecer na tela o valor do combo é porque está funcionado/passando o valor, se não, é pq tem algum problema no form/página do combo.

Faça o teste e retorne com as respostas pra gente prosseguir, se não vai ficar difícil ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só deu para ligar agora o computador caiu um temporal muito forte aqui no Rio de Janeiro.

Entendo a sua posição e fica difícil para você me explicar.

Mas, vou tentar explicar passo a passo. Desculpe por tudo.

  1. A página com o "form" é a página "teste_paisessuahistorioa.asp" que povoa a caixa "combobox". Inclusive agora está abrindo povoada, ou seja, considerando a SQL abaixo:
<head>
<!--#Include file="bdmysqlConexao.asp"-->
<%
	call abrecon
	strSql = " SELECT "
	strSql = strSql & " tb_siglas_paises.nome_pais "
	strSql = strSql & " FROM tb_siglas_paises "
	strSql = strSql & " ORDER BY tb_siglas_paises.nome_pais "
	set rs=Server.CreateObject("ADODB.RecordSet")
	rs.Open strSql, cn
%>

2. A página "historia_pais.asp" que é chamada pela página "teste_paisessuahistorioa.asp" agora abre, só com o nome do país que selecionei na caixa combobox, porém no local do código:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<%
myCountry = Request.Form("myCombo")
Response.Write(myCountry)
Response.End
%>

Conclui que:

a) Que a página com o "form", "teste_paisessuahistorioa.asp" abre com a caixa combobox povoada;

B) Essa mesma página se selecionar um país e clicar em "Enviar", abre a página "historia_pais.asp" com o nome do país na parte superior.

c) A parte do código abaixo é que não está funcionando (mas entendo que tem que ir por parte):

<!--#Include file="bdmysqlConexao.asp"-->
<%
	call abrecon
	strSql = " SELECT " 
	strSql = strSql & " tb_siglas_paises.nome_pais " 
	strSql = strSql & " FROM tb_siglas_paises "
	strSql = strSql & " WHERE tb_siglas_paises.nome_pais = '"& myCountry &"' " 
	strSql = strSql & " ORDER BY tb_siglas_paises.nome_pais "
    set rs=Server.CreateObject("ADODB.RecordSet")
	rs.Open strSql, cn
%>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>História do País</title>
</head>

<body>
<h1>Você pesquisou o país:</h1><%myCountry = Request.Form("myCombo")%>
<table width="60%" border="1" cellpadding="1" cellspacing="0">
<thead>
<tr align="center" bgcolor="#999999">
	<th>País</th>
</tr>
<%
	if not rs.eof then
	   do while not rs.eof
%>
<tr>
	<td><%=rs("nome_pais")%></td>
</tr>
<%
	rs.MoveNext
	Loop
end if	
%>
</thead>
</table>
</body>
</html>
<%
Call Fechacon
%>

A rs indicada na tabela não teria que aparecer o nome do país selecionado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, já é um avanço, form/combobox funcionando. Vamos concentrar agora na página "historia_pais.asp". Como já fez o teste e está ok, deixe agora apenas a linha que recupera o valor do combo:

myCountry = Request.Form("myCombo")

E altere a sua SQL para:

strSql = " SELECT "
strSql = strSql & " nome_pais "
strSql = strSql & " FROM tb_siglas_paises "
strSql = strSql & " WHERE nome_pais = '"& myCountry &"' "
strSql = strSql & " ORDER BY nome_pais "

Você provavelmente fará um relacionamento entre tabelas, mas isso fica pra depois, por enquanto testa isso e dá um feedback.

Ah e lá no seu H1, faça apenas assim:

<h1>Você pesquisou o país:<% Response.Write(myCountry) %></h1>

Att.

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK. Você é formidável!

Funcionou! Só abriu, dentro da página "historia_pais.asp" o país que selecionei:

<%
	if not rs.eof then
	   do while not rs.eof
%>
<tr>
	<td><%=rs("nome_pais")%></td>
</tr>
<%
	rs.MoveNext
	Loop
end if	
%>

Aqui também mostrou o pais.

<h1>Você pesquisou o país:  <%Response.Write(myCountry)%></h1>

Depois só vai ficar o país em: "Você pesquisou o país:..."

Compartilhar este post


Link para o post
Compartilhar em outros sites

Public2004,

O código pode ficar como estar e posso ir colocando outros os campos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

OK. Então muito obrigado por tudo, desculpe.

Vou continuar.

Desejo muito sucesso na sua vida.

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.