Ir para conteúdo
gersonab

fazer o downoad dos itens com checkbox selecionados

Recommended Posts

Boa noite, tenho pesquisado porém não encontrei, então vamos lá.

tenho uma lista de itens ( documentos ) cadastrados no banco de dados e os seus respectivos arquivos em uma pasta, se eu preciso de um deles clico e faço o download deste, no entanto como fazer para fazer o download de vários ao selecionar com checkbox os que eu quero ?

desculpem por não postar nenhum código, mas é que não estou sabendo como fazer os downloads de vários.

Qual o procedimento correto ?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se for solucionar no front, faça os requests um a um.
Se for solucionar no backend, faça um .zip dos arquivos selecionados

Compartilhar este post


Link para o post
Compartilhar em outros sites

A melhor alternativa (mais simples) seria copiar os arquivos selecionados para um diretório e então enviar esse diretório.

 

Outra forma seria por ação do javascript ao qual você pode linkar os arquivos enviando-os assim.

Eu até tenho esse script aqui: https://github.com/Spell-Master/sm-web/tree/master/javascript/FileTransfer

Porém eu não escrevi ele para manusear vários arquivos por vez, mas talvez você possa usar-lo como base para desenvolver um que se enquadre em suas necessidades.

Compartilhar este post


Link para o post
Compartilhar em outros sites

estou tentando usar o ziparchive, porém é a primeira vez, não da erro e não acontece nada , rs , gostaria da ajuda de vcs.

 

<?php

$imp = implode(",",$_POST['arquivo']);
$arq = array ($imp);
$fileName  = 'zipFile.zip';
$path      = '../files';
$fullPath  = $path.'/'.$fileName;

$zip = new ZipArchive();

if( $zip->open($fullPath, \ZipArchive::CREATE) ){

    foreach($arq as $file){
        $zip->addFile($path.'/'.$file, $file);
    }
    $zip->close();
}

if(file_exists($fullPath)){
    header('Content-Type: application/zip');
    header('Content-Disposition: attachment; filename="'.$fileName.'"');
    readfile($fullPath);
    unlink($fullPath);
}
//echo $imp;

?>

no echo aparece a lista dos checkbox que selecionei, coloquei apenas para mostrar, tipo : pera,uva,maçã 

Compartilhar este post


Link para o post
Compartilhar em outros sites

consegui resolver, vou postar aqui para quem precisar.

<?php
    $error = "";        
    if(isset($_POST['createzip'])){
        $file_folder = "../files/";    
        if(extension_loaded('zip')){    
            if(isset($_POST['arquivo']) and count($_POST['arquivo']) > 0){    
                $zip = new ZipArchive();            
                $zip_name = ($_POST['nomeid']).".zip";          
                if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE){       
                    $error .=  "* erro 1<br/>";
                }
                foreach($_POST['arquivo'] as $file){               
                    $zip->addFile($file_folder.$file);          
                }
                $zip->close();
                if(file_exists($zip_name)){
                    
                    header('Content-type: application/zip');
                    header('Content-Disposition: attachment; filename="'.$zip_name.'"');
                    readfile($zip_name);
                    
                    unlink($zip_name);
                }

            }else
                $error .= "* erro 2 <br/>";
        }else
            $error .= "* erro 3<br/>";
    }
?>

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como disse pode-se optar pelo javascript, assim você deixa 99,9% a responsabilidade de processamento no hardware do usuário.

Um exemplo bem simples aqui:

<?php
$_POST['arquivos'] = [
    'arquivos/a.jpg',
    'arquivos/b.txt',
    'arquivos/c.css',
    'arquivos/d.js',
    'arquivos/e.pdf'
];

$arquivos = json_encode($_POST['arquivos']);
?>
<html>
    <head>
        <title>Exemplo</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body>
        <script>
            var arquivos = JSON.parse('<?= $arquivos ?>');
            var linkarArquivo = [];

            for (var i in arquivos) {
                linkarArquivo[i] = document.createElement('a'); // Criamos o link para o arquivo
                linkarArquivo[i].href = arquivos[i]; // O endereço do arquivo
                linkarArquivo[i].download = arquivos[i]; // Obrigatório download (do contrário redireciona para ele)
                document.body.appendChild(linkarArquivo[i]); // Adiciona o link no documento
                linkarArquivo[i].click(); // Executa o link
                document.body.removeChild(linkarArquivo[i]); // Remove o link porque não precisa mais dele
            }
        </script>
    </body>
</html>

Vantagens:

- Não precisa criar > compactar > apagar nada no servidor, apenas fornecer o endereço para os arquivos.

- Pode-se criar processos de monitoramento do download como cancelar, pausar, progresso usando a API XMLHttpRequest.

- Pode-se criar opção de pausar o download e continuar depois, ou falha de conexão continuar de onde parou usando a API FileReader. Também com a FileReader é possível criar um compartilhamento de dados nos moldes do torrent (porém requer autorização simultânea de pelo menos 2 usuários conectados a todo momento)

 

Desvantagens:

- O diretório onde estão os arquivos não pode ter nenhuma restrição de acesso, portanto qualquer arquivo nele pode ser acessado por qualquer pessoa, portanto não pode conter nenhum arquivo que alguém não deva ter acesso.

