Ir para conteúdo

playnet

Members
  • Total de itens

    6
  • Registro em

  • Última visita

Reputação

0 Comum

Sobre playnet

  1. playnet

    Paginação usando form html

    Boa Alexsander! Usei o esquema com o SESSION e deu certo! Obg!
  2. playnet

    Paginação usando form html

    Boa noite! Gostaria de uma ajuda para ajustar o funcionamento de paginação com os dados enviados através de um form, vou utilizar um exemplo fictício para descrever o que preciso. Form para obter duas informações (loja e produto) através de uma lista de opções extraídas do BD: <?php //Conectar ao BD include_once("connection.php"); ?> <html> <head> <title>Test</title> </head> <body bgcolor="DAEBE1"> <div id="report"> <form action="view_produtos.php" method="POST" enctype="multipart/form-data"> Loja: <select name="loja"> <option value="">Selecione a Loja</option> <?php $query = "SELECT nome FROM lojas WHERE ativo='S' order by nome asc"; $result = mysqli_query($conn, $query) or die ("Error ao selecionar loja"); foreach ($result as $loja) { ?> <option value="<?php echo $loja["nome"]; ?>"><?php echo $loja["nome"];?></option> <?php } ?> </select>&emsp; Produto: <select name="produto"> <option value="">Selecione o produto</option> <?php $query = "SELECT nome FROM produtos order by nome asc"; $result = mysqli_query($conn, $query) or die ("Error ao selecionar produtos"); foreach ($result as $produto) { ?> <option value="<?php echo $produto["nome"]; ?>"><?php echo $produto["nome"];?></option> <?php } ?> </select> <p><input type="submit" value="Enviar" style="width: 120px; height: 30px"></p> <p><input type="hidden" name="test" value="ok"></p> </form> </div> </body> </html> PHP - view_produtos.php Pego as informações enviadas pelo submit e uso suas respectivas variáveis na consulta sql. Mostro o resultado da consulta com o código de paginação ativada. <?php //Conectar ao BD include_once("connection.php"); @session_start(); ?> <html> <head> <title>Test</title> </head> <body bgcolor="DAEBE1"> <?php if(isset($_POST['test']) && $_POST['test'] == "ok"){ $loja = $_POST['loja']; $produto = $_POST['produto']; ?> <p> <table border='2'> <tr bgcolor='#A9A9A9' align='center'> <td>Loja</td> <td>Produto</td> </tr> <?php //Paginação $page = (isset($_GET['page']))? $_GET['page'] : 1; $query = "SELECT loja, produto FROM ... WHERE $loja ... AND $produto ..."; $result = mysqli_query($conn, $query) or die ("Erro na consulta"); $rows = mysqli_num_rows($result); $total_reg = "10"; // Número de registros por página $numpage = ceil($rows/$total_reg); $inicio = ($total_reg*$page)-$total_reg; $limit_result = mysqli_query($conn, "$query LIMIT $inicio, $total_reg") or die ("Erro na consulta"); while ($row = mysqli_fetch_object($limit_result)) { echo "<tr align='center'>"; echo "<td>".$row->loja."</td>"; echo "<td>".$row->produto."</td>"; echo"</tr>"; } //Exibe a Paginação for($i = 1; $i < $numpage + 1; $i++) { echo "<a href='?page=$i'>Page".$i."</a>&emsp;"; } } ?> </table> </body> </html> Tanto a consulta como o código de paginação estão funcionando... o problema é: Se eu executo o view_produtos.php individualmente tudo funciona, a quebra de página fica certinha mostrando o resultado exato em cada page. Agora se pego os dados a partir do form que eu descrevi acima, ao clicar no link da page 2 por exemplo, ele mostra o resultado em branco, sendo necessário dar submit novamente pra exibir a page 2. Como eu faria para mostrar os resultados da page 2, page 3, etc.. sem precisar enviar os dados de form novamente? Acredito também que eu precisaria manter os dados no form após o submit. Alguma sugestão? Obrigado, Alex
  3. playnet

    Ajuda numa consulta SQL

    *** UPDATE *** Resolvido.
  4. playnet

    Ajuda numa consulta SQL

    Boa tarde! Gostaria de uma ajuda para finalizar uma consulta SQL, vou utilizar um exemplo fictício para descrever o que preciso. SELECT tbCidades.nome as Cidade, tbFiliais.nome as Filial, tbProdutos.nome as NomeProduto FROM cidades tbCidades, filiais tbFiliais, produtos tbProdutos, vendas tbVendas WHERE tbFiliais.idCidade=tbCidades.idCidade and tbProdutos.idFilial=tbFilial.idFilial and tbProdutos.idProduto=tbVendas.idProduto and tbCidades.nome='Rio de Janeiro' and tbFiliais.nome='Copacabana' and tbVendas.data='15/11/2017' GROUP BY Cidade, Filial, NomeProduto O que preciso: 4ª coluna: Contar qtas vendas efetuadas da respectiva Cidade-Filial-Produto que tenham tbVendas.formapgto 'C' (cartão de crédito) Nome da Coluna seria: VendasCartao 5ª coluna: Contar qtas vendas efetuadas da respectiva Cidade-Filial-Produto que tenham tb.Vendas.formapgto 'D' (dinheiro) Nome da Coluna seria: VendasDinheiro 6ª coluna: Contar qtas vendas efetuadas da respectiva Cidade-Filial-Produto independente da formapgto ou que tb.Vendas.formapgto in ('C', 'D') Nome da Coluna seria: VendasTotal Resultado Esperado: Cidade Filial NomeProduto VendasCartao VendasDinheiro VendasTotal Rio de Janeiro Copacabana Cadeira de Praia 4 2 6 Rio de Janeiro Copacabana Barraca de Praia 3 0 3 Rio de Janeiro Copacabana Mesa Plastico 8 6 14 Já tentei usar de tudo... subqueries com select+count(tbVendas.idVenda), função, etc... e nada. Sempre pega na questão do group by. Alguma sugestão? Obrigado, Alex
  5. ***Update*** Em relação a dúvida 2, consegui fazendo dessa forma: (SELECT count(m.id_match) as Quantity, d.nome as OppDeck, f.nome as Format, tp.nome as League, ROUND(((count(m.id_match)*100)/(SELECT count(m.id_match) FROM tipoleague tp, leagues l, formatos f, matches m, decks d WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' and m.opp_deck is not null)),2) as Porcent FROM tipoleague tp, leagues l, formatos f, matches m, decks d WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' group by OppDeck, Format, League order by 1 desc) UNION (SELECT count(m.id_match) as Total, null as OppDeck, f.nome as Format, tp.nome as League, null as Porcent FROM tipoleague tp, leagues l, formatos f, matches m, decks d WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' and m.opp_deck is not null group by Format, League) Acredito que uma função seria a maneira mais correta e limpa de se calcular isso. Em relação a dúvida 1, achei aqui no forum um usuário q teve a mesma situação, e um moderador respondeu q UNION e ORDER BY individual no select não está correto. Com base nisso, como eu faria para gerar essa última linha (totalização da coluna 1) mantendo a ordenação dos registros acima? Isso é possível?
  6. Boa noite pessoal, Gostaria se possível de duas ajudas: 1) Porque a ordenação que defini como coluna 1 mostra o resultado errado? Parece que está considerando a ordenação pela coluna 2. Obs: Se eu deixar ativo apenas o primeiro select funciona ok, se mantenho o UNION ele mostra errado. 2) Consigo calcular a porcentagem utilizando o resultado dos selects? Eu gostaria de utilizar o resultado do count do select1 (Quantity) com o resultado de count do resultado 2 (Total) para gerar a porcentagem numa coluna 5. Coluna 5 seria: (Quantity*100)/Total Segue a consulta: (SELECT count(m.id_match) as Quantity, d.nome as OppDeck, f.nome as Format, tp.nome as League FROM tipoleague tp, leagues l, formatos f, matches m, decks d WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' group by OppDeck, Format, League order by 1 desc) UNION (SELECT count(m.opp_deck) as Total, "All Decks", f.nome, tp.nome FROM tipoleague tp, leagues l, formatos f, matches m, decks d WHERE d.id_deck=m.opp_deck and l.id_formato=f.id_formato and l.id_league=m.id_league and tp.id_tipoleague=l.id_tipoleague and f.nome='Modern' and tp.nome='Competitive' and date(m.data) between '2017/11/01' and '2017/11/14' group by f.nome, tp.nome) Resultado: Agradeço desde já, Alex
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.