• 0
Sign in to follow this  
milka

Filtro Com Combo

Question

Olá,

Eu tenho dois combos(selects) e no primeiro ele me lista todos os projetos que eu tenho. No segundo eu quero que venha apenas as tarefas referentes aquele projeto selecionado no primeiro..

Como faço !?

[]s :unsure:

Share this post


Link to post
Share on other sites

11 answers to this question

Recommended Posts

  • 0

Para fazer isso, ao selecionar o select1 o mesmo deverá ser submetido para ser feita a busca e a partir dos resultados ser montado o select2...

Agora... para submeter você terá um refresh da página... a menos que use AJAX...

Share this post


Link to post
Share on other sites
  • 0

Com AJAX seria mais simples, pois atualizaria os dados do select2 sem precisar dar o refresh na página.

Estou tentando montar algo aqui, mas não está dando muito certo, pois estou tentando injetar código HTML dentro do campo select, só que o código que estou usando pra AJAX modifica o value dele.

Se não for incômodo, posso postar os arquivos aqui (em desenvolvimento) para ver se alguém mais consegue dar uma mão nisso.

Share this post


Link to post
Share on other sites
  • 0

Para fazer isso, ao selecionar o select1 o mesmo deverá ser submetido para ser feita a busca e a partir dos resultados ser montado o select2...

Agora... para submeter você terá um refresh da página... a menos que use AJAX...

Poxa, eu não sei fazer isso !!

