Ir para conteúdo
Rafael Motta

[Resolvido] Baixar arquivos PDF,XML...

Recommended Posts

Bom dia, queria saber se alguém saberia me informar como faço para criar um botao para baixar um arquivo, mas deixando o usuario escolher qual o arquivo(exemplo notas fiscais...), o usuario passaria o parâmetro em vez de deixar ja pré-definido qual arquivo vai ser baixado no botao...

segue o que encontrei abaixo...

 

 

Vendas.php

<?php
require '../../../functions/conexao.php';
?>

  
<div class="row"><br>
    <div class="col-xs-12">
        <div class="panel panel-default">
            <div class="panel-heading">Vendas</div>
            <div class="panel-body">
                <form>
                    <br/>
                    <button type="submit"><a href="download.php?arquivo=377328.pdf">Baixar PDF</a></button>
                </form>
            </div>
        </div>
    </div>

 

 

 

 

 

 

Download.php


<?php

// Aqui vale qualquer coisa, desde que seja um diretório seguro :)
define('DIR_DOWNLOAD', '\\10.0.0.140\EMPRESA\Nota_');
// Vou dividir em passos a criação da variável $arquivo pra ficar mais fácil de entender, mas você pode juntar tudo
$arquivo = $_GET['arquivo'];
// Retira caracteres especiais
$arquivo = filter_var($arquivo, FILTER_SANITIZE_STRING);
// Retira qualquer ocorrência de retorno de diretório que possa existir, deixando apenas o nome do arquivo
$arquivo = basename($arquivo);
// Aqui a gente só junta o diretório com o nome do arquivo
$caminho_download = DIR_DOWNLOAD . $arquivo;
// Verificação da existência do arquivo
if (!file_exists($caminho_download))
    die('Arquivo não existe!');
header('Content-type: octet/stream');
// Indica o nome do arquivo como será "baixado". Você pode modificar e colocar qualquer nome de arquivo
header('Content-disposition: attachment; filename="' . $arquivo . '";');
// Indica ao navegador qual é o tamanho do arquivo
header('Content-Length: ' . filesize($caminho_download));
// Busca todo o arquivo e joga o seu conteúdo para que possa ser baixado
readfile($caminho_download);
exit;

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Teu button não tem muita coisa de button não. É um link dentro de um form.

 

Aonde você possui a lista de arquivos para serem baixados? Está salvo no banco de dados ou são arquivos de uma pasta em específico?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estão no servidor... consegui resolver assim(códigos abaixo), porem agora tem um problema no xml, que ao baixar ele, o script ta inserindo a pagina junto(o corpo do site), no caso, abaixo do do conteudo do xml...

 

vendas.php

<form method="post">
    <input type="text" name="pdf_palterm" id="pdf_palterm" placeholder="."/>
    <label for="pdf_palterm">Digite o nº do PDF</label>
    <input type="text" name="xml_palterm" id="xml_palterm" placeholder="."/>
    <label for="xml_palterm">Digite o nº do XML</label>
    <input type="submit" name="baixa_pdf" id="" class="btn btn-primary" value="Baixar PDF">
    <input type="submit" name="baixa_xml" id="" class="btn btn-success" value="Baixar XML">
</form>

 

 

download.php

if (isset($_POST['baixa_xml'])) {
    $arquivo = "\NFE" . $_POST['xml_palterm'] . ".xml";

    header('Content-Disposition: attachment; filename=' . $arquivo);
    readfile('\\servidor\NFEPalterm' . $arquivo);

}

if (isset($_POST['baixa_pdf'])) {
    $arquivo = "\Nota_" . $_POST['pdf_palterm'] . ".pdf";
    header('Content-Disposition: attachment; filename=' . $arquivo);
    readfile('\\servidor\PDFPalterm' . $arquivo);

}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

[Resolvido]

O problema era a falta do exit() no final, então nao finalizava o post do xml e inseria o conteudo da pagina junto... 

 

download.php

if (isset($_POST['baixa_xml'])) {
    $arquivo = "\NFE" . $_POST['xml_palterm'] . ".xml";

    header('Content-Disposition: attachment; filename=' . $arquivo);
    readfile('\\servidor\NFEPalterm' . $arquivo);

exit();//FALTAVA 
}

