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

[RESOLVIDO] Consulta com seleção multipla de Checkbox


reinaldojr

Pergunta

Senhores....

Antes de mais nada gostaria de agradecer a todos que postam aki e que contribuem para o crecimento da linguagem PHP, pois até então, várias das minhas dúvidas já foram sanadas por aki :D . Esse é o meu primeiro post e depois de vasculhar todo forum não encontrei nada que pudesse me ajudar nessa situação. :(

Eu tenho 3 páginas que utilizo para confeccionar boletos para os clientes de um cliente meu. Essas 3 páginas fazem o seguinte:

página1.php => nessa página eu tenho um form onde o usuario escolhe um período para listar os boletos que estão prontos para imprimir.

página2.php => página que retorna a consulta da página1.php e permite o usuário selecionar o boleto e mandar imprimir.

página3.php => página com o boleto propriamente dito.

A página2.php é chamada no action da página 1 e é nela que faço um select no banco mysql retornando para o usuário os boletos gerados que estão prontos para serem impressos. No retorno da consulta (select) eu filtro o periodo e listo os boletos numa tabela que atende aquele período selecionado na página1. entendido até aki?!.. blza... vamos a parte complicada...rsrsrs. Em cada linha retornada pela consulta eu coloquei um checkbox para que o usuário possa selecionar o boleto que deseja e coloquei um submit no final da página que chama a página3.php numa popup com o boleto para ele imprimir. Até aki tah tudo funcionando, o problema é quando o usuário marca mais de 1 checkbox, pois eu não consigo fazer ele imprimir os boletos referentes a seleção multipla dos checkboxs. Ele sempre imprime apenas 1 boleto.

Pessoal, preciso de idéias para realizar essa tarefa, pois á fiz de tudo, inclusive montei um loop com for que busca os checkboxs marcados e faz um update na tabela colocando o registro como já impresso.. isso também tah funcionando certinho... só não consigo fazer o bendito fazer imprimir... :angry:

abraços a todos...

Reinaldo Jr.

Editado por reinaldojr
Link para o comentário
Compartilhar em outros sites

12 respostass a esta questão

Posts Recomendados

  • 0

Você consegue atualizar todos os boletos cadastrados no BD que foram selecionados mas não consegue imprimir? Nessa página 3 como você está fazendo? Você manda todos os boletos serem mostrados na tela para ai mandar imprimir? Só está aparecendo um boleto? etc... coloque o trecho do código dessa página 3 onde está o problema para dar uma analisada.

Link para o comentário
Compartilhar em outros sites

  • 0
Você consegue atualizar todos os boletos cadastrados no BD que foram selecionados mas não consegue imprimir? Nessa página 3 como você está fazendo? Você manda todos os boletos serem mostrados na tela para ai mandar imprimir? Só está aparecendo um boleto? etc... coloque o trecho do código dessa página 3 onde está o problema para dar uma analisada.

Obrigado ESerra pela atenção... mas Vamos lá... na página2 eu coloquei os checkboxs com o parâmetro name="sboleto[]" e o value="$id" ou seja ele pega como value o código do boleto cadastrado no banco de dados: "<input type=checkbox name=sboleto[] value='$id'" e na página 3 eu faço o seguinte:

<?
if(isset($_POST["sboleto"])) // verifico se existe a variável sboleto (chceckbox)
{
    foreach($_POST["sboleto"] as $boleto) // percorro a array até o final e atribuo os valores a variavel $boleto
    {
        $imp = count($boleto); // acho a quantidade de registros na array
        for ($i = 0; $i < $imp; $i++) { // entro no loop para percorrer a array
        $exec = mysql_query("UPDATE boletos SET impresso='1' WHERE id='$boleto[$i]'") // atualizo a tabela colocando 1 em todos os boletos marcados
        $sql = "select * from boletos where id='$boleto'"; // faço um select que me retorna o registro selecionado no momento
        $resultado = mysql_query($sql) or die ("Não foi possível selecionar o boleto!"); // processo a consulta

        while ($linha=mysql_fetch_array($resultado)) { //realizo um while pra retornar os dados do sacado e colocar em variáveis
            $seunum = $linha['ID'];
            $datavenc = $linha['datavenc'];
            $dataproc = $linha['dataproc'];
            $valordoc = $linha['valordoc'];
            $codsac = $linha['codsacado'];
            $nomesacado = $linha['nomesacado'];
            $endereco = $linha['endereco'];
            $bairro = $linha['bairro'];
            $cep = $linha['cep'];
            $cidade = $linha['cidade'];
            $estado = $linha['estado'];
            $docnum = $linha['docnum'];
        }
                                // início das funcões e layout do boleto 
                               


                               // final das funcoes e layout do boleto
                          }
               } 
    } else
{
    echo "Você não selecionou nenhum boleto!";
}
?>

Observe que o update na tabela funciona direitinho, se eu marcar 4 boletos ele atualiza s 4 na tabela... sem problemas..

A página3 é carregada em uma popup, mostra na tela o boleto e através de um javascript no objeto <body> da página eu já abro a tela de impressão...

Eu acho que o erro tah no select que eu dou depois do update, mas como eu posso recuperar os dados do sacado que estão no banco de dados se não for do jeito que estou fazendo?!..

abraços...

Reinaldo.

Link para o comentário
Compartilhar em outros sites

  • 0

O for e o while são dispensáveis, pois apenas o foreach já varre tudo e faz o que é necessário...

<?
if(isset($_POST["sboleto"])) // verifico se existe a variável sboleto (chceckbox)
{
    foreach($_POST["sboleto"] as $boleto) // percorro a array até o final e atribuo os valores a variavel $boleto
    {
        $exec = mysql_query("UPDATE boletos SET impresso='1' WHERE id='$boleto'") // atualizo a tabela colocando 1 em todos os boletos marcados
        $sql = "select * from boletos where id='$boleto'"; // faço um select que me retorna o registro selecionado no momento
        $resultado = mysql_query($sql) or die ("Não foi possível selecionar o boleto!"); // processo a consulta

        $linha=mysql_fetch_array($resultado); //realizo um while pra retornar os dados do sacado e colocar em variáveis
            $seunum = $linha['ID'];
            $datavenc = $linha['datavenc'];
            $dataproc = $linha['dataproc'];
            $valordoc = $linha['valordoc'];
            $codsac = $linha['codsacado'];
            $nomesacado = $linha['nomesacado'];
            $endereco = $linha['endereco'];
            $bairro = $linha['bairro'];
            $cep = $linha['cep'];
            $cidade = $linha['cidade'];
            $estado = $linha['estado'];
            $docnum = $linha['docnum'];
                               // início das funcões e layout do boleto
                              


                               // final das funcoes e layout do boleto

               }
    } else
{
    echo "Você não selecionou nenhum boleto!";
}
?>

EDIT -> Corrigi algumas coisas acima...

Link para o comentário
Compartilhar em outros sites

  • 0

Bom... dei uma enxugada no código... realmente o for e o while eram desnecessários, da uma olhada como ficou agora Edgar...

<?
if(isset($_POST["sboleto"]))
{
    foreach($_POST["sboleto"] as $bol => $boleto)
    {
        
                                $exec = mysql_query("UPDATE boletos SET impresso='1' WHERE id='$boleto[$i]'")                                
                                $sql = mysql_query("select * from boletos where id='$boleto[$i]'");
        $linha=mysql_fetch_array($sql); 
        
        $seunum = $linha['ID'];
        $datavenc = $linha['datavenc'];
        $dataproc = $linha['dataproc'];
        $valordoc = $linha['valordoc'];
        $nomesacado = $linha['nomesacado'];
        $endereco = $linha['endereco'];
        $bairro = $linha['bairro'];
        $cep = $linha['cep'];
        $cidade = $linha['cidade'];
        $estado = $linha['estado'];
        $docnum = $linha['docnum'];

                                // Inicio das Funcoes e Layouts do Boleto



                                // Final das FUncoes e Layouts do Boleto

       }
} else {
    echo "Você não selecionou nenhum boleto!";
}

Tah funcionando da mesma forma e com um código mais enxuto... :D só que quando eu marco mais de um boleto no checkbox ele atualiza na tabela certinho, mas só manda para a impressora o primeiro que eu marquei.

Abração Edgar e obrigado...

Link para o comentário
Compartilhar em outros sites

  • 0

Exibe tudo certinho na tela edgar, ele abre a popup com o boleto montadinho, com os campos nos seus lugares, tudo certo... só que os dados são do primeiro item marcado no checkbox. Na minha consepção, não sei se estou errado porque to trabalhando com PHP a pouco tempo, mas se eu to rodando a rotina toda dentro do foreach ele tem que rodar tantas vezes forem necessárias para que a condição do lop seja verdadeira.. certo?!... tanto é que ele atualiza no banco corretamente... não consigo entender porque ele só manda para visualização o 1 registro marcado pelo checkbox... :wacko:

Link para o comentário
Compartilhar em outros sites

  • 0

Então se escolher 5 boletos são montados 5 boleto, só que com todos os dados iguais?

Bom, a parte do código que você postou é aquilo ali mesmo... só se o pau for na parte do boleto, mas é de se duvidas, já que a cada volta se cria um novo boleto e as variáveis ganham valores novos...

No seu código altere isso:

$exec = mysql_query("UPDATE boletos SET impresso='1' WHERE id='$boleto[$i]'")                                
                                $sql = mysql_query("select * from boletos where id='$boleto[$i]'");
Para isso
$exec = mysql_query("UPDATE boletos SET impresso='1' WHERE id='$boleto'")                                
                                $sql = mysql_query("select * from boletos where id='$boleto'");

Link para o comentário
Compartilhar em outros sites

  • 0

:rolleyes: < RESOLVIDO>

Edgar... esse echo count($_POST["sboleto"]); , me ajudou a enxergar o problema. O que acontecia era o seguinte: no final da rotina de boleto do pessoal do BoletoPhp, que eu adaptei ao meu sistema, eu dava 2 includes em 2 arquivos, um com o layout do boleto e outro com as funções, só que quando o laço era executado pela primeira vez ele incluia os arquivos e gerava o boleto corretamente, na segunda vez ele já não incluia mais, pois as funcões já estavam declaradas. O que eu fiz foi criar uma variável $tempo = 0; antes do laço e na hora de incluir os arquivos eu criei uma condição pra ele só incluir o arquivo de funções se a variável for igual a 0 aí ele incrementa com $tempo++ . Pronto. Resolvido, tah gerando os boletos cerinho agora.

P.S. Fica aki registrado em meu post os créditos para todos do BoletoPhp, principalmente aos Daniel William Schultz / Leandro Maniezo / Rodrigo Dias Pereira que desenvolveram o boleto para o Banco do Brasil.

E a você Eserra, muito obrigado mesmo, sem a sua ajuda, com certeza não teria conseguido.

Segue abaixo o código final para quem precisar.

<?php

include ("conecta_mysql.inc");

if(isset($_POST["sboleto"]))

{

$tempo = 0;

foreach($_POST["sboleto"] as $bol => $boleto)

{

$exec = mysql_query("UPDATE boletos SET impresso=1', nossonum='$nossonumf' WHERE id='$boleto'") or die ("Não foi possível atualizar o boleto!");

$sql = mysql_query("select * from boletos where id='$boleto'");

$linha=mysql_fetch_array($sql);

$seunum = $linha['ID];

$datavenc = $linha['datavenc'];

$dataproc = $linha['dataproc'];

$valordoc = $linha['valordoc'];

$nomesacado = $linha['nomesacado'];

$endereco = $linha['endereco'];

$bairro = $linha['bairro'];

$cep = $linha['cep'];

$cidade = $linha['cidade'];

$estado = $linha['estado'];

$docnum = $linha['docnum'];

if ($tempo == 0) {

include("include/funcoes_bb.php");

$tempo++;

}

include("include/layout_bb.php");

}

}

else {

echo "Você não selecionou nenhum boleto!";

}

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,2k
    • Posts
      652,1k
×
×
  • Criar Novo...