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

Preencher um select a partir de outro select


sergio.lima

Pergunta

Prezados Colegas,

Não consigo implementar uma rotina de ajax para selecionar um select (Setor) a partir de outro select (Departamento). Já fiz várias tentativas com os códigos postados aqui, mas não consegui entender como funciona direito. Deve ser alguma coisa que ainda não detectei, mas preciso disso com urgência e bate aquele desespero - aí é que não vai mesmo. Estou postando o código abaixo, me ajudem por favor.

formulario.php

<html>
<head>
<title>Formulario</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<script type="text/javascript">

function RetornoAjax(id, url, container)
{
   var xmlHttp=GetXmlHttpObject()

   if (xmlHttp==null)
      {
      alert ("Este browser não suporta HTTP Request")
      return
      }

   var url=url;
   url=url+"?id="+id;
   url=url+"&sid="+Math.random();
   xmlHttp.onreadystatechange=function()
   {
     if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
        {
        document.getElementById(container).innerHTML=xmlHttp.responseText
        }
   }
   xmlHttp.open("GET",url,true)
   xmlHttp.send(null)
}

function GetXmlHttpObject()
{
   var objXMLHttp=null

   if (window.XMLHttpRequest)
      objXMLHttp=new XMLHttpRequest()
   else
      if (window.ActiveXObject)
         objXMLHttp=new ActiveXObject("Microsoft.XMLHTTP")

   return objXMLHttp
}

</script>
</head>

<body bgcolor="#EBEDED" text="#000000">

<form>

  <table width="40%" border="2" cellspacing="0" cellpadding="0" align="center">
    <tr bgcolor="#006699">
      <td colspan="4">
        <div align="center"><font size="2" face="Verdana, Arial, Helvetica, sans-serif"><b><font color="#FFFFFF">Lotação do Servidor</font></b></font></div></td>
    </tr>

<?PHP
    include_once "conexao.php";

    // Lotação Departamento

    $sql = "SELECT DISTINCT sg_departamento FROM tb_lotacao order by sg_departamento";

    if ($conexao->query($sql))
       {
       echo "<tr>";
       echo "  <td> <div align='right'><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>Departamento : </font></div></td>";
       echo "  <td colspan='2'> <font size='2' face='Verdana, Arial, Helvetica, sans-serif'>";
       echo "  <select name='SG_DEPARTAMENTO' id='SG_DEPARTAMENTO' onchange='RetornoAjax(this.value, 'busca_1.php', 'SG_DEPARTAMENTO')'>";
       echo "  </select>";
       echo "  </font></td>";
       echo "</tr>";
       }

    // Lotação Setor

    $sql = "SELECT DISTINCT sg_setor FROM tb_lotacao where sg_departamento='SG_DEPARTAMENTO' order by sg_setor";

    if ($conexao->query($sql))
       {
       echo "<tr>";
       echo "  <td> <div align='right'><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>* Setor : </font></div></td>";
       echo "  <td colspan='2'> <font size='2' face='Verdana, Arial, Helvetica, sans-serif'>";
       echo "  <select name='SG_SETOR' id='SG_SETOR' onchange='RetornoAjax(this.value, 'busca_2.php', 'SG_SETOR')'>";

       echo "  </select>";
       echo "  </font></td>";
       echo "</tr>";
       }
?>

  </table>
</form>
</body>
</html>
busca_1.php
<?PHP
       $rs = $conexao->query($sql)->fetchAll(PDO::FETCH_ASSOC);
       $linhas = count($rs);
       for ($x=0; $x < $linhas; $x++)
           {
           echo '<option value="'.$rs[$x]['sg_departamento'].'">'.trim($rs[$x]['nome_departamento']).'</option>';
           }
?>
busca_2.php
<?PHP
       $rs = $conexao->query($sql)->fetchAll(PDO::FETCH_ASSOC);
       $linhas = count($rs);
       for ($x=0; $x < $linhas; $x++)
           {
           echo '<option value="'.$rs[$x]['sg_setor'].'">'.trim($rs[$x]['nome_setor']).'</option>';
           }
?>

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0

creio que seje o erro onde você está chamando a página. Crie uma DIV justamente para ser chamado onde você quer que aparece o resutlado do AJAX.

Mas outra coisa importante. Dentro da página que o ajax vai processar, ponha a TAG do select lá. Exemplo:

<?PHP
       echo "  <select name='SG_SETOR' id='SG_SETOR' onchange='RetornoAjax(this.value, 'busca_2.php', 'SG_SETOR')'>";

$rs = $conexao->query($sql)->fetchAll(PDO::FETCH_ASSOC);
$linhas = count($rs);
for ($x=0; $x < $linhas; $x++)
{
echo '<option value="'.$rs[$x]['sg_departamento'].'">'.trim($rs[$x]['nome_departamento']).'</option>';
}

       echo "  </select>";
?>

Abraços.

Link para o comentário
Compartilhar em outros sites

  • 0

Estou com um problema muito parecido porém sem usar ajax.

Tenho um select para Espécies de animais que já é carregado com um valor do banco... e outro select para RAÇAS

na página de alteração quero que atualize os options do select RAÇAS de acordo com a ESPECIE.

Creio que facilite eu criar um novo tópico...

Link para o comentário
Compartilhar em outros sites

  • 0

André,

Coloquei a tag select dentro do arquivo busca_1.php e busca_2.php, mas continua com o mesmo problema - não aparece nada. É como se não passasse pelo busca_1.php já que não aparece nenhum departamento. Por favor, se tiver mais alguma sugestão, poste aqui.

Valeu.

Sergio

creio que seje o erro onde você está chamando a página. Crie uma DIV justamente para ser chamado onde você quer que aparece o resutlado do AJAX.

Mas outra coisa importante. Dentro da página que o ajax vai processar, ponha a TAG do select lá. Exemplo:

<?PHP
       echo "  <select name='SG_SETOR' id='SG_SETOR' onchange='RetornoAjax(this.value, 'busca_2.php', 'SG_SETOR')'>";

$rs = $conexao->query($sql)->fetchAll(PDO::FETCH_ASSOC);
$linhas = count($rs);
for ($x=0; $x < $linhas; $x++)
{
echo '<option value="'.$rs[$x]['sg_departamento'].'">'.trim($rs[$x]['nome_departamento']).'</option>';
}

       echo "  </select>";
?>

Abraços.

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,3k
×
×
  • Criar Novo...