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

filtro em centro de custos


sergio.lima

Pergunta

Olá,

Estou com um problema sério e urgente, espero que alguns dos colegas possam me ajudar a filtrar isso.

Tenho uma tabela de centro de custo que tem 3 quebras, diretoria, departamento e supervisão. Fiz um formulário para o funcionário selecionar primeiro a sua diretoria, depois seu departamento e finalmente sua supervisão.

O problema é que não sei, aliás não sei se tem jeito de fazer isso, como capturar o que foi informado em um campo para servir de filtro no campo seguinte sem sair do formulário principal. Do jeito que fiz, o formulário aparece todos os departamentos da empresa e eu gostaria que mostrasse apenas os departamentos da diretoria que foi selecionada anteriormente. O mesmo acontece com a supervisão, aparece todas as supervisões da empresa enquanto eu gostaria que aparecesse apenas as supervisões do departamento e diretoria informados nos campos anteriores.

A tabela é tb_lotacao (cd_diretoria, sg_lotacao_di, sg_lotacao_dp, sg_lotacao_sp, ds_lotacao)

Vejam o código:

// Lotação Departamento

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

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

//     if ($sg_lotacao_dp!=0)
//        {
          echo '    <option value="'.$sg_lotacao_dp.'" selected>'.$sg_lotacao_dp.'</option>';
          echo "    <option value=\"\">&nbsp;</option>";
//        }

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

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

    // Lotação Supervisão

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

    if ($conexao->query($sql))
       {
       echo "<tr>";
       echo "  <td> <div align='right'><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>* Supervisão : </font></div></td>";
       echo "  <td colspan='2'> <font size='2' face='Verdana, Arial, Helvetica, sans-serif'>";
       echo "  <select name='SG_LOTACAO_SP'>";

//     if ($sg_lotacao_sp!=0)
//        {
          echo '    <option value="'.$sg_lotacao_sp.'" selected>'.$sg_lotacao_sp.'</option>';
          echo "    <option value=\"\">&nbsp;</option>";
//        }

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

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

Se alguém puder ajudar, por favor agradeço muito

Sergio

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

Não olhei todo o seu código, mas me parece que você precisa carregar um combo, baseado no valor selecionado no combo anterior, por exemplo, escolher a diretoria 1, e ai então, carregar apenas as supervisões da diretoria 1.

Para isso, você vai precisar acessar sua base de dados após a escolha, ou guardar isso tudo em algum vetor na aplicação ou algo do tipo.

Suas opções.

1) Guardar em html, ou javascript, as seleções para cada escolha, e exibir de acordo com a escolha (jeito mais gambiarra, não recomendo)

2) Fazer um post para cada escolha, e trazer no combo só o que interessa. (solução mais simples, porém esse negócio de ficar postando não é muito recomendado por mim)

3) Ajax. conhece?

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Guilherme.

Obrigado pela ajuda.

Não olhei todo o seu código, mas me parece que você precisa carregar um combo, baseado no valor selecionado no combo anterior, por exemplo, escolher a diretoria 1, e ai então, carregar apenas as supervisões da diretoria 1.

Isso mesmo, você entendeu.

Para isso, você vai precisar acessar sua base de dados após a escolha, ou guardar isso tudo em algum vetor na aplicação ou algo do tipo.

Suas opções.

1) Guardar em html, ou javascript, as seleções para cada escolha, e exibir de acordo com a escolha (jeito mais gambiarra, não recomendo)

Eu não sei como capturar a seleção anterior, mas se não recomenda não deve ser lá grande coisa.

2) Fazer um post para cada escolha, e trazer no combo só o que interessa. (solução mais simples, porém esse negócio de ficar postando não é muito recomendado por mim)

Também não sei como obter a seleção anterior. Se puder ajudar, acho que seria a minha melhor opção por agora.

3) Ajax. conhece?

Não, não conheço. Infelizmente acho que não tenho tempo para aprender e colocar para funcionar.

Obrigado. Se puder me ajudar mais um pouco ... estou realmente precisando.

Sergio

Link para o comentário
Compartilhar em outros sites

  • 0

Vamos la sergio,

Como eu disse, você vai precisar acessar sua base de dados, pois só assim você sabe que a diretoria 'X', tem as superviões 'A', 'B' e 'C', certo?

O melhor jeito de fazer isso, é através de AJAX, mas realmente é um pouco mais complicado, e se você não tem tempo, vamos com a segunda opção.

Como os dados estão em sua base de dados, você precisa acessar o servidor web(php) para pedir o acesso ao banco de dados, certo?

Você vai precisar postar para cada valor selecionado no combo.

Para isso, você põe o primeiro combo em um form, que poste para a mesma página.

Ao carregar os combos seguintes, você verifica se tem algum valor postado, e carrega apenas as supervisões da diretoria postada, caso tenha.

Exemplo para ficar mais claro:

