Ir para conteúdo
Fórum Script Brasil
  • 0

Duvida No Form::select


--Ludson--

Pergunta

Galera.. ói eu di novo..

otra duvida..

eu tenho no form 2 campos do tipo Select:

Categoria e SubCategoria.

eu gostaria de saber como fazer para que os valores da subcategoria só apareçam quando selecionar algum valor no select categoria, mas sem ter que ficar atualizando a página.

tipo... no subcategoria.. ("SELECT * FROM SubCategoria WHERE CodCategoria = "SELECT("CATEGORIA")");

eu sei que esse select está completamente errado, mais é só pra vocês entenderem

ehehe

vlew

:lol:

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

eu sei que é em JavaScript, mas tem que ter PHP no meio..

eu achei um script que funcionou em ASP,

mas preciso dele em PHP, e não estou conseguindo alterar o código.!

alguém pode me ajudar?

<%

Function EscreveFuncaoJavaScript ( Conexao )

'O parametro conexao receberá uma conexao aberta!

'Em funcoes, geralmente não criamos objetos do tipo conexões!

'Opte por sempre deixar sua função o mais compatível possível com qualquer projeto!

'Primeiro vamos escrever o cabecalho de qualquer script javascript!

Response.Write "<script language=""JavaScript"">" & vbcrlf

Response.Write "function atualizacarros (form) {" & vbcrlf

'Essa função JavaScript recebe o form em que estão os campos a serem atualizados!

'Veja na chamada da função no método OnChange em que se passa o this.form!

'Vamos criar um switch para ele verificar qual opção foi selecionada!!

Response.Write "switch (form.marcas.options[form.marcas.selectedIndex].value) {" & vbcrlf

'Agora entramos com o banco de dados! Temos que jogar aqui todas as opções de carro!

SqlMarcas = "SELECT * FROM Marcas ORDER BY Marca"

Set rsMarcas = Conexao.Execute ( SqlMarcas )

While NOT rsMarcas.EOF

'Caso tenha sido essa marca selecionada...

Response.Write "case '" & rsMarcas("ID") & "':" & vbcrlf

'Apagamos tudo o que tem na caixa dos carros!

Response.Write "form.carros.length=0;" & vbcrlf

'Abrimos todos os carros relativos a essa marca!

SqlCarros = "SELECT ID, Carro FROM Carros WHERE Marca = " & rsMarcas("ID")

Set rsCarros = Conexao.Execute ( SqlCarros )

'Fazemos um loop por todos os carros, criando uma nova opção no SELECT!

i = 0

While NOT rsCarros.EoF

Response.Write "form.carros.options[" & i & "] = new Option('" & rsCarros("carro") & "','" & rsCarros("ID") & "');" & vbcrlf

i=i+1

rsCarros.MoveNext

Wend

'Imprimos um break! (Verifique tutoriais de JavaScript, se tiverem alguma dúvida da sua utilização!

Response.Write "break;" & vbcrlf

'Próxima marca!

rsMarcas.MoveNext

Wend

'Fecha chaves do switch e da função! E fecha o script!

Response.Write "}}" & vbcrlf & "</script>" & vbcrlf

End Function

%>

<%

'Criando conexão com o banco de dados!

Set Conexao = Server.CreateObject("ADODB.Connection")

Conexao.Open "Provider=Microsoft.Jet.OleDB.4.0;Data Source=" & Server.MapPath("carros.mdb")

'Abrindo a tabela MARCAS!

Sql = "SELECT * FROM Marcas ORDER BY Marca"

Set Rs = Conexao.Execute ( Sql )

%>

<html>

<head><% EscreveFuncaoJavaScript ( Conexao ) %></head>

<body>

<form name="iMasters">

Marcas:<br>

<select name="marcas" onChange="java script:atualizacarros(this.form);">

<% While NOT Rs.EoF %>

<option value="<% = Rs("id") %>"><% = Rs("Marca") %></option>

<% Rs.MoveNext %>

<% Wend %>

</select>

<br><br>Carros:<br>

<select name="carros"></select>

</form>

</body>

</html>

<%

'Fechando os objetos!

Rs.Close

Set Rs = Nothing

Conexao.Close

Set Conexao = Nothing

%>

se alguém puder me dar uma mãozinha ai na alteração...

agradeçeria.

Link para o comentário
Compartilhar em outros sites

  • 0
Guest UpTroni

Tenta AJAX ASSIM:

index.php

<script language="javascript" src="ajax.js" type="text/javascript"></script>
<table width="100%" border="0" cellspacing="1" cellpadding="5" bgcolor="#CCCCCC" height="123">

  <? if(isset($_POST["acao"])){ ?>
  <tr>
    <tudo height="44" bgcolor="#EFEFEF">Cidade/Estado: <b><?=$_POST["cidade"]."/".$_POST["uf"];?></b></tudo>
  </tr>
  <? } ?>
  <tr> 
    <tudo bgcolor="#EFEFEF">Escolha sua cidade: 
      <form name="form1">
        <table width="100%" border="0" cellspacing="6" cellpadding="0">
          <tr> 
            <tudo width="17%"> 
              <select name="uf" OnChange="atualiza(this.value);">
                <option value="#">escolha um estado</option>
                <?
          include "../control/db_adir.php";
          $result = mysql_query("SELECT * FROM opt_estado ORDER BY 'nome'");
          while($row = mysql_fetch_array($result)){
          echo "<option value=\"$row[uf]\">$row[nome]</option>";
          }
          ?>
              </select>
            </tudo>
            <tudo width="23%"> 
              <div id="atualiza"> 
                <select name="cidade">
                  <option id="opcoes" value="#">Selecione um estado primeiro</option>
                </select>
              </div>
            </tudo>
            <tudo width="60%"> 
              <input type="submit" name="acao" value="Enviar" onClick="qual_cidade();">
            </tudo>
          </tr>
        </table>
      </form>
    </tudo>
  </tr>

</table>
ajax.js

var req;
function loadXMLDoc(url){
 req = null;

if (window.XMLHttpRequest) {
 req = new XMLHttpRequest();
 req.onreadystatechange = processReqChange;
 req.open("GET", url, true); 
 req.send(null);

} else if (window.ActiveXObject) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP.4.0");
} catch(e) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP.3.0");
} catch(e) {
try {
req = new ActiveXObject("Msxml2.XMLHTTP");
} catch(e) {
try {
req = new ActiveXObject("Microsoft.XMLHTTP");
} catch(e) {
req = false;
}
}
}
}
if (req) {
 req.open("GET", url, true);
 req.onreadystatechange = processReqChange;
 req.send();
}
}
}