if (isset($_POST['baixa_pdf'])) {
    $arquivo = "\Nota_" . $_POST['pdf_palterm'] . ".pdf";
    header('Content-Disposition: attachment; filename=' . $arquivo);
    readfile('\\servidor\PDFPalterm' . $arquivo);

exit();//FALTAVA 
}

 

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 Marcos RJ
      Olá pessoal. Tranquilis?
       
      Tenho um sistema onde haverá múltiplos usuários. Cada usuário terá seu próprio subdomínio. Ex.:
      fernandopessoa.sistema.com.br carloschagas.sistema.com.br Para isso criei os subdiretórios no servidor e em cada um deles criei uma regra no .htaccess fazendo o redirecionamento para o sistema que se encontra na pasta raiz. Vejam:
      RewriteEngine on RewriteCond %{HTTP_HOST} ^fernandopessoa.sistema.com.br$ [OR] RewriteCond %{HTTP_HOST} ^www.fernandopessoa.sistema.com.br$ RewriteRule ^(.*)$ http://www.sistema.com.br/acesso/$1 [P] O problema é que quando ele cria esse redirecionamento para o sistema, não consigo identificar quem é o cliente, ou seja, se é o fernandopessoa ou carloschagas, etc.
      Como eu poderia fazer para identificar esse cliente? Não tenho muita experiência com .htaccess, porém tentei algo como:
      RewriteEngine on RewriteCond %{HTTP_HOST} ^fernandopessoa.sistema.com.br$ [OR] RewriteCond %{HTTP_HOST} ^www.fernandopessoa.sistema.com.br$ RewriteRule ^([a-z0-9-]+).sistema.com.br$ http://www.sistema.com.br/acesso?cliente=$1 [P] Mas não funcionou, pois está dando erro 403 (permissão). No PHP posso pegar com o $_REQUEST.
       
      Obrigado
    • Por Adriano Weverton
      Necessito de ajuda em relação a como gerar um pdf pegando imagens do banco de dados utilizando a biblioteca fpdf e se for possível colocar um limite de resolução padrão. De forma que a imagem fique depois da "opc5_quest" ...
       
      $numero = 1; $numero <10; foreach ($dados as $tb_questoes){ if ($numero <10) { $pdf->MultiCell(190, 4, utf8_decode (''.'0'.$numero++.') '.$tb_questoes["enunciado_quest"]), 0, 'L', 0, 0, '', '', true); }else{ $pdf->MultiCell(190, 4, utf8_decode (''.$numero++.') '.$tb_questoes["enunciado_quest"]), 0, 'L', 0, 0, '', '', true); } $pdf->Ln(3); $pdf->MultiCell(190, 4, utf8_decode ('(A) '.$tb_questoes["opc1_quest"]), 0, 'L', 0, 0, '', '', true); $pdf->Ln(3); $pdf->MultiCell(190, 4, utf8_decode ('(B) '.$tb_questoes["opc2_quest"]), 0, 'L', 0, 0, '', '', true); $pdf->Ln(3); $pdf->MultiCell(190, 4, utf8_decode ('(C) '.$tb_questoes["opc3_quest"]), 0, 'L', 0, 0, '', '', true); $pdf->Ln(3); $pdf->MultiCell(190, 4, utf8_decode ('(D) '.$tb_questoes["opc4_quest"]), 0, 'L', 0, 0, '', '', true); $pdf->Ln(3); $pdf->MultiCell(190, 4, utf8_decode ('(E) '.$tb_questoes["opc5_quest"]), 0, 'L', 0, 0, '', '', true); $pdf->Ln(4); }  
    • Por MarceloSan
      Pessoal, estou com um problema.
      Preciso pegar o código do cliente, pra salvar uma foto tirada na webcam em outra tabela, nessa tabela tem as colunas id, código_cliente, image. Consigo salvar o caminho da foto normal, só que precisa salvar o código do cliente, quando eu coloco o código manualmente salva, mas quando eu uso o .$_GET['codigo']. não puxa o código do cliente, não estou conseguindo ver o que há de errado.
      Segue o código abaixo.
       
       
      <?php
          include "../lib/config.inc.php";
          include "../lib/func.inc.php";
          include "../lib/classes.inc.php";
       require_once( dirname( __FILE__ ) . '/connectionClass.php' );
       require_once '../lang/'.$idioma.'.php';
       class webcamClass extends connectionClass{
          
          
          private $imageFolder="webcamImage/";
          
          //This function will create a new name for every image captured using the current data and time.
          private function getNameWithPath(){
              $name = $this->imageFolder.date('YmdHis').".jpg";
              return $name;
          }
          
          
          public function showImage(){
              $file = file_put_contents( $this->getNameWithPath(), file_get_contents('php://input') );
              if(!$file){
                  return "ERROR: Failed to write data to ".$this->getNameWithPath().", check permissions\n";
              }
              else
              {
                  $this->saveImageToDatabase($this->getNameWithPath());         
                  return $this->getNameWithPath();
              }
              
          }
          
         
          public function changeImagetoBase64($image){
              $path = $image;
              $type = pathinfo($path, PATHINFO_EXTENSION);
              $data = file_get_contents($path);
              $base64 = 'data:image/' . $type . ';base64,' . base64_encode($data);
              return $base64;
          }
          
          
          public function saveImageToDatabase($imageurl){
              
              $image=$imageurl;
      //        $image=  $this->changeImagetoBase64($image);          
              if($image){
                  $query="Insert into snapshot (codigo_paciente, Image) values('".$_GET['codigo']."', '$image')";
                  //$query="Insert into snapshot (codigo_paciente, Image) values('codigo', '$image')";
                  $result= $this->query($query);
                  if($result){
                      return "Image saved to database";
                  }
                  else{
                      return "Image not saved to database";
                  }
              }
          }
              
      }
    • Por fellipe.arakaki
      Boa tarde, sou novo no php e estou tentando listar os produtos do banco na pagina web que fiz, porém eu ja tentei listar os dados colocando a table dentro da tag <?php> e fora da tag php, e nenhum dos dois jeitos exibe os dados, eu tambem testei a query e quando dei echo no array ele esta imprimindo todos os valores os dados das tabelas bo banco porem nao mostra na tabela, alguem poderia me ajudar com esse problema? Nos dois casos as colunas são exibidas mas os dados não.
      Segue anexo o código da pagina e da query que eu criei:
       
       




    • Por andersonx
      Galera, estou desenvolvendo um sistema, e estou mexendo agora, na parte de recuperação de senha, segui um tutorial que achei bem interessante, no YT, fiz tudo que o cara fez, mas esta aparecendo um erro , na hora de enviar o email, usando um sistema de hospedagem externo, 
       
      Código para recuperação: 
       
      <head>
        <?php 
                date_default_timezone_get("America/Ponta_Pora");
              include "../includes/inc_head.php"; 
              include "../../helpers/conexao.php";  
            
              if(isset($_POST['acao']) && $_POST['']=='recuperar'):
                  $email = strip_tags(filter_input(INPUT_POST,'emailrecupera',FILTER_SANITIZE_STRING));
                  $verificar = mysqli_query($conexao,"SELECT email FROM educadores  WHERE email='$email'");
                  if(mysqli_num_rows($verificar==1)){
                      
                  $codigo = base64_encode($email);
                  $data_expirar= date('Y-m-d H:i:s', strtotime('+ 1 day'));
                  
                  $mensagem='<p>Recebemos uma tentativa de redefiniçao de senha  para esse email, causo não foi voce que enviou,'
                          . ' desconsidere esse email, caso  contrário clique no link abaixo <br /> '
                          . '<a href="nomedosite/recuperar_senha.php?codigo='. $codigo.'  ">Recuperar Senha </a>    </p>';
                  $email_remetente='andersonshipuden@gmail.com';
                  
                  
                  
                          $headers = "MINE-Version: 1.1\n";
                          $headers .= "Content-type: text/html; charset-iso-8859-1\n";
                          $headers .= "From: $email_remetente\n";
                          $headers .= "Return-Path: $email_remetente\n";
                          $headers .= "Reply-To: $email\n";
                          $inserir= mysqli_query($conexao,"INSERT INTO codigos  SET codigo='$codigo', data='$data_expirar'");
                         if($inserir){
                           if (mail("$email", "Assunto", "$mensagem", $headers, "-f$email_remetente")){
                            echo 'Enviamos um email com um link para a recuperaçao de senha para o endereço de e-mail, que enviou';
                            
                        
                             
                         }                    
                       }
                  
                  }
                  
                
                 
               
                  
                  endif;
              
         /*$headers = "MINE-Version: 1.1\n";
         $headers .= "Content-type: text/plain; charset-iso-8859-1\n";
         $headers .= "From: $email_remetente\n";
         $headers .= "Return-Path: $email_remetente\n";
         $headers .= "Reply-To: $email_usuario\n";
         mail("$email_usuario", "Assunto", "$mensagem", $headers, "-f$email_remetente");
         
              */
              
              ?>
         
             
             
              
              
              
             
      </head>
      <body  >
        <div class="container-fluid">
                  <?php include "../includes/inc_nav.php"; ?>
              </div>
          
         
          
          <div class="form-horizontal" id="img" >
            <div class="row">
                  
                   
                     
                       
                       <center>    <h4 id="tit"><strong>Recuperar Senha</strong></h4> </center>
                     
                       <form id="f"  class="form-horizontal" method="POST" enctype="multipart/form-data">
                    
                           
                          <img src="../img/logo.png" id="fff">
                         <br>
                         <br>
                         <br>
                          <br>
                           <br>
                         <br>
                         <center>    <h6 id="recs"><strong>Para recuperar sua  Senha inseira o seu Email Cadastrado!</strong></h6> </center>
                         <br>
               
                         
                        <div class="control-group">
                          <label class="control-label">Email:</label>
                          <div class="controls glyphicon glyphicon-envelope" >
                              <input type="text" name="emailrecupera" value="" class="form-control"  placeholder="Email" required>
                              <input type="hidden" name="acao" value="recuperar" class="form-control" required>
                               
                          </div>
                        </div>
                     
                     
                        <div class="control-group">
                          <div class="controls">
                              <button type="submit"  value="recuperar Senha" id="submit" class="btn-success" >Enviar</button>
                          </div>
                            <br>
                            <div class="controls" >
                                      <button type="reset"  id="reset" class="btn-warning">Limpar Campos</button>
                          </div>
                          
                        </div>
                           <br>
                         <br>
                         <br>
                          <p class="aligncenter margintop500" id="registrar" >
                            Nao Possui uma  conta? <a href="registrar.php"  aria-hidden="true" >Registre-se</a>
                          </p>
                          
                      </form>
                    </div>  
          </div>
       
      ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      Essa é a segunda tela, quando ele clicar no codigo enviado por email par aele
      <head>
       

        <?php 
               
              include "../includes/inc_head.php"; 
              include "../../helpers/conexao.php";        
              
               if(isset($_GET['codigo'])){
                   $codigo= $_GET['codigo'];
                   $email_codigo= base64_decode($codigo);
                   $selecionar = mysqli_query($conexao,"SELECT * FROM codigos WHERE codigo = '$codigo' AND  data > NOW()");
                   if(mysqli_num_rows($selecionar)>=1){
                       if(isset($_POST['acao']) && $_POST['acao']=='mudar'){
                           $nova_senha= $_POST['novasenha'];
                           $atualizar= mysqli_query($conexao,"UPDATE educadores SET senha ='$nova_senha' WHERE email='$email_codigo'");
                           if($atualizar){
                               $mudar= mysqli_query($conexao,"DELET FROM codigos WHERE codigo='$codigo'");
                                    
                               echo 'Sua senha foi modificada com sucesso';
                           }
                       }
             ?>
          
          <div class="row">
                  
                   
                     
                       
                       <center>    <h4 id="tit"><strong>Por Favor, insira a sua  nova senha:</strong></h4> </center>
                       <form id="f"  class="form-horizontal" method="POST" enctype="multipart/form-data">
                    
                           
                          <img src="../img/logo.png" id="fff">
                         <br>
                         <br>
                         <br>
                          <br>
                           <br>
                         <br>
                         <center>    <h6 id="recs"><strong>Para atualizar sua  Senha insira sua nova senha no campo abaixo!</strong></h6> </center>
                         <br>
               
                        <div class="control-group">
                          <label class="control-label">Nova Senha:</label>
                          <div class="controls glyphicon glyphicon-envelope" >
                              <input type="password" name="novasenha" value="" class="form-control"  placeholder="Nova Senha" required>
                              <input type="hidden" name="acao" value="mudar" class="form-control" required>
                               
                          </div>
                        </div>
                     
                     
                        <div class="control-group">
                          <div class="controls">
                              <button type="submit"  value="Mudar Senha" id="submit" class="btn-success" >Salvar Senha</button>
                          </div>
                            <br>
                            <div class="controls" >
                                      <button type="reset"  id="reset" class="btn-warning">Limpar Campos</button>
                          </div>
                          
                        </div>
                           <br>
                         <br>
                         <br>
                          
                      </form>
                    </div>  
          
          
          
          <?php 
                       
                   }else {
                       echo 'Desculpe mais esse link já expirou';
                       
                   }
                   
               }
                  
                ?>  
        
              
         Esta dando um erro, na seguinte linha :    if(mysqli_num_rows($verificar==1))
       
      esse erro: 
       
      Notice: Object of class mysqli_result could not be converted to int in /storage/ssd4/199/6565199/public_html/EducAtiv/view/home/recuperarSenha.php on line 14

      Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in /storage/ssd4/199/6565199/public_html/EducAtiv/view/home/recuperarSenha.php on line 14
       
             
             
              
          
×

Informação importante

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