Ir para conteúdo

POWERED BY:

Arquivado

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

gustavoalencar

[Resolvido] Cadastro e busca arquivo pdf

Recommended Posts

Estou tentando finalizar este código de busca de arquivo, peguei o mesmo aqui no fórum, mais ainda faltam alguns detalhes, quem puder ajudar...

Irei cadastrar vários relatórios de alunos, quando o aluno logar com usuário e senha, dentro deste módulo terá um link para ele baixar apenas o seu relatório em pdf.

Temos dois códigos, o de cadastrar os arquivos no banco e o de fazer a busca.

O de enviar o arquivo para o banco está com um pequeno erro mais está enviando....

O principal mesmo é o de buscar o relatório.

Segue o código da busca

<?php

session_start();

require("verifica.php");

require("configuracao_alunos.php");

$matricula = ($_SESSION[matricula]);

$sql = mysql_query("SELECT matricula FROM cadaluno WHERE matricula='$matricula'");

$res = mysql_fetch_array($sql);

?>

.

.

.

<?php

if (mysql_num_rows($logar)>0 ){

$id = $_SESSION['matricula'];

 

//filtra o select pelo cliente

$sql = "SELECT * FROM relatorioinfantil WHERE matricula = '$id'";

 

//executa os dados

$qr = mysql_query($sql);

 

//retorna o valor da tabela em um array

$linha = mysql_fetch_assoc($qr);

$relatorio = $linha['arquivo'];

//imprime o link

<a href='relatorioinfantil/".$relatorio."'>Link Relatório</a>;

}

