Jump to content


Photo

Combobox Dinamico ! Php + Javascript


  • Faça o login para participar
20 replies to this topic

#1 JONNY_RC13

JONNY_RC13

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Masculino
  • Localidade:Rio Claro/SP

Posted 28/08/2008, 23:00

Boa Noite Galera!

Estou tendo problemas para criar um combo dinamico e gostaria de saber se aguem pode me dar uma LUZ! :wacko: A idéia é a seguinte! Estou querendo fazer um combobox onde os seus valores vem de uma consulta simples do banco MYSql e ao selecionar (onChange) um item do combo o valor selecionado é passado para uma variavel em PHP ($variavel) onde está variavel será utilizada para efetuar uma outra consulta no banco MYSQL para então geral um novo combo para a seleção de outra opção ! o problema é que a variavel só estáguardando a ultima consulta do banco e não a selecionada o script que estou utilizando é este fiz ai um teste porque não tenho nen noção de como fazer isto! :lol:

<script LANGUAGE="JavaScript">

function tiposol(item) {
   if (item.value != ''){
<?$teste=$tiposol;?>
<?echo $teste;?>
}
}

se alguem souber como fazer issu funcionar muto obrigado msm !! aguardo respostas :assobio:

</SCRIPT>

#2 JONNY_RC13

JONNY_RC13

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Masculino
  • Localidade:Rio Claro/SP

Posted 01/09/2008, 21:55

Acho que niguem entendeu nada do que eu quis dizer né !!!! :huh: vou tentar explicar melhor, como é que eu faço para que ao clicar em um item no combobox o valor em que eu escolhi passe para uma variavél? para que eu possa usar essa variavel para fazer um select na mesma pagina sem que eu clique em um botão? (ok2) ficou mais facil de entender? bom espero que sim!!! por favor moderadores deem uma luz ae !!! :shit:

#3 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 02/09/2008, 09:38

Não vai ser com PHP que você vai fazer isso, é com javascript.

onchange="location.href='suaPagina.php?suaVariavel='+this.value"

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#4 JONNY_RC13

JONNY_RC13

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Masculino
  • Localidade:Rio Claro/SP

Posted 03/09/2008, 21:56

hummm ! tah ! :ponder: é.. vc poderia assim medar um exemplo pratico para a utilização desse código javascript com o PHP ? ;-)

oque eu estava tentando erá + ou - assim resumidamente! :
<td id="medpic" style="display:none">
<select name="medsolpic" id="medsolpic" onChange="mostra (this)">
<option value=1>---</option>
<?

$conectsol1 = "select medsol1,medsol2,medsol3 from soldas";
$tabelasol1 = mysql_query($conectsol1, $conn);
$linhassol1 = mysql_num_rows($tabelasol1);
$vrsol1 = -1;

if($linhassol1==0)
{
 echo "<script>alert('Nenhum registro foi encontrado');</script>";
for($xs1=0; $xs1<$linhassol1; $xs1++)
{
$descrsol4 = mysql_result($tabelasol1,$xs1,'medsol3');
if ($vrsol1==$descrsol4 or $descrsol4=='0' or $descrsol4=='' or $descrsol4==$contsol1){

}
else{
$contsol1=$descrsol4;
?>
  <option <? echo"value=\"".$contsol1."\" "; ?>><?=$contsol1?></option>
 <?php
}

echo $descrsol4;
$vrsol1 = $descrsol4;
}
echo "</select>".'&nbsp;<span class="style13">mm</span>';
?>&nbsp;&nbsp;</td>
}

bom eu fiz um teste mas não deu muito certo tipo:

nome da pagna php: prodv.php
nome da variavel que irá receber o valor ao selecionar algum item no combo: $testevar

<select name="medsol" id="medsol" onchange="location.href='prodv.php?$testevar='+this.value">
<option value=1>---</option>
...

<?echo $testevar;?>

