Manipulando ComboBox com XMLHttpRequest
Agora vejamos os outros 2 scripts:
- index.php (script com o select categorias, fixo, sem atualizações)
Esse script apenas monta o combobox categorias buscando os dados da tabela categorias do banco de dados. Antes de ver o último script, note que a função Atualiza() é chamada ao ser carregada a página:
E no evento OnChange do combo categorias, passando o valor selecionado por parâmetro:
A função Atualiza() do script script.js irá "jogar" esse valor na URL, portanto, o script PHP poderá fazer uso desse valor recuperando-a por GET, mas sem REFRESH.
Perceba tambem o elemento <div>:
A parte realmente dinâmica, da atualização do segundo combo, presente no script atualiza.php será incluído nesse layer
- atualiza.php (script com a parte dinâmica da atualização do combo subcategorias)
Esse script apenas tem o código php que cria o preenche o segundo combo com os dados buscados no bd, de acordo com a variável recebida por GET que corresponde ao valor selecionado no primeiro combo.
Agora é só testar!
Bem, esse é meu primeiro artigo. Se houver interesse eu faço outro artigo explicando o funcionamento de um script de usuários on-line com XMLHttpRequest. ;)
- index.php (script com o select categorias, fixo, sem atualizações)
<HTML>
<HEAD>
<script language="javascript" type="text/javascript" src="script.js"></script>
</HEAD>
<BODY OnLoad="javascript:Atualiza();">
<form>
<select name="categoria" onChange="javascript:Atualiza(this.value);">
<option>---Escolha uma opção---</option>";
<?php
$conexao = mysql_connect('xmlhttprequest','','');
if (!$conexao) {
die("Configuracao de Banco de Dados Errada!");
}
// monta dados do combo 1
$sql = "SELECT DISTINCT nome_categoria,id_categoria FROM categoria";
$resultado = mysql_query($sql, $conexao) or die("Problema na Consulta");
while ($linha = mysql_fetch_array($resultado)) {
echo "<option value=\"" . $linha['id_categoria'] . "\">" . $linha['nome_categoria'] . "</option>";
}
?>
</select>
</form>
<div id="atualiza"></div>
</BODY>
</HTML>
Esse script apenas monta o combobox categorias buscando os dados da tabela categorias do banco de dados. Antes de ver o último script, note que a função Atualiza() é chamada ao ser carregada a página:
<BODY OnLoad="javascript:Atualiza();">
E no evento OnChange do combo categorias, passando o valor selecionado por parâmetro:
<select name="categoria" onChange="javascript:Atualiza(this.value);">
A função Atualiza() do script script.js irá "jogar" esse valor na URL, portanto, o script PHP poderá fazer uso desse valor recuperando-a por GET, mas sem REFRESH.
Perceba tambem o elemento <div>:
<div id="atualiza"></div>
A parte realmente dinâmica, da atualização do segundo combo, presente no script atualiza.php será incluído nesse layer
- atualiza.php (script com a parte dinâmica da atualização do combo subcategorias)
<?php
echo "<select name=\"subcategoria\">";
echo "<option>---Escolha uma opção---</option>";
$conexao = mysql_connect('xmlhttprequest','','');
if (!$conexao) {
die("Configuracao de Banco de Dados Errada!");
}
// busca dados do combo 2
$sql = "SELECT
DISTINCT subcategoria.nome_subcategoria
FROM
subcategoria
INNER JOIN
categoria
ON
categoria.id_categoria = subcategoria.id_categoria
WHERE
subcategoria.id_categoria = '".$_GET['categoria']."'";
$resultado = mysql_query($sql) or die ("Problema na Consulta");
while ($linha = mysql_fetch_array($resultado)) {
echo "<option>".$linha['nome_subcategoria']."</option>";
}
echo "</select>";
?>
Esse script apenas tem o código php que cria o preenche o segundo combo com os dados buscados no bd, de acordo com a variável recebida por GET que corresponde ao valor selecionado no primeiro combo.
Agora é só testar!
Bem, esse é meu primeiro artigo. Se houver interesse eu faço outro artigo explicando o funcionamento de um script de usuários on-line com XMLHttpRequest. ;)
Esclarecendo, já consegui colocar para funcionar aqui no meu caso os códigos.
Valeu pela força.
Abraços a todos.
Líbene Fernandes
Valeu pela força.
Abraços a todos.
Líbene Fernandes
20/04/2006 8:01am
(~19 anos atrás)
Antes de mais nada quero parabenizá-la Vanessa, ótimo código, ficou bem claro, e é uma idéia bem legal. Parabéns.
E uma pergunta, vocês testaram o código mysql com 3 combos, ele tá ok?
Pois não consegui muita coisa, estou refazendo aqui o código, mas de repente se alguém tiver conseguido numa boa, já é um tempo que não será perdido.
Abraços a todos.
Líbene Fernandes
E uma pergunta, vocês testaram o código mysql com 3 combos, ele tá ok?
Pois não consegui muita coisa, estou refazendo aqui o código, mas de repente se alguém tiver conseguido numa boa, já é um tempo que não será perdido.
Abraços a todos.
Líbene Fernandes
05/04/2006 5:18am
(~19 anos atrás)
Quando eu testo a pagina isoladamente, os combos aparecem e tudo funciona norma...
mas quando eu jogo dentro do centro da minha página, logo na entrada o combo cidades nem entra..pq sera?
mas quando eu jogo dentro do centro da minha página, logo na entrada o combo cidades nem entra..pq sera?
20/01/2006 5:39am
(~19 anos atrás)
O ruim de usar utf8_encode, é que as paginas ficam despadronizadas...
se eu tiver todas as páginas prontas, vou ter que colocar utf8_encode em toda página.
A mesma coisa acontece se eu usar o Ajax ou Cajax?
Faloww
se eu tiver todas as páginas prontas, vou ter que colocar utf8_encode em toda página.
A mesma coisa acontece se eu usar o Ajax ou Cajax?
Faloww
17/01/2006 4:40am
(~19 anos atrás)
Exceto pela linha req.send(null);
há uma diferença entre passar null e (), certo ?
há uma diferença entre passar null e (), certo ?
13/01/2006 5:32am
(~19 anos atrás)
talvez o algoritmo possa ser melhorado dentro da função loadXMLDoc():
as três linhas:
req.onreadystatechange = processReqChange;
req.open("GET", url+'?categoria='+valor, true);
req.send(null);
podem ser retiradas do if else e colocadas logo abaixo.
bom artigo.
espero ter ajudado
as três linhas:
req.onreadystatechange = processReqChange;
req.open("GET", url+'?categoria='+valor, true);
req.send(null);
podem ser retiradas do if else e colocadas logo abaixo.
bom artigo.
espero ter ajudado
13/01/2006 5:24am
(~19 anos atrás)
Parabens para Limeira pelo o que produziu .. ah sei la nao sei falar portugues.
11/11/2005 7:30pm
(~19 anos atrás)
Achei bastante interessante o seu artigo.
Continue assim, sempre publicando novos artigos.
Continue assim, sempre publicando novos artigos.
11/11/2005 11:57am
(~19 anos atrás)
pode me auxiliar? da erro no intenet explorer, ate tentei corrigfi os erros, mas nao tive sucesso :(
agradecido abraços