else {

echo"<script>alert('Login ou senha incorretos!');</script>";

echo"<script>history.back();</script>";

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual mensgem de erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando faço o cadastro apresenta este errro:

 

warning: copy(relatorioinfantil/...sequencia de numeros.pdf) [funcion.copy]: failed to open stream: Permission denied in /home/...../alunos/relatorioinfantil_upload.php on line 84.

 

A linha 83, 84 e 85

 

// Upload e alocação de arquivo

$this->mover_arquivo = copy($this->arquivo["tmp_name"], $this->arquivo_diretorio);

require_once 'configuracao_alunos.php';

 

Mais aparece a mensagem de arquivo enviado com sucesso e o mesmo é cadastrado no banco de dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Essa mensagem indica que você não deixou permissão de escrita no diretório.

 

É necessário então dar permissões de escrita no diretório para o usuário do Apache (que é o usuário no servidor que faz esse serviço de copiar o arquivo para o diretório tal)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok. Irei ajeitar esse erro e seguir para o código da busca em si, e verificar os erros

 

para post aqui.

 

Valeu

 

Acho que está cadastrando correto, para saber tenho que finalizar o código da busca.

 

<?php

if (mysql_num_rows($logar)>0 ){

$id = $_SESSION['matricula'];

 

//filtra o select pelo cliente

$sql = "SELECT * FROM relatorioinfantil WHERE matricula = '$id'";

 

//executa os dados

$qr = mysql_query($sql);

 

//retorna o valor da tabela em um array

$linha = mysql_fetch_assoc($qr);

$relatorio = $linha['arquivo'];

 

//imprime o link

<a href='relatorioinfantil/".$relatorio."'>Link Relatório</a>;

 

}

 

else {

echo"<script>alert('Login ou senha incorretos!');</script>";

echo"<script>history.back();</script>";

}

 

?>

 

Na linha que está em vermelho aparece erro de:

 

Parse error: syntax error, unexpected '<' in /home/cscj-pi/www/cscj/alunos/relatorioinfantil.php on line 77...

 

Erro simples mais não consegui tirá-lo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acontece que como você está trabalhando dentro do PHP, você precisa imprimir esse texto, então ao invés do que está, ficaria assim:

 

echo "<a href='relatorioinfantil/".$relatorio."'>Link Relatório</a>";

Compartilhar este post


Link para o post
Compartilhar em outros sites

Denis, deu certo quase tudo.

 

Tá cadastrando certinho, quando acesso a página aparece a página com o link relatório,

 

sendo que no caso ele abre a pasta onde está todos os relatórios.

 

No caso tava querendo abrir direto somente o arquivo correspondente a matrícula.

 

Tava olhando o banco de dados e lá tem os campos id, matricula e arquivo,

o id está auto incremento, a matrícula está saindo zerada, o nome do arquivo está ok, codificado com md5...

 

Terai alguma coisa a ver, por conta de ter a pasta com os arquivo e o banco de dados tb.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ops, desculpe Gustavo. Acabei não percebendo a sua resposta.

 

Então, se você deseja abrir diretamente o PDF, você tem que colocar o link PARA o PDF.

 

Por exemplo:

 

João é aluno de matrícula n°88

o PDF correspondente à ele é o abcdef.pdf

então, o link deve ser relatorioinfantil/abcdef.pdf

 

No entanto, como você disse que está abrindo o diretório, parece que o nome do arquivo PDF não está sendo passado para a variável $relatorio;

 

//retorna o valor da tabela em um array
$linha = mysql_fetch_assoc($qr);
$relatorio = $linha['arquivo'];

 

E você também disse que a matrícula está vindo zerada, o que, pelo o que parece, está errado.

Então eu acho q você deveria verificar o seguinte:

 

1. A matrícula do aluno está sendo mesmo gravada corretamente na hora do envio do arquivo PDF? Para poder dizer que aquele PDF é de tal aluno.

2. O nome do campo na tabela que grava o arquivo PDF é "arquivo" mesmo?

3. Nessa linha:

$id = $_SESSION['matricula'];

a variável $id está mesmo recebendo o número de matrícula certo do aluno?

 

Faça essas verificações, por favor, e depois avise aqui.

Mais uma vez, desculpe pela demora.

Compartilhar este post


Link para o post
Compartilhar em outros sites

beleza cara...

 

1. A matrícula do aluno está sendo mesmo gravada corretamente na hora do envio do arquivo PDF? Para poder dizer que aquele PDF é de tal aluno.

 

Na tabela está sendo gravado um id....1, 2, 3.... para cada arquivo

No campo matrícula está ficando em branco.

No campo arquivo gera nome de arquivo MD5.

 

 

2. O nome do campo na tabela que grava o arquivo PDF é "arquivo" mesmo?

 

Sim

 

 

3. Nessa linha:

$id = $_SESSION['matricula'];

a variável $id está mesmo recebendo o número de matrícula certo do aluno?

 

Acho que não está fazendo as associações por conta que não tá gravando o numero da matrícula.

 

Este código aqui abaixo é o do cadastramento do arquivo....

 

<body>

 

<form name="up" action="" method="POST" enctype="multipart/form-data">

Relatório:<input type="file" name="arquivo" value="" /><br/>

Nº de registro do cliente:<input type="text" name="id_cliente" value="" />

<input type="submit" name="submit" value="submeter" />

</form>

 

 

<?php

if (isset ($_POST["submit"])) {

//chmod ("relatorio", 0777);

class upload {

// atributos

var $arquivo;

var $arquivo_nome;

var $arquivo_size;

var $limite="5242880";// Limie: 5MB

var $arquivo_diretorio;

var $mover_arquivo;

var $id_cliente;

var $insere;

var $ren;

var $rand1;

var $rand2;

var $rand3;

var $md5;

 

function envia() {

$this->arquivo=$_FILES["arquivo"];

$this->arquivo_nome=$this->arquivo["name"];

$this->arquivo_size=$this->arquivo["size"];

$this->limite;

$this->matricula=$_POST['matricula'];

$this->ren;

$this->rand1=rand(1,1000000);

$this->rand2=rand(2,20000000);

$this->rand3=rand(3,300000000);

$this->md5=md5($this->rand3);

 

//verifica se existe algum arquivo selecionado

if($this->arquivo_nome==false){

echo"<script>alert('selecione um arquivo ok]');</script>";

echo"<script>history.back();</script>";

exit();

}

 

//verifica tamanho do arquivo

if($this->arquivo_size>$this->limite){

echo"<script>alert('Erro Tamanho do arquivo muito grande tamanho maximo permitido =>[200kb]');</script>";

echo"<script>history.back();</script>";

exit();

}

 

//verifica extenção do arquivo

if(!preg_match("^[a-z A-Z 09 -_]+[.]+[pdf,jpg,png,gif]^",$this->arquivo_nome)) {

echo"<script>alert('Erro arquivo nao permitido para upload Ok');</script>";

echo"<script>history.back();</script>";

exit();

}

// geramos um nome unico para a imagem

$this->ren=$this->rand1.'_'.$this->rand2.'_'.$this->md5.'_'.$this->arquivo_nome;

 

 

// upload e registro de pasta

$this->arquivo_diretorio = "relatorioinfantil/".$this->ren;

 

 

// verifica se arquivo ja existe no diretorio

if(file_exists($this->arquivo_diretorio)) {

echo"<script>alert('Erro o Arquivo ja existe em Nosso Servidor');</script>";

echo"<script>history.back();</script>";

exit();

}

else {

// Upload e alocação de arquivo

$this->mover_arquivo = copy($this->arquivo["tmp_name"], $this->arquivo_diretorio);

 

require_once 'configuracao_alunos.php';

 

// incluimos e enviamos para o banco de dados

$this->insere="INSERT INTO relatorioinfantil (arquivo,matricula)VALUES ('$this->ren','$this->matricula')";

mysql_query($this->insere) or die (mysql_error());

 

echo"<script>alert('Arquivo Enviado com Sucesso');</script>";

echo"<script>window.location.href='relatorioinfantil_upload.php'</script>";

 

}

}// função envia fim

 

}//classe upload fim

$upload=new upload();//objeto instanciado

$upload->envia();

}//bt.submit fim

 

?>

 

</body>

 

O código da consulta...]

 