function processReqChange(){
opcao = document.getElementById("opcoes");
if (req.readyState == 1) { opcao.innerHTML = "Carregando ..."; }

if (req.readyState == 4) {
if (req.status == 200) {

processaXML(req.responseXML);

} else {
alert("Houve um problema ao obter os dados:\n" + req.statusText);
}
}
}



function atualiza(valor){
loadXMLDoc("cidades.php?ID="+valor);
}

function processaXML(obj) //função para interpretar xml
{
var tamanhoXML = obj.getElementsByTagName("cidade");

for (i=0; i <= tamanhoXML.length; i++)
    {
    var busca = tamanhoXML[i];
    //busca tag id / nome
    var data1 = busca.getElementsByTagName('nome')(0);
    var data2 = busca.getElementsByTagName('id')(0);
    var nome = data1.firstChild.data;
    var id   = data2.firstChild.data;
    opcao.innerHTML = "Escolha Sua Cidade";
    //cria option
    var novo = document.createElement("option");
    novo.setAttribute("id", "opcoes");
    novo.value = id;
    novo.text  = nome;
    
    document.form1.cidade.options.add(novo);
    }

}
enfim o arquivo que monta as cidades (formato XML)
<?
Header("Content-type: application/xml; charset=iso-8859-1");

include "conexao_mysql.php";