mas na hora em que eu mudo a seleção do combo a pagna da um refresh e o meu combo que é oculto (style="display:none") tb desaparece e a variavel não recebe nenhum valor!

oque será que estou fazendo errado? :huh:

ps: essa variavel que receberá o valor servira para uma consulta na mesma pagina para ser criado um novo combobox com valores direto do banco mysql!

#5 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 04/09/2008, 07:40

A suaVariavel não é a variável php, é a que vai ser enviar pela url.
Seria assim:
<select name="medsol" id="medsol" onchange="location.href='prodv.php?testevar='+this.value">
<option value=1>---</option>
...

<?echo $_GET['testevar'];?>

Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#6 JONNY_RC13

JONNY_RC13

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Masculino
  • Localidade:Rio Claro/SP

Posted 05/09/2008, 00:03

É dessa forma deu certo !!! :lol:
Mas não haveria um jeito de obter o valor do combo sem o refresh da pagna? :huh:
pois ao dar o refresh o combo perde sua seleção ! :wacko:

#7 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 05/09/2008, 11:11

Ter, tem. Fazendo uma requisição com ajax você consegue fazer isso sem atualizar.

Para não perder o que já foi selecionado, é só fazer umas condicionais para ver qual a opção selecionada.
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#8 JONNY_RC13

JONNY_RC13

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Masculino
  • Localidade:Rio Claro/SP

Posted 05/09/2008, 20:31

hummm !!! :ponder: tipo naum manjo nada de ajax vc tem um exeplo pratico de uma uma requisição com ajax ? (ok2)e eu posso utiliza-lo juntamente com o php ? :blink: ???

Peguei esse exemplo mais ele dá erro ! :shit:

-
linha: 14
Caractere: 1
Erro: objeto esperado
-
sabe me dizer porque!?
:-)

<html>
   <head>
	  <title>PHP + AJAX</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   </head>

   <body>
	  <h1>AJAX + PHP</h1>
  Recuperando dados sem refresh, usando AJAX.
	  <br><br>

  <form>
	 Estado:
	 <select name="estados" id="estados" onChange="catchDados(this.value);">
		<option value="">Escolha...</option>
	<?php
					  /*
						* Carregando os estados
					  */
					  $conexao = mysql_connect("localhost", "root", "") OR DIE("Erro na conexão.");
					  $banco = mysql_select_db("ajax");
					  $resultado = mysql_query( sprintf("SELECT id, nome FROM estados ORDER BY nome ASC") );
					  while ($record = mysql_fetch_array($resultado, MYSQL_ASSOC)) {
						printf("<option value=\"%s\">%s</option>\n", $record['id'], $record['nome']);
					  }
					?>
		</select>
		 <br>
		Cidade:
		<select name="cidades">
			<option id="" value="">Escolha o estado...</option>
		</select>
	 </form>
   </body>
</html>


#9 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 05/09/2008, 21:57

Provavelmente esse erro é porque a função catchDados() não existe.

Não tenho nenhum exemplo prático disso, mas aqui no fórum temos alguns tópicos onde você pode começar os estudos.
- O Verdadeiro Poder Do Ajax, Boa leitura antes de sair colocando AJAX em sites
- Pra Quem Ainda Não Entende Ajax., Veja se isso ajuda a esclarecer.
- Xmlhttprequest, Alterando dados, sem refresh
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#10 JONNY_RC13

JONNY_RC13

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Masculino
  • Localidade:Rio Claro/SP

Posted 05/09/2008, 22:20

intaum ele até existe mais onde devo colocalo?