<?php

if (mysql_num_rows($logar)>0 ){

$id = $_SESSION['matricula'];

 

//filtra o select pelo cliente

$sql = "SELECT * FROM relatorioinfantil WHERE matricula = '$id'";

 

//executa os dados

$qr = mysql_query($sql);

 

//retorna o valor da tabela em um array

$linha = mysql_fetch_assoc($qr);

$relatorio = $linha['arquivo'];

 

//imprime o link

echo "<a href='relatorioinfantil/".$relatorio."'>Link Relatório</a>";

 

}

 

else {

echo"<script>alert('Login ou senha incorretos!');</script>";

echo"<script>history.back();</script>";

}

 

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ok, vamos lá:

 

Pelo o que eu entendi, o form no começo do código é o form que você usa para fazer o upload:

 

1.

Nessa linha:

Nº de registro do cliente:<input type="text" name="id_cliente" value="" />

O nome do campo é id_cliente

 

Aqui

$this->matricula=$_POST['matricula'];

Ele procura por algo chamado "matricula"

 

Se esse campo ($this->matricula) deve mesmo receber o que está no "id_cliente", então você precisa deixá-los iguais. Ou seja, mude o nome do campo ou o $_POST que o recebe.

 

 

eu imagino que você já tenha uma tela de login ou algo assim, que preencha essa variável de sessão $_SESSION['matricula'], porque pelo jeito essa variável é necessária

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara to sem tempo, mais até amanhã dou uma olhada. valeu.

 

Cara,

 

Dei uma olhada no código, onde você falou da linha abaixo:

 

1.

Nessa linha:

Nº de registro do cliente:<input type="text" name="id_cliente" value="" />

O nome do campo é id_cliente

 

 

eu tinha errado pois o nome do campo é somente id, então não alterei a linha abaixo:

 

Aqui

$this->matricula=$_POST['matricula'];

Ele procura por algo chamado "matricula"

 

Após isso fiz novamente cadastros e cadastrou id(cria sequência), a matricula(1105121) que eu coloco

e o nome do arquivo md5...(15533_9904082_d6bdeba98cb55f9ce0c30d223262d1a7_1105121.pdf)

 

Mais quando eu clico no link do relatório continua indo para dentro do diretório onde estão os arquivos...

 

Então pensando aqui, já que cadastro os arquivos no banco, não vou precisar deles dentro do diretório,

como faríamos para ele gerar o arquivo apenas com o nome 123456.pdf e não em MD%, onde altero....

pois aí tentaríamos mudar onde tem o link de imprimir o relatório, colocaríamos algo do tipo

 

