Ir para conteúdo

POWERED BY:

Arquivado

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

Camila de Paula

Erro ao visualizar imagem, puxando caminho salvo no Mysql

Recommended Posts

Testou com a exibição da imagem do mesmo ID que usou nos testes diretos com o script mostrar_imagem.php?

Talvez o problema seja por causa do header. Se o listar.php tentar exibir imagens que não sejam jpg, o mostrar_imagem.php não exibirá corretamente, pois você forçou o mime-type image/jpeg.

 

O correto seria salvar o mime-type durante o upload ou usar as funções do fileinfo para detectar o mime-type. Veja: http://php.net/manual/pt_BR/function.finfo-file.php

 

 

Beraldo,

Quando coloco o id na página listar.php, ela mostra a imagem corretamente. Se o problema for no header, como faço para que ele permita as demais extensões?

 

Durante o upload, estou fazendo assim:

$arquivo = isset($_FILES["imagem"]) ? $_FILES["imagem"] : FALSE;


$config["tamanho"] = 609900;
$config["largura"] = 600;
$config["altura"]  = 880;


if($arquivo)
{  
   
   if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $arquivo["type"]))
   {
       $erro[] = "Arquivo em formato inválido! A imagem deve ser jpg, jpeg, 
 	bmp, gif ou png. Envie outro arquivo";
   }
   else
   {
       
       if($arquivo["size"] > $config["tamanho"])
       {
           echo "<script>alert('Arquivo em tamanho muito grande! 
 A imagem deve ser de no máximo " . $config["tamanho"] . " bytes. 
 Envie outro arquivo');</script>"; 
       }
           }
  
   if(sizeof($erro))
   {
       foreach($erro as $err)
       {
           echo " - " . $err . "<BR>";
       }

       echo "<a href=\"cad_motorista.php\">Fazer Upload de Outra Imagem</a>";
   }

  
   else
   {
     
       preg_match("/\.(gif|bmp|png|jpg|jpeg){1}$/i", $arquivo["name"], $ext);

       $imagem_nome = md5(uniqid(time())) . "." . $ext[1];
  
       $imagem_dir = "foto/" . $imagem_nome;

       move_uploaded_file($arquivo["tmp_name"], $imagem_dir);
 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve o mime-type (valor de $arquivo["type"]) no banco de dados, junto com o path da imagem.

Supondo que o mime-type seja salvo no campo mime_type do bd, ao exibir a imagem, faça mais ou menos isto na linha do header:

 

 

// ...
header( 'Content-type:  ' . $imagem['mime_type'] );
// ...
readfile( $imagem['caminho'] );

 

Se não quiser salvar o mime-type no banco, pode usar a lib fileinfo como citei antes

Compartilhar este post


Link para o post
Compartilhar em outros sites

Salve o mime-type (valor de $arquivo["type"]) no banco de dados, junto com o path da imagem.

Supondo que o mime-type seja salvo no campo mime_type do bd, ao exibir a imagem, faça mais ou menos isto na linha do header:

// ...
header( 'Content-type:  ' . $imagem['mime_type'] );
// ...
readfile( $imagem['caminho'] );

Se não quiser salvar o mime-type no banco, pode usar a lib fileinfo como citei antes

 

 

Eu não consegui salvar o mime-type no bd. Pode me ajudar?

 

Também tentei o fileinfo e deu esse erro:

Fatal error: Call to undefined function finfo_open() in E:\vhosts\transarqui.com.br\httpdocs\sistema_teste\cadastro\motoristas\listar.php on line 37

Vi que este erro pode ser porque o fileinfo é aceito a partir do php 5.3.

Meu servidor está na versão 5.2.17. Se for por causa da versão do PHP, tem outra forma de tentar fazer isso? Vai dar um trabalhão ter que pedir (e conseguir) que o servidor atualize a versão...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será bem mais simples salvar o mime-type no bd do que conseguir um upgrade do PHP... :P

 

Você usa $arquivo["type"] no if, para validar se é imagem, certo? Essa mesma variável será usada no INSERT que salva a imagem no banco. Crie um novo campo na tabela para armazenar o mime-type. Use um campo de texto (VARCHAR).

 

No mesmo INSERT onde você salva o path da imagem, salve também o mime-type

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será bem mais simples salvar o mime-type no bd do que conseguir um upgrade do PHP... :P

 

Você usa $arquivo["type"] no if, para validar se é imagem, certo? Essa mesma variável será usada no INSERT que salva a imagem no banco. Crie um novo campo na tabela para armazenar o mime-type. Use um campo de texto (VARCHAR).

 

No mesmo INSERT onde você salva o path da imagem, salve também o mime-type

 

 

Salvei o mime_type no banco , e ele salva assim: image/png ou image/jpg (testei os dois tipos).

 

Coloquei o header da forma que vc falou e quando acesso a página mostrar_imagem.php com o id, ele continua mostrando a imagem, certinho.

 

Mas a página listar.php ainda não funciona (se testo com o numero do id, aparece a imagem).

 

Meus neurônios já estão pegando fogo ... :upset:

Compartilhar este post


Link para o post
Compartilhar em outros sites

É neste trecho que está o problema?

 

<td> <img src=mostrar_imagem.php?id=" .$imagem[ 'id']."></td>

 

Tente assim:

 

<td> <img src=\"mostrar_imagem.php?id=" .$imagem[ 'id']."\"></td>

 

Execute e veja se funciona. Também abra o código-fonte gerado pelo navegador (geralmente CTRL+U) e procure esse trecho no código. Veja como está a tag img e cole aqui

Compartilhar este post


Link para o post
Compartilhar em outros sites

É neste trecho que está o problema?

<td> <img src=mostrar_imagem.php?id=" .$imagem[ 'id']."></td>

Tente assim:

<td> <img src=\"mostrar_imagem.php?id=" .$imagem[ 'id']."\"></td>

Execute e veja se funciona. Também abra o código-fonte gerado pelo navegador (geralmente CTRL+U) e procure esse trecho no código. Veja como está a tag img e cole aqui

 

 

Ainda não...

No código fonte aparece assim:

<img src="mostrar_imagem.php?id=5">

Cada cadastro aparece um número diferente no ID, alguns estão repetidos e tem um que o ID é a letra "a".

Os id's verdadeiros têm 3 dígitos.

 

 

Obs: Cada cadastro tenho um link para excluir ou editar, e nestes links, aparece o id correto do cadastro:

<a href="excluir.php?id=493">

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.