<form name="Dir" method="POST" action="pagina.php">
    <select name="Diretoria">
<?
//Seu select...percorre e monta os options...como você fez ali em cima

?>
    </select>

    <select name="Supervisao">
<?
    //Aqui vem o q eu estava falando.. você vai imaginar que pode ter vindo um $_POST["Diretoria"], e vai fazer o seguinte:
    if($_POST["Diretoria"]) {
        $Query = "SELECT campos from t_supervisao where diretoria = '" . $_POST["Diretoria"] . "'';
        //roda e percorre....
    } else {
        $Query = "SELECT campos from t_supervisao '';
         //roda e percorre....
    }
   
?>
</select>
</form>

Entendeu a idéia??

Qualquer dúvida, manda ae, e para um futuro que você tenha mais tempo, vale a pena pesquisar um pouco de ajax, nesse caso, ele permite você unir javascript e xml para fazer algumas requisições ao servidor web sem precisar postar a página.

Link para o comentário
Compartilhar em outros sites

  • 0

Guilherme, mais uma vez obrigado.

Mas, sou meio inexperiente ainda e não entendi onde coloco um botão submit dentro de uma combobox para desviar para outro programa onde recebo a diretoria selecionada para depois montar o sql filtrando. Se puder me ajudar mais um pouco fico muito grato porque realmente tenho que montar isso aqui.

[]'s

Sergio

<select name="Supervisao">
<?
    //Aqui vem o q eu estava falando.. você vai imaginar que pode ter vindo um $_POST["Diretoria"], e vai fazer o seguinte:
    if($_POST["Diretoria"]) {
        $Query = "SELECT campos from t_supervisao where diretoria = '" . $_POST["Diretoria"] . "'';
        //roda e percorre....
    } else {
        $Query = "SELECT campos from t_supervisao '';
         //roda e percorre....
    }
   
?>
</select>
</form>

Link para o comentário
Compartilhar em outros sites

  • 0
Olá,

Estou com um problema sério e urgente, espero que alguns dos colegas possam me ajudar a filtrar isso.

Tenho uma tabela de centro de custo que tem 3 quebras, diretoria, departamento e supervisão. Fiz um formulário para o funcionário selecionar primeiro a sua diretoria, depois seu departamento e finalmente sua supervisão.

O problema é que não sei, aliás não sei se tem jeito de fazer isso, como capturar o que foi informado em um campo para servir de filtro no campo seguinte sem sair do formulário principal. Do jeito que fiz, o formulário aparece todos os departamentos da empresa e eu gostaria que mostrasse apenas os departamentos da diretoria que foi selecionada anteriormente. O mesmo acontece com a supervisão, aparece todas as supervisões da empresa enquanto eu gostaria que aparecesse apenas as supervisões do departamento e diretoria informados nos campos anteriores.

A tabela é tb_lotacao (cd_diretoria, sg_lotacao_di, sg_lotacao_dp, sg_lotacao_sp, ds_lotacao)

Vejam o código:

// Lotação Departamento

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

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

// if ($sg_lotacao_dp!=0)

// {

echo ' <option value="'.$sg_lotacao_dp.'" selected>'.$sg_lotacao_dp.'</option>';

echo " <option value=\"\">&nbsp;</option>";

// }

$rs = $conexao->query($sql)->fetchAll(PDO::FETCH_ASSOC);

$linhas = count($rs);

for ($x=0; $x < $linhas; $x++)

{

echo '<option value="'.$rs[$x]['sg_lotacao_dp'].'">'.trim($rs[$x]['sg_lotacao_dp']).'</option>';

}

echo " </select>";

echo " </font></td>";

echo "</tr>";

}

// Lotação Supervisão

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

if ($conexao->query($sql))

{

echo "<tr>";

echo " <td> <div align=right'><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>* Supervisão : </font></div></td>";

echo " <td colspan='2'> <font size='2' face='Verdana, Arial, Helvetica, sans-serif'>";

echo " <select name='SG_LOTACAO_SP'>";

// if ($sg_lotacao_sp!=0)

// {

echo ' <option value="'.$sg_lotacao_sp.'" selected>'.$sg_lotacao_sp.'</option>';

echo " <option value=\"\">&nbsp;</option>";

// }

$rs = $conexao->query($sql)->fetchAll(PDO::FETCH_ASSOC);

$linhas = count($rs);

for ($x=0; $x < $linhas; $x++)

{

echo '<option value="'.$rs[$x]['sg_lotacao_sp].'">'.trim($rs[$x]['sg_lotacao_sp']).'</option>';

}

echo " </select>";

echo " </font></td>";

echo "</tr>";

}

Se alguém puder ajudar, por favor agradeço muito

Sergio

o submit não fica dentro do select, fica dentro do form:

<form .....>
<select name="Diretoria">
....
</select>
<select name="Supervisao">
....
</select>
<input type="submit" value="Enviar">
</form>

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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...