- Requer permissão do usuário para que possa realizar mais de uma transferência por vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por ILR master
      Fala galera, tudo bem?
       
      Tenho o seguinte codigo:
       
       class Data {
      public static function ExibirTempoDecorrido($date)
      {
          if(empty($date))
          {
              return "Informe a data";
          }
          $periodos = array("segundo", "minuto", "hora", "dia", "semana", "mês", "ano", "década");
          $duracao = array("60","60","24","7","4.35","12","10");
          $agora = time();
          $unix_data = strtotime($date);
          // check validity of date
          if(empty($unix_data))
          {  
              return "Bad date";
          }
          // is it future date or past date
          if($agora > $unix_data) 
          {  
              $diferenca     = $agora - $unix_data;
              $tempo         = "atrás";
          } 
          else 
          {
              $diferenca     = $unix_data - $agora;
              $tempo         = "agora";
          }
          for($j = 0; $diferenca >= $duracao[$j] && $j < count($duracao)-1; $j++) 
          {
              $diferenca /= $duracao[$j];
          }
          $diferenca = round($diferenca);
          if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
          return "$diferenca $periodos[$j] {$tempo}";
      }
      }
       
      Funciona redondinho se o valor retornado for de algumas horas, mas...
      Quando passa de dois meses, ele retorna a palavra mess. Deve ser por conta dessa linha
      if($diferenca != 1) 
          {
              $periodos[$j].= "s";
          }
       
      Quero que modre:
       
      2 meses atrás
      e não
      2 mess atrás.
       
      Espero que tenham entendido.
       
      Valeu
    • Por Carlos Web Soluções Web
      Olá...
      Estou tentando fazer o seguinte !!
      Listando dados em tabela !!
      Gostaria que....se na listagem houver 4 linhas...indepedente de seu número de ID, faça a listagem em ID ser em ordem 1 2 3 4 !!
      Exemplo...se tiver uma listagem de dados que está em ID 1 3 3...faça ficar 1 2 3 !!

       
      echo "<table class='tabela_dados' border='1'> <tr> <td>ID</td> <td>Nome Empresa</td> <td>Responsável</td> <td>Telefone 1</td> <td>Telefone 2</td> <td>E-mail 1</td> <td>E-mail 2</td> <td>Endereço</td> <td>CEP</td> <td>Bairro</td> <td>AÇÃO 1</td> <td>AÇÃO 2</td> </tr> "; $sql = "SELECT ID FROM usuarios_dados WHERE Usuario='$usuario'"; $result = $conn->query($sql); $num_rows = $result->num_rows; $Novo_ID = 1; for ($i = 0; $i < $num_rows; $i++) { $registro = $result -> fetch_row(); $sql2 = "UPDATE usuarios_dados SET ID='$Novo_ID' WHERE ID='$Novo_ID'"; $result2 = $conn->query($sql2); $Novo_ID++; } $sql = "SELECT * FROM usuarios_dados"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { echo "<tr> <td>$row[ID]</td> <td>$row[Nome_Empresa]</td> <td>$row[Responsavel]</td> <td>$row[Telefone_1]</td> <td>$row[Telefone_2]</td> <td>$row[Email_1]</td> <td>$row[Email_2]</td> <td>$row[Endereço]</td> <td>$row[CEP]</td> <td>$row[Bairro]</td> <td> <form method='post' action='Editar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='EDITAR'> </form> </td> <td> <form method='post' action='Deletar_Dados.php'> <input type='hidden' name='usuario' value='$usuario'> <input type='hidden' name='senha' value='$senha'> <input type='hidden' name='ID' value='$row[ID]'> <input type='submit' style='padding: 10px;' value='DELETAR'> </form> </td> </tr> "; } } else { echo "0 results"; } $conn->close();  
    • Por ILR master
      Boa tarde pessoal, tudo bem ?
       
      Eu uso o tinymce para cadastro de textos no meu siite, porém, quero fazer um sistema para que os colunistas possam fazer o próprio post.
      O problema do tinymce, é que ele mantém a formatação do texto copiado, como tamanho de fonts, negritos, etc... Quero que o usuário cole o texto e a própria textarea limpe a formatação para que ele formate como quiser.
       
      A pergunta é:
       
      O tinymce tem uma opção para desabilitar a formatação quando um texto é colocado?
      Tem alguma função via java ou php para retirar a formatação assim que o texto é colado?
      Ou é melhor usar um outro editor?
       
      Agradeço deste já.
    • Por Giovanird
      Olá a todos!
      Tenho uma pagina que possui uma DIV onde coloquei uma pagina PHP.
      Uso a função setInterval para atualizar a pagina inclusa dentro da DIV.
      O problema é que ao acessar o site , a DIV só me mostra a pagina inclusa somente quando completo o primeiro minuto.
      Preciso que a pagina inclusa já inicie carregada
       
      Meu código JavaScript e a DIV com a pagina PHP
       
      <script> function atualiza(){ var url = 'direita.php'; $.get(url, function(dataReturn) { $('#direita').html(dataReturn); }); } setInterval("atualiza()",60000); </script> <div> <span id="direita"></span> </div>  
    • Por ILR master
      Fala pessoal.
       
      Seguinte:
       
      Quero selecionar duas tabelas e mostrar com resultados intercalados. Abaixo segue um código explicando para vcs terem uma ideia.
       
      $consulta = "SELECT A.*, B.* FROM tabela1 A, tabela2 B'";
      $resultado = mysqli_query($conexao, $consulta) or die ("erro");
      while($busca = mysqli_fetch_array($resultado)){
       
      print $busca['cod_evento']; --> traz o código da tabela1 
      print $busca['titulo_evento']; -->  traz o titulo da tabela1
      print $busca['cod_noticia']; --> traz o código da tabela2
      print $busca['titulo_noticia']; --> traz o tituloda tabela2
       
      }
       
      Espero que entendam. Grato
       
×

Informação importante

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