Sou iniciante no PHP. Consegui apenas trazer as informações da tabela para cada um, mas não consigo relaciona-los e fazer esse filtro..Não tenho muita idéia.. :(

Os meus dois combos estão assim..

<TR>

<TD align="right" valign="bottom" ><font face = "verdana" size="2"><b>PROJETO:</b></font></TD>

<TD valign="bottom"><select name="combo_projeto_andamento" lenght="50" >

<?php

$dados= pg_query($connect, "SELECT nm_projeto FROM tb_projeto ORDER BY id_projeto");

while($campo = pg_fetch_array($dados))

{

?>

<option value="<? echo $campo['id_projeto']?>"><? echo $campo['nm_projeto']?></option>

<? } ?>

</select>

</TD>

</TR>

<TR>

<TD align=right" valign="bottom" ><font face = "verdana" size="2"><b>TAREFA:</b></font></TD>

<TD valign="bottom"><select name="combo_tarefa_andamento" lenght="50" >

<?php

$dados= pg_query($connect, "SELECT t.nm_tarefa, t.id_tarefa, t.id_projeto, p.id_projeto FROM tb_tarefa t, tb_projeto p WHERE t.id_projeto=p.id_projeto ORDER BY id_tarefa");

while($campo = pg_fetch_array($dados))

{

?>

<option value="<? echo $campo['id_tarefa]?>"><? echo $campo['nm_tarefa']?></option>

<? } ?>

</select>

</TD>

</TR>

Tentei fazer um select mais elaborado, mas não deu em nada !! Acho que não tem nada haver...

Quanto a AJAX nunca trabalhei com ele, mas caso seja preciso não vejo obstáculos em ter que aprender tambem..

Share this post


Link to post
Share on other sites
  • 0

(Att Moderação:

Será que isso está certo mesmo? )

Bom, acredito que irá resolver o seu problema, não testei ainda, portanto, podemos tentar resolver possíveis problemas juntos (ele funciona perfeitamente na outra aplicação que tenho aqui).

Primeiramente, no topo da página que você tem esses combos, coloque a seguinte linha:

<script src="ajax.js" language="javascript" type="text/javascript"></script>

Isso irá chamar as funções do AJAX.

Agora, você precisará do arquivo ajax.js, já que ele foi chamado.

Crie um arquivo com este nome e introduza o seguinte conteúdo:

function ajaxInit() {

var req;

try {

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

}

catch(e) {

try {

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

}

catch(ex) {

try {

req = new XMLHttpRequest();

}

catch(exc) {

alert("Esse browser não tem recursos para uso do Ajax");

req = null;

}

}

}

return req;

}

function Preenche(DADOS) {

ajax = ajaxInit();

if(ajax) {

ajax.open("GET", "ajax.php?Preenche=" + DADOS, true);

ajax.onreadystatechange = function() {

var dinamico = document.getElementById("combo_tarefa_andamento");

dinamico.innerHTML="<option value=''>Carregando...</option>";

if(ajax.readyState == 4) {

if(ajax.status == 200) {

var texto=ajax.responseText;

dinamico.innerHTML=texto;

}

else {

alert(ajax.statusText);

}

}

}

ajax.send(null);

}

}

O arquivo ajax.js busca o conteúdo e joga em seu campo combo_tarefa_andamento .

Se reparar bem, esse arquivo enviará as informações para um outro arquivo, ajax.php.

Esse também não tem segredo, é só a montagem do seu outro campo!

<?php

$Preenche = $_GET["Preenche"];

$dados= pg_query($connect, "SELECT t.nm_tarefa, t.id_tarefa, t.id_projeto, p.id_projeto FROM tb_tarefa t, tb_projeto p WHERE t.id_projeto=p.id_projeto ORDER BY id_tarefa");

while($campo = pg_fetch_array($dados))

{

?>

<option value=<? echo $campo['id_tarefa]?>"><? echo $campo['nm_tarefa']?></option>

<? } ?>

E agora, por último, a sua tabela com o primeiro campo.

<TR>

<TD align="right" valign="bottom" ><font face = "verdana" size="2"><b>PROJETO:</b></font></TD>

<TD valign="bottom"><select name="combo_projeto_andamento" lenght="50" >

<?php

$dados= pg_query($connect, "SELECT nm_projeto FROM tb_projeto ORDER BY id_projeto");

while($campo = pg_fetch_array($dados))

{

?>

<option value="<? echo $campo['id_projeto]?>" onClick=Preenche("<? echo $campo['id_projeto']?>")><? echo $campo['nm_projeto']?></option>

<? } ?>

</select>

</TD>

</TR>

<TR>

<TD align="right" valign="bottom" ><font face = "verdana" size="2"><b>TAREFA:</b></font></TD>

<TD valign="bottom"><select name="combo_tarefa_andamento" lenght="50" id="combo_tarefa_andamento">

</select>

</TD>

</TR>

Na verdade, você terá apenas que modificar o WHERE da linha:

$dados= pg_query($connect, "SELECT t.nm_tarefa, t.id_tarefa, t.id_projeto, p.id_projeto FROM tb_tarefa t, tb_projeto p WHERE t.id_projeto=p.id_projeto ORDER BY id_tarefa");

Para a variável criada pelo primeiro campo.

Edited by Lvcifer!

Share this post


Link to post
Share on other sites
  • 0

Na verdade, você terá apenas que modificar o WHERE da linha:

$dados= pg_query($connect, "SELECT t.nm_tarefa, t.id_tarefa, t.id_projeto, p.id_projeto FROM tb_tarefa t, tb_projeto p WHERE t.id_projeto=p.id_projeto ORDER BY id_tarefa");

Para a variável criada pelo primeiro campo.

Não entendi essa parte...

Mas a principio não deu nenhum erro, apenas não esta retornando nenhuma tarefa quando eu seleciono um projeto...

Meu código ficou assim:

andamento.php

<?

//Inicia a sessão

session_start();

include "conectar.php";

$login_colaborador = $_SESSION['login'];

?>

<script src=ajax.js" language="javascript" type="text/javascript"></script>

<HTML>

<HEAD>

<TITLE>ANDAMENTO DAS ATIVIDADES</TITLE>

</HEAD>

<BODY>

<table width="55%" align="center" border="0" height="210" >

<form method="POST" action="acao_andamento.php">

<TR>

<TD align="right" valign="bottom" ><font face = "verdana" size="2"><b>PROJETO:</b></font></TD>

<TD valign="bottom"><select name="combo_projeto_andamento" lenght="50" >

<?php

$dados= pg_query($connect, "SELECT nm_projeto, id_projeto FROM tb_projeto ORDER BY id_projeto");

while($campo = pg_fetch_array($dados))

{

?>

<option value="<? echo $campo['id_projeto]?>" onClick=Preenche("<? echo $campo['id_projeto']?>")><? echo $campo['nm_projeto']?></option>

<? } ?>

</select>

</TD>

</TR>

<TR>

<TD align=right" valign="bottom" ><font face = "verdana" size="2"><b>TAREFA:</b></font></TD>

<TD valign="bottom"><select name="combo_tarefa_andamento" lenght="50" id="combo_tarefa_andamento">

</select>

</TD>

</TR>

<TD align="right" valign="bottom" ><font face = "verdana" size="2"><b>COLABORADOR:</b></font></TD>

<TD valign="bottom"><select name="combo_colaborador_andamento" lenght="50" disabled="">

<?php

$dados= pg_query($connect, "SELECT nm_colaborador FROM tb_colaborador WHERE UPPER(login)= UPPER('$login_colaborador') ORDER BY id_colaborador");

while($campo = pg_fetch_array($dados))

{

?>

<option value="<?echo $campo['nm_colaborador]?>"><? echo $campo['nm_colaborador']?></option>

<? } ?>

</select>

</TD>

</TR>

<TR>

<TD align=right" valign="bottom"><font face = "verdana" size="2"><b>DATA:</b></TD>

<TD valign="bottom"><input type = "text" name="data_andamento" size="22" length="20" ></font></TD>

</TR>

<TR>

<TD align="right" valign="bottom"><font face = "verdana" size="2"><b>HORA INÍCIO:</b></TD>

<TD valign="bottom"><input type = "text" name="hora_inicio_andamento" size="22" length="20" ></font></TD>

</TR>

<TR>

<TD align="right" valign="bottom"><font face = "verdana" size="2"><b>HORA FIM:</b></TD>

<TD valign="bottom"><input type = "text" name="hora_fim_andamento" size="22" length="20" ></font></TD>

</TR>

<TR>

<TD align="right" valign="middle"><font face = "verdana" size="2"><b>COMENTÁRIO:</b></TD>

<TD><textarea cols="50" rows="" name="" wrap=""></textarea></TD>

</TR>

</table>

</form>

</BODY>

</HTML>

ajax.php

<?php

$Preenche = $_POST["Preenche];

$dados= pg_query($connect, "SELECT t.nm_tarefa, t.id_tarefa, t.id_projeto, p.id_projeto FROM tb_tarefa t, tb_projeto p WHERE t.id_projeto=p.id_projeto ORDER BY id_tarefa");

while($campo = pg_fetch_array($dados))

{

?>

<option value="<? echo $campo['id_tarefa']?>"><? echo $campo['nm_tarefa']?></option>

<? } ?>

valeu por estar me ajudando..

Share this post


Link to post
Share on other sites
  • 0

Aqui, o código ficaria assim:

$dados= pg_query($connect, "SELECT t.nm_tarefa, t.id_tarefa, t.id_projeto, p.id_projeto FROM tb_tarefa t, tb_projeto p WHERE t.id_projeto=$Preenche ORDER BY id_tarefa");

Assim ele selecionará somente as tarefas que pertencerem projeto, que foi o resultado do primeiro campo.

(Este seria no ajax.php)

Edited by Lvcifer!

Share this post


Link to post
Share on other sites
  • 0

Aqui, o código ficaria assim:

$dados= pg_query($connect, "SELECT t.nm_tarefa, t.id_tarefa, t.id_projeto, p.id_projeto FROM tb_tarefa t, tb_projeto p WHERE t.id_projeto=$Preenche ORDER BY id_tarefa");

Assim ele selecionará somente as tarefas que pertencerem projeto, que foi o resultado do primeiro campo.

(Este seria no ajax.php)

Esta tudo correto, mas ainda não sei por que não aparece os dados das tarefas relacionadas com o projeto escolhido...O combo fica branco e nada ocorre quando seleciono o projeto...

A unica coisa que mudei foi de GET para POST, pois estou usando esse...tem algum sentido !?

Share this post


Link to post
Share on other sites
  • 0

Se for lá no ajax.js, tem sim, pois ele envia os dados para o ajax.php por método GET.

A não ser que o JS seja modificado para criar os campos do form e enviá-los por POST, isso eu não sei como faria.

Share this post


Link to post
Share on other sites
  • 0

<TR>

<TD align="right" valign="bottom" ><font face = "verdana" size="2"><b>TAREFA:</b></font></TD>

<TD valign="bottom"><select name="combo_tarefa_andamento" lenght="50" id="combo_tarefa_andamento">

</select>

</TD>

</TR>

Eu acho que nessa parte deveria trazer alguma coisa, assim como no combo do projeto..

Nossa !! não sei mais... :blink:

Share this post


Link to post
Share on other sites
  • 0

Estranho não funcionar, olhando os scripts aqui, está tudo certinho!

Não consigo achar o erro.

Bom, esta é a forma com AJAX, para não precisar dar o refresh na página ao clicar nos projetos (campo1).

Existe uma outra maneira também, que você clica no projeto, ele abre um outra página (ou até a mesma, com mais um campo) e permite que seja selecionada a tarefa do projeto.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this