Ana Riet 0 Denunciar post Postado Outubro 9, 2008 oi, gente! meu problema é o seguinte... tenho uma página 1 que passa determinados parâmetros de um formulário pra página 2. só que dependendo de quais parâmetros são passados, a query na página 2 muda. na página 1 tenho um select com opções e algumas checkboxes (todos puxados do banco de dados). na página 2, consigo pegar os valores numa boa: <select name="estacoes[]" style="width: 15em" size=6 multiple> <? while ($row = mysql_fetch_array($resultado)) { echo "<option value=".$row["codEstacaoUsuario"]." selected>".$row["nomeEstacao"]; } ?> </select> e <? while ($row = mysql_fetch_array($resultado2)) { echo " <tr> <td> <input type='checkbox' name='status[]' value=".$row["codStatus"]." checked>".$row["descrStatus"]." </td> </tr>"; } ?> na página 2, consigo pegar esses valores na boa: $estacoes = $_POST['estacoes']; for ($i=0;$i<count($estacoes);$i++) { $estacoes[$i]; } $status = $_POST['status']; for ($i=0;$i<count($status);$i++) { $status[$i]; } o meu problema é que podem ser passadas 1 ou n estações e 1 ou n códigos de status. e minha query tem que pesquisar utilizando "OR" pra todos eles passados. ou seja, algo mais ou menos assim: select c.codChamado, c.descricao, a.nomeAnalista, sc.descrStatus, eu.usuario, eu.nomeEstacao, date_format(c.data,'%d/%m/%Y às %Hh%i') AS data from chamado c, analista a, statusChamado sc, estacaoUsuario eu where a.codAnalista = c.fkCodAnalista and sc.codStatus = c.fkCodStatusChamado and eu.codEstacaoUsuario = c.fkCodEstacaoUsuario and ( fkCodEstacaoUsuario = 1 or fkCodEstacaoUsuario = 2 or fkCodEstacaoUsuario = 3 or fkCodEstacaoUsuario = 4 ) and ( fkCodStatusChamado = 1 or fkCodStatusChamado = 2 or fkCodStatusChamado = 3 or fkCodStatusChamado = 4 ) order by c.codChamado só que, como faço pra inserir na query os códigos que foram passados dinâmicamente delo usuário na página 1? viajando muito (é difícil de explicar), eu queria que existisse uma loucura mais ou menos assim: $query1 = " select c.codChamado, c.descricao, a.nomeAnalista, sc.descrStatus, eu.usuario, eu.nomeEstacao, date_format(c.data,'%d/%m/%Y às %Hh%i') AS data from chamado c, analista a, statusChamado sc, estacaoUsuario eu where a.codAnalista = c.fkCodAnalista and sc.codStatus = c.fkCodStatusChamado and eu.codEstacaoUsuario = c.fkCodEstacaoUsuario and ( fkCodEstacaoUsuario = '$estacoes[0]'" . for ($i=1;$i<count($estacoes);$i++) { echo "OR fkCodEstacaoUsuario = '$estacoes[$i]'; } . " ) and ( fkCodStatusChamado = '$status[0]'" . for ($i=1;$i<count($status);$i++) { echo "OR fkCodStatusChamado = '$status[$i]'; } . " ) order by c.codChamado"; eu sei que isso é um absurdo e não existe, mas deu pra entender o que eu estou querendo mais ou menos? como eu posso fazer isso, alguém tem idéia? :wacko: agradeço quem puder ajudar! Compartilhar este post Link para o post Compartilhar em outros sites
Paulo de Tarso F. M. 24 Denunciar post Postado Outubro 10, 2008 Olha só, eu também gosto de "viajar" assim, principalmente agora que eu comecei a estudar PHP... Assim, esse código que você passou não funciona? Bom, eu não tinha como testar e tals, mas pela sua pergunta, não deve funcionar mesmo... Mas pensei no seguinte: e se você fizer esse for fora da query? Tipo, antes de executar a query? Assim, por exemplo: // for das estações $for_Estacoes = ""; for ($i = 0; $i < count($estacoes); $i++) { if ($for_Estacoes == "") { $for_Estacoes .= "'" . $estacoes[" . $i . "] . "'"; } else { $for_Estacoes .= ",'" . $estacoes[" . $i . "] . "'"; } } // for do Status $for_Status = ""; for ($i = 0; $i < count($status); $i++) { if ($for_Status == "") { $for_Status .= "'" . $status[" . $i . "] . "'"; } else { $for_Status .= ",'" . $status[" . $i . "] . "'"; } } $query1 = " SELECT c.codChamado, c.descricao, a.nomeAnalista, sc.descrStatus, eu.usuario, eu.nomeEstacao, date_format(c.data,'%d/%m/%Y às %Hh%i') AS data FROM chamado c, analista a, statusChamado sc, estacaoUsuario eu WHERE a.codAnalista = c.fkCodAnalista AND sc.codStatus = c.fkCodStatusChamado AND eu.codEstacaoUsuario = c.fkCodEstacaoUsuario AND fkCodEstacaoUsuario IN (" . $for_Estacoes . ") AND fkCodStatusChamado IN (" . $for_Status . ") ORDER BY c.codChamado ";Bom, sei lá, veja se funciona dessa forma... Pelo menos pela lógica funcionaria... http://forum.imasters.com.br/public/style_emoticons/default/assobiando.gif Repito, não tive como testar, ok? Depois me fala se funciona assim ou não (dessa maneira eu vou aprendendo também, né?) Obs.: Eu gosto de separar as variáveis PHP dos comandos SQL, como pode observar (lá no for, por exemplo, você tem o uso da variável $i, veja que eu abro e fecho as aspas só para essa variável, sendo que funcionaria sem elas, mas é que eu sempre faço assim, tenho esse hábito desde quando comecei a programar em PHP... Mas é mania minha mesmo)... Abraço! Compartilhar este post Link para o post Compartilhar em outros sites
Ana Riet 0 Denunciar post Postado Outubro 10, 2008 paulo, funcionou perfeitamente! ele realmente não aceitava o "for" no meio da query. dessa forma ficou ótimo, tudo direitinho! muitíssimo obrigada pela sua ajuda! http://forum.imasters.com.br/public/style_emoticons/default/clap.gif Compartilhar este post Link para o post Compartilhar em outros sites