<?php echo $matricula; ?>.jpg" ....uso este para puxar as fotos dos alunos mais estas estão dentro de um

diretório...

 

Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,

 

Dei uma olhada no código, onde você falou da linha abaixo:

 

1.

Nessa linha:

Nº de registro do cliente:<input type="text" name="id_cliente" value="" />

O nome do campo é id_cliente

 

 

eu tinha errado pois o nome do campo é somente id, então não alterei a linha abaixo:

 

Aqui

$this->matricula=$_POST['matricula'];

Ele procura por algo chamado "matricula"

 

Após isso fiz novamente cadastros e cadastrou id(cria sequência), a matricula(1105121) que eu coloco

e o nome do arquivo md5...(15533_9904082_d6bdeba98cb55f9ce0c30d223262d1a7_1105121.pdf)

 

Mais quando eu clico no link do relatório continua indo para dentro do diretório onde estão os arquivos...

 

Então pensando aqui, já que cadastro os arquivos no banco, não vou precisar deles dentro do diretório,

como faríamos para ele gerar o arquivo apenas com o nome 123456.pdf e não em MD5, onde altero....

pois aí tentaríamos mudar onde tem o link de imprimir o relatório, colocaríamos algo do tipo

 

<?php echo $matricula; ?>.jpg" ....uso este para puxar as fotos dos alunos mais estas estão dentro de um

diretório...

 

Valeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas pelo que eu vi ele não grava o relatório no banco, mas sim no servidor. O que ele grava é o local onde está o relatório.

 

Sendo assim, o que você precisa fazer é fazer com que o link aponte para onde o relatório está:

 

Ex: O relatório está em relatorios/15533_9904082_d6bdeba98cb55f9ce0c30d223262d1a7_1105121.pdf

 

então o seu link deve apontar para

 

<servidor tal>/relatorios/15533_9904082_d6bdeba98cb55f9ce0c30d223262d1a7_1105121.pdf

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tô para desistir....

 

Ele grava no banco de dados, dentro da tabela relatorioinfantil, grava o id, matricula e o nome (md5) do arquivo.

 

Tenho que pegar a informação de cada aluno dentro do banco. Pois pelo diretório o link abre a pasta de todos os arquivos,

e no caso cada aluno so pode abrir seu arquivo.

 

Esse codigo aqui eu uso para pegar a foto de cada aluno, essa sim fica dentro de um diretorio e não no banco.

<img src="carometro/<?php echo $matricula; ?>.jpg" alt="" width="100" height="125" border="2" />

 

Testei colocanco o pdf mais não funcionou.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Vamos fazer alguns testes então...

 

faça assim, por favor:

 

depois dessa linha

$relatorio = $linha['arquivo'];

 

coloque este código:

echo 'Rel = ' . $relatorio;
die();

 

e me fale qual foi o resultado, sim?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara tava em casa e pensei...rsrsr tudo falta de atenção minha cara....

 

Tirei aquilo que você me pediu...

 

Te explicar, nunca ia da certo por conta que o arquivo pdf que o sistema rocurava era sempre exemplo 123456-0.pdf

 

e no entanto quando eu gerava para o banco fica aquela numeração toda 12352M147852D12554D1212_123456.pdf

 

ai o sistema nunca achava, tirei aqui umas partes que transformava em MD5...

 

Ai envio o arquivo ai grava a matricula, (123456-0) e o arquivo com o nome (123456-0.pdf)

 

Então da certo pois eu logo com a matricula 123456-0, quando clico no relatório ele procura a matricula correspondente

ao arquivo pdf com o mesmo numero.

 

P único problema agora, é que quando eu cadastro a matricula está saindo zerada, o teste que eu fiz acima alterei no banco

a matricula.

 

Vo colocar o codigo aqui para você ver se consegue saber onde é...acho que é algo relaciona onde tem $this->ren;....

 

<?php

if (isset ($_POST["submit"])) {

//chmod ("relatorio", 0777);

class upload {

// atributos

var $arquivo;

var $arquivo_nome;

var $arquivo_size;

var $limite="5242880";// Limie: 5MB

var $arquivo_diretorio;

var $mover_arquivo;

var $id_cliente;

var $insere;

var $ren;

var $rand1;

var $rand2;

var $rand3;

var $md5;

 

function envia() {

$this->arquivo=$_FILES["arquivo"];

$this->arquivo_nome=$this->arquivo["name"];

$this->arquivo_size=$this->arquivo["size"];

$this->limite;

$this->matricula=$_POST['matricula'];

$this->ren;

 

//verifica se existe algum arquivo selecionado

if($this->arquivo_nome==false){

echo"<script>alert('selecione um arquivo ok]');</script>";

echo"<script>history.back();</script>";

exit();

}

 

//verifica tamanho do arquivo

if($this->arquivo_size>$this->limite){

echo"<script>alert('Erro Tamanho do arquivo muito grande tamanho maximo permitido =>[200kb]');</script>";

echo"<script>history.back();</script>";

exit();

}

 

//verifica extenção do arquivo

if(!preg_match("^[a-z A-Z 09 -_]+[.]+[pdf,jpg,png,gif]^",$this->arquivo_nome)) {

echo"<script>alert('Erro arquivo nao permitido para upload Ok');</script>";

echo"<script>history.back();</script>";

exit();

}

// geramos um nome unico para a imagem

$this->ren=$this->arquivo_nome;

 

// upload e registro de pasta

$this->arquivo_diretorio = "relatorioinfantil/".$this->ren;

 

// verifica se arquivo ja existe no diretorio

if(file_exists($this->arquivo_diretorio)) {

echo"<script>alert('Erro o Arquivo ja existe em Nosso Servidor');</script>";

echo"<script>history.back();</script>";

exit();

}

else {

// Upload e alocação de arquivo

$this->mover_arquivo = copy($this->arquivo["tmp_name"], $this->arquivo_diretorio);

 

require_once 'configuracao_alunos.php';

 

// incluimos e enviamos para o banco de dados

$this->insere="INSERT INTO relatorioinfantil (arquivo,matricula)VALUES ('$this->ren','$this->matricula')";

mysql_query($this->insere) or die (mysql_error());

 

echo"<script>alert('Arquivo Enviado com Sucesso');</script>";

echo"<script>window.location.href='relatorioinfantil_upload.php'</script>";

 

}

}// função envia fim

 

}//classe upload fim

$upload=new upload();//objeto instanciado

$upload->envia();

}//bt.submit fim

 

?>

 

Olhando aqui acho que é na hora de enviar os dados, tipo de dados que envio e o tipo que está na tabela do banco, la ja testei com INT e VARCHAR...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique se essa variável: $this->matricula

está sendo preenchida corretamente antes do INSERT.

 

Para testar você pode fazer assim, antes da linha do INSERT

 

// incluimos e enviamos para o banco de dados
echo 'Matricula ' . $this->matricula;
die();

$this->insere="INSERT INTO relatorioinfantil (arquivo,matricula)VALUES ('$this->ren','$this->matricula')";
mysql_query($this->insere) or die (mysql_error());

 

se não estiver, note que você recebe o valor através de um POST que vem do formulário.

> Verifique se existe um campo chamado 'matricula' no seu formulário. Pelo o que eu vi não tem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara deu certo, faltava mesmo o campo matrícula no formulário.

 

A única coisa que falta é colocar uma mensagem para quando o arquivo não existir ele emitir uma mensagem,

 

no caso quando não existe o relatório ele acaba abrindo o diretório com todos os arquivos.

 

<?php

if (mysql_num_rows($logar)>0 ){

$id = $_SESSION['matricula'];

 

//filtra o select pelo cliente

$sql = "SELECT * FROM relatorioinfantil WHERE matricula = '$matricula'";

 

//executa os dados

$qr = mysql_query($sql);

 

//retorna o valor da tabela em um array

$linha = mysql_fetch_assoc($qr);

$relatorio = $linha['arquivo'];

 

 

//imprime o link

echo "<a href='relatorioinfantil/".$relatorio."'>Relatório Semestral - Clique aqui para baixar o arquivo</a>";

}

 

else {

echo"<script>alert('Login ou senha incorretos!');</script>";

echo"<script>history.back();</script>";

}

 

?>

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.