$uf = $_GET["ID"];
$result = mysql_query("SELECT * FROM opt_cidades WHERE uf='$uf' ORDER BY nome") or die("ERRO");


//XML
$xml = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
$xml .= "<cidades>\n";


while($row = mysql_fetch_array($result))
{
$xml .= "<cidade>\n";
$xml .= "<id>". $row["id"] . "</id>\n";
$xml .= "<nome>". $row["nome"] . "</nome>\n";
$xml .= "</cidade>\n";
}
$xml .= "</cidades>";

echo $xml;

?>

veja um exemplo aqui

http://200.232.186.145:91/site/select/ (obs meu ip é dimanico, talvez você não consega acessar)

Link para o comentário
Compartilhar em outros sites

  • 0

Consegui em um artigo publicado por por Vanessa Schissato - Manipulando ComboBox com XMLHttpRequest

e funcionou muito bem.....sem refresh na página.

__________________________________________________________________________

Primeiro, o script javascript (script.js):

var req;

function loadXMLDoc(url,valor)

{

req = null;

// Procura por um objeto nativo (Mozilla/Safari)

if (window.XMLHttpRequest) {

req = new XMLHttpRequest();

req.onreadystatechange = processReqChange;

req.open("GET", url+'?categoria='+valor, true);

req.send(null);

// Procura por uma versao ActiveX (IE)

} else if (window.ActiveXObject) {

req = new ActiveXObject("Microsoft.XMLHTTP");

if (req) {

req.onreadystatechange = processReqChange;

req.open("GET", url+'?categoria='+valor, true);

req.send();

}

}

}

function processReqChange()

{

// apenas quando o estado for "completado"

if (req.readyState == 4) {

// apenas se o servidor retornar "OK"

if (req.status == 200) {

// procura pela div id="atualiza" e insere o conteudo

// retornado nela, como texto HTML

document.getElementById('atualiza').innerHTML = req.responseText;

} else {

alert("Houve um problema ao obter os dados:\n" + req.statusText);

}

}

}

function Atualiza(valor)

{

loadXMLDoc("atualiza.php",valor);

}

__________________________________________________________________________

Banco de dados:

Banco de dados MySQL:

CREATE TABLE categoria (

id_categoria int(6) not null auto_increment,

nome_categoria varchar(30),

PRIMARY KEY (id_categoria)

);

CREATE TABLE subcategoria (

id_subcategoria int(6) not null auto_increment,

id_categoria int(6),

nome_subcategoria varchar(30),

PRIMARY KEY (id_subcategoria)

);

__________________________________________________________________________

Popule as tabelas para teste se quiser:

INSERT INTO categoria (nome_categoria) VALUES ('Matematica');

INSERT INTO categoria (nome_categoria) VALUES ('Portugues');

INSERT INTO categoria (nome_categoria) VALUES ('Quimica');

INSERT INTO subcategoria (id_categoria,nome_subcategoria) VALUES (1,'Algebra');

INSERT INTO subcategoria (id_categoria,nome_subcategoria) VALUES (1,'Geometria Espacial');

INSERT INTO subcategoria (id_categoria,nome_subcategoria) VALUES (1,'Trigonometria');

INSERT INTO subcategoria (id_categoria,nome_subcategoria) VALUES (2,'Gramatica');

_________________________________________________________________________

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="java script:Atualiza();">

<form>

<select name="categoria" onChange="java script: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>

INSERT INTO subcategoria (id_categoria,nome_subcategoria) VALUES (2,'Oracao Subordinada');

INSERT INTO subcategoria (id_categoria,nome_subcategoria) VALUES (2,'Redacao');

INSERT INTO subcategoria (id_categoria,nome_subcategoria) VALUES (3,'Estequiometria');

__________________________________________________________________________

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

?>

________________________________________________________________________________________

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...