// Função que recupera os dados da pesquisafunction catchDados(valor) {
function catchDados(valor) {
  // Instancia o objeto
  ajax = new XMLHttpRequest();
  // Recupera o combo-box ESTADOS
  estados = document.getElementById('estados');
  // Recupera o combo-box CIDADES
  cidades = document.getElementById('cidades');
  if (ajax) {
	// Limpa o combo-box CIDADES
	cidades.options.length = 1;

	// Faz a requisição
	ajax.open("POST", "consulta.php", true);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	// Vamos processar os estados da requisição
	ajax.onreadystatechange = function() {
	  // Carregando...
	  if (ajax.readyState == 1) {
		cidades.innerHTML = "Carregando...";
	  }
	  // Ao receber a resposta
	  if (ajax.readyState == 4 ) {
		if (ajax.responseXML) {
		  montaCombo(ajax.responseXML);
		} else {
		  cidades.innerHTML = "Selecione o estado.";
		}
	  }
	}
	// Envia os parâmetros
	var params = "estado="+valor;
	ajax.send(params);
}


function montaCombo(XML){
  // Array com os dados das cidades
  var CIDADES = XML.getElementsByTagName("cidade");
  // Recupera o combo-box CIDADES
  cidades = document.getElementById('cidades');

  // Verifica se a consulta retornou alguma coisa
  if (CIDADES.length > 0) {
	// Lemos todo o arquivo XML
	for(var i = 0; i < XML.length; i++) {
	  item = XML[i];
	  ID = item.getElementsByTagName("id")[0].firstChild.nodeValue;
	  NOME = item.getElementsByTagName("nome")[0].firstChild.nodeValue;

	  cidades.innerHTML = "Escolha...";
	  // Aqui e DOM, assunto para um outro artigo
	  // Cria os dados dentro do combo
	  opt = document.createElement("option");
	  opt.value = id;
	  opt.text  = nome;
	  cidades.options.add(opt);
	}
  } else {
	// caso o XML retorne em branco
	cidades.innerHTML = "Escolha o estado.";
  }
}


#11 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 05/09/2008, 22:24

Aí na mesma página. Entre as tags <script type='text/javascript'> e </script>.
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#12 JONNY_RC13

JONNY_RC13

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Masculino
  • Localidade:Rio Claro/SP

Posted 05/09/2008, 23:08

Putz !!!! fun fo !! :lol:

<html>
   <head>
	  <title>PHP + AJAX</title>
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">


 <script type='text/javascript'>

 // Função que recupera os dados da pesquisafunction catchDados(valor)
 
function catchDados(valor) {
  // Instancia o objeto
  ajax = new XMLHttpRequest();
  
  // Recupera o combo-box ESTADOS
  estados = document.getElementById('estados');
  
  // Recupera o combo-box CIDADES
  cidades = document.getElementById('cidades');
  if (ajax) {
	// Limpa o combo-box CIDADES
	cidades.options.length = 1;

	// Faz a requisição
	ajax.open("POST", "consulta.php", true);
	ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

	// Vamos processar os estados da requisição
	ajax.onreadystatechange = function() {
	  // Carregando...
	  if (ajax.readyState == 1) {
		cidades.innerHTML = "Carregando...";
	  }
	  // Ao receber a resposta
	  if (ajax.readyState == 4 ) {
		if (ajax.responseXML) {
		  montaCombo(ajax.responseXML);
		} else {
		  cidades.innerHTML = "Selecione o estado.";
		}
	  }
	}
	// Envia os parâmetros
	var params = "estado="+valor;
	ajax.send(params);
}


function montaCombo(XML){
  // Array com os dados das cidades
  var CIDADES = XML.getElementsByTagName("cidade");
  // Recupera o combo-box CIDADES
  cidades = document.getElementById('cidades');

  // Verifica se a consulta retornou alguma coisa
  if (CIDADES.length > 0) {
	// Lemos todo o arquivo XML
	for(var i = 0; i < XML.length; i++) {
	  item = XML[i];
	  ID = item.getElementsByTagName("id")[0].firstChild.nodeValue;
	  NOME = item.getElementsByTagName("nome")[0].firstChild.nodeValue;

	  cidades.innerHTML = "Escolha...";
	  // Aqui e DOM, assunto para um outro artigo
	  // Cria os dados dentro do combo
	  opt = document.createElement("option");
	  opt.value = id;
	  opt.text  = nome;
	  cidades.options.add(opt);
	}
  } else {
	// caso o XML retorne em branco
	cidades.innerHTML = "Escolha o estado.";
  }
}
  }
</script>

 </head>

   <body>
	  <h1>AJAX + PHP</h1>
  Recuperando dados sem refresh, usando AJAX.
	  <br><br>

  <form>
	 Estado:
	 <select name="estados" id="estados" onChange="catchDados(this.value);">
		<option value="">Escolha...</option>
	<?php
					  /*
						* Carregando os estados
					  */
					  $conexao = mysql_connect("localhost", "root", "") OR DIE("Erro na conexão.");
					  $banco = mysql_select_db("ajax");
					  $resultado = mysql_query( sprintf("SELECT id, nome FROM estados ORDER BY nome ASC") );
					  while ($record = mysql_fetch_array($resultado, MYSQL_ASSOC)) {
						printf("<option value=\"%s\">%s</option>\n", $record['id'], $record['nome']);
					  }
					?>
		</select>
		 <br>
		Cidade:
		<select name="cidades">
			<option id="" value="">Escolha o estado...</option>
		</select>
	 </form>
   </body>
</html>


O Problema é que agora ele não está retornando nada ! no segundo combo mas não dá erro deve ser erro de consulta bo banco !


da uma olhada !


<?php
  /*
	* Arquivo consulta.php
  */
  // Abre uma conexão com o banco
  $conexao = mysql_connect("localhost", "root", "") OR DIE("Erro na conexão.");
  
  // Seleciona o banco a ser utilizado
  $banco = mysql_select_db("ajax") OR DIE("Erro ao selecionar o banco.");
  
  // Realiza a consulta
  $resultado = mysql_query( sprintf("SELECT id, nome FROM cidades WHERE estado=%d", $_REQUEST["estados"]) );

  // Gera o XML com o resultado desta pesquisa
  $XML = sprintf("<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n");
  while ( $record = mysql_fetch_array($resultado, MYSQL_ASSOC) ) {
	$XML .= sprintf("<cidade>\n");
	$XML .= sprintf("<id>%s</id>\n", $record['id']);
	$XML .= sprintf("<nome>%s</nome>\n", $record['nome']);
  }

  // HEADER do arquivo XML
  Header("Content-type: application/xml; charset=iso-8859-1");
  // Mostra os dados
  printf("<cidades>\n%s</cidades>\n", $XML);
?>


Ve algu de errado ? :huh: ???

Edição feita por: JONNY_RC13, 05/09/2008, 23:06.


#13 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 05/09/2008, 23:23

Primeiro leia o tópico que eu postei "Pra Quem Ainda Não Entende Ajax., Veja se isso ajuda a esclarecer", veja como instanciar o objeto XMLHttpRequest.

O php é um arquivo php normal, você pode testar trocando o $_REQUEST["estados"] por um estado.
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador

#14 JONNY_RC13

JONNY_RC13

    Novato no fórum

  • Usuários
  • 8 posts
  • Sexo:Masculino
  • Localidade:Rio Claro/SP

Posted 07/09/2008, 01:18

Bom le eu li! (y) , mais ainda não consegui fazer o código funcionar se voce puder da uma olhadinha ai de leve eu agradeço! blz! brigadaum !! :blush: ;-)

Eai Alex não encontrou nada de errado ? =) putz jah tentei de tudo aki mais nada acontece !! :-) eai galera alguem tem uma idéia do que ha de errado !??? :blink:

#15 Alex Hiroshi

Alex Hiroshi

    Super Veterano

  • Ex-Admins
  • 4923 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 09/09/2008, 06:55

Já verificou se o php está certo e retornando valores?
Fórum WMO - Equipe de Desenvolvimento / Banco de Dados - Ex-Administrador




1 user(s) are reading this topic

0 membro(s), 1 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq