Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

miqueiasrafael

[ Download de PDF ] por ID dinamicamente em PHP e mysql

Recommended Posts

Humm... Tá vendo o ".jpg" ali? Tipo, não tem que estar ali, não acha? Afinal de contas, estamos falando de um PDF...

 

Bom, quais são os PDFs existentes na pasta "../../public/_metaDadosProdutos/_pdf-s/"? Verifique se algum dos arquivos existentes correspondem ao ID 8...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Zerei a tabela e fiz esse exemplo:

 

no banco ele mostra assim: >>> d41d8cd98f00b204e9800998ecf8427e.pdf

 

E no diretório mostra assim: >>> 3cc42a217b2a0470c6f750652ac9b040 na extenção .PDF e está abrindo normalmente!



Veja o SQL do Banco:

 

 

--
-- Estrutura da tabela `form_produtos`
--

CREATE TABLE IF NOT EXISTS `form_produtos` (
  `prod_id` int(11) NOT NULL AUTO_INCREMENT,
  `prod_titulo` varchar(150) NOT NULL,
  `prod_descricao` varchar(300) NOT NULL,
  `prod_imagem` varchar(100) NOT NULL,
  `prod_pdf` blob NOT NULL,
  PRIMARY KEY (`prod_id`),
  UNIQUE KEY `prod_id` (`prod_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=135 ;

--
-- Extraindo dados da tabela `form_produtos`
--

INSERT INTO `form_produtos` (`prod_id`, `prod_titulo`, `prod_descricao`, `prod_imagem`, `prod_pdf`) VALUES
(134, 'ok', 'ok', 'd41d8cd98f00b204e9800998ecf8427e.jpg', 0x64343164386364393866303062323034653938303039393865636638343237652e706466);
 
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom montei desse jeito, algumas variáveis estão recebendo o seguinte post:

 

    $titlePro = $_POST['titulo'];
    $descrPro = $_POST['descricao'];
    $pdf = $_FILES["pdf"];
    $foto = $_FILES["produto"];

Porém acho que está passando informação de uma variável para outra no caso em questão a $foto para o $pdf aí o INSERT ferra tudo, acaba ficando um pouco confuso pois o código já está imenso! Pior que estou precisando resolver isso pra ontem....

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, no type: Blob do Mysql

 

 

Alguém tem um code modelo pra esse caso? obrigado a todos desde já!

 

 

 

 

Alguém tem um code modelo pra esse caso? obrigado a todos desde já!

 

 

 

 

Alguém tem um code modelo pra esse caso? obrigado a todos desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, vamos mudar a estratégia então... Vou colocar um exemplo de como eu faria, ok?

 

:seta: Gravando o nome do PDF:

 

$nome_pdf = md5($id) . ".pdf"; // Eu utilizaria o ID do usuário com md5()

Aqui eu guardaria na coluna prod_pdf essa variável $nome_pdf conforme exemplo acima, aplicando um md5() no id do usuário apenas, concatenando com a extensão.

 

:seta: Código final:

 

$sql = "SELECT prod_pdf FROM form_produtos WHERE  prod_id = '$id'";
$res = mysql_query($sql) or die('Erro ao selecionar arquivo: ' . mysql_error());
 
$conta = mysql_num_rows($res);
 
if ($conta == 1) {
    $dados = mysql_fetch_object($res);
    $arquivo = "../../public/_metaDadosProdutos/_pdf-s/". $dados->prod_pdf; // Aqui o nome do arquivo já está com a extensão, pois ela foi gravada em prod_pdf
 
    if(!file_exists($arquivo)) {
        die("Arquivo ".$arquivo." não encontrado!");
    }
 
    header("Content-type: application/pdf");
 
    // Nome do arquivo PDF que será baixado, é assim que aparecerá para o usuário na caixa do "Salvar como..."
    header("Content-Disposition: attachment; filename=\"_Ficha-Tecnica.pdf\"");
 
    readfile($arquivo);
} else {
    echo '<script> alert("Arquivo não encontrado!");</script>';
}

 

O seu problema acho que esteja no valor que está sendo armazenado no banco de dados, na coluna prod_pdf, e o nome do PDF fisicamente deve estar diferente, por isso não está encontrando o arquivo.

 

Precisa verificar o processo onde está criando este PDF, veja como o nome do arquivo está sendo gerado, faça um teste desse jeito que sugeri, cria o nome do arquivo utilizando o id do cara com md5() apenas e salva isso no banco também, obviamente.

 

:joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu sei, a criação a que referencio é dar o nome ao arquivo, quando você faz o move_uploaded_file você tem que especificar o nome do arquivo carregado, e é exatamente aqui onde você utilizaria o nome do jeito que sugeri, entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí galera segue a solução:

 

 

<?php

include '../config.php';

/*
 *                 EMAIL : rafaelh3r@yahoo.com.br
 *                 FONE : 55+(91)8389-9330 / 88235532
 *      COPYRIGHT : © 2013 GRUPOSTONE
 */

$prod_id = $_GET['id'];

$sql = "SELECT prod_pdf FROM form_produtos WHERE prod_id = '$prod_id'";
$res = mysql_query($sql) or die('Erro ao selecionar arquivo: ' . mysql_error());

$conta = mysql_num_rows($res);

if ($conta == 1) {
    $dados = mysql_fetch_object($res);

// Caminho dos arquivos PDF
    $arquivo = "../../_pdf-s/" . $dados->prod_pdf . "";

    if (!file_exists($arquivo)) {
        die("Arquivo " . $arquivo . " não encontrado!");
    }
    header("Content-type: application/pdf");

    // Nome do arquivo PDF
    header("Content-Disposition: attachment; filename=\"_Ficha-Tecnica.pdf\"");
    readfile($arquivo);
} else {
    echo '<script> alert("Arquivo não encontrado ou não existe!");</script>';
}
?>

 

:seta: O link que chama a função dentro de um 'WHILE' especificamente por ID

 

 

 <p><a href="../../_produtos_descricao_pdf.php?id=<?= $stonelist->prod_id ?>" target="_blank">PDF</a></p>

 

Obrigado a todos galera!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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