Ir para conteúdo

POWERED BY:

Arquivado

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

Charles MTBROKER

Mostrar Imagem de campo BLOB mostra caracteres binários

Recommended Posts

Olá amigos do Fórum.

 

Meu nível de PHP está, pela facilidade da linguagem, crescendo a cada dia.

Porém, campos BLOB ainda me dão um pouco de dor de cabeça.

 

Armazeno corretamente no banco de dados.

 

Ocorre que ao puxar para aparecer na tela (montar um album de fotos por exemplo) aparecem apenasos dados binários.

 

OS CAMPOS SAO ESTES:

 

idfoto - codigo sequencial

datafoto - data postagem

nomefoto - nome dado à foto

fotopequena - thumbnail

fotogrande - foto propriamente dita

ver - se 1, a foto pode aparecer. se for 0,nao aparece..coloquei no select certinho...

 

 

Vejam o código e se alguem quiser ajudar, agradeço:

 

include '../conexaomysql/conecta.php';
$sql = "SELECT * FROM fotos WHERE ver='1' ORDER BY nomefoto DESC";
$resultado = mysql_query($sql) 
or die ("Não foi possível realizar a consulta: ".mysql_error());
if (@mysql_num_rows($resultado) == 0) die('Nenhuma Foto Cadastrada!');
echo '<p class="style1">';
echo '<table width="530" border="0" cellspacing="1" cellpadding="1">';
echo '<caption align="top">';
echo 'ESCOLHA O TRABALHO PUBLICADO';
echo '</caption>';
echo "</table>";
echo "</p>";
echo "aqui começa................................";
echo '<table border="1">';
while ($linha=mysql_fetch_array($resultado))
{
	echo '<tr align="left"><th class="style1" height="30" align="left" valign="middle" scope="col">';
	header("Content-Type: image/jpeg");
	echo $linha['fotogrande'];
	header("Content-Type: text/html");
	echo '</tr>';
	echo "<br>ERA PRA RODAR MAS NAO APARECE";
}
echo "</table>";
?>

Então amigos, o resultado que tenho com isso é:

 

http://localhost/fabiabiscuit/fotos/fotosnovo.php (O ENDEREÇO E CAMINHO DO ARQUIVO QUE CHAMA A IMAGEM e nao a imagem.

 

Alguem pode me dar uma dica sobre isso?

 

O erro tá no header??

header("Content-Type: image/jpeg");

Abração e obrigado antecipadamente.

 

Charles Mtbroker

Compartilhar este post


Link para o post
Compartilhar em outros sites

Charles, já tive o mesmo problema e infelizmente não sei como resolver.

 

O que eu fiz para solucionar isso foi colocar as imagens em um diretório separado e fazer busca normal. Cada imagem recebia como nome o ID dela no banco de dados. Se existir a imagem cujo nome, por exemplo é 123654+".jpg" aparece, se não, não faz nada.

 

Assim eu garanto que funcionará.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pois é amigo SetaMB.

 

Armazenar as imagens no servidor eu sei e sempre uso assim.

Mas nao tem muita lógica a gente nao resolver isso.. risos.

Se pode armazenar..que graça tem se nao podemos mostrar?

Imagino que terei de ver uma função do proprio php que traga de binario pra hexa de novo.. e acrescentar a extensão.. sei la´.. vamos pensar..juntos...

 

É um desafio que vou ter de fazer. E postarei aqui com grandeza de detalhes um problema que todos os foruns nos jogam com a barriga.

 

Fica na paz sempre.

 

Charles MTBROKER

Compartilhar este post


Link para o post
Compartilhar em outros sites

O amigo desculpe ai se eu expressei mal :unsure: , o que quiz dizer, é que imagem no servidor é um problema logo ficara sobrecarregado e voce tera problemas, http://forum.imasters.com.br/public/style_emoticons/default/blush.gif

 

mas fiz um código rápidao testei e deu certo

 

$conn = @mysql_connect("localhost","root","") or die(mysql_error());
@mysql_select_db("testes") or die(mysql_error());
$sql = "SELECT arquivo, mimetype, nome_arquivo FROM fotos WHERE ver='1' ORDER BY nomefoto DESC"; //faço a query para selecionar o arquivo
$res = @mysql_query($sql,$conn) or die(mysql_error());//executa a query
if(mysql_num_rows($res) > 0){
	while($row = mysql_fetch_array($res,MYSQL_ASSOC)){ //pega os dados retornados
		$mimetype = $row['mimetype'];
		$img = $row['arquivo'];
		$nome = $row['nome_arquivo'];
	}
	header('Content-Disposition: attachment; filename="'.$nome.'"'); //coloca um header para forçar o download e o nome do arquivo
	header("Content-type:".$mimetype); //passa o mimetype do arquivo
	echo $img; //printa o código do arquivo. Note que não usei stripslashes...
}else{
	echo "Não encontrado";
	exit;
}

teste ai e ve no que da abraços

Compartilhar este post


Link para o post
Compartilhar em outros sites

AMIGO AcessoMT

 

Achei muto legal voce estar tentando me ajudar. Obrigado mesmo.

 

Gostei da sugestão e fiz exatamente como voce disse.

Veja meu código com os campos corretos, ONDE:

 

fotogrande = FOTO NO BLOB

m_fotogrande = MIMETYPE

n_fotogrande = NOME DA FOTO COM EXTENSÃO (pra usar no Content-Disposition)

 

$conn = @mysql_connect("localhost","root","") or die(mysql_error());
@mysql_select_db("fabiabiscuit") or die(mysql_error());
$sql = "SELECT fotogrande, m_fotogrande, n_fotogrande FROM fotos WHERE ver='1' ORDER BY data DESC"; 
$res = @mysql_query($sql,$conn) or die(mysql_error()); 
if(mysql_num_rows($res) > 0){
	while($row = mysql_fetch_array($res,MYSQL_ASSOC)){
		$mimetype = $row['m_fotogrande'];
		$img = $row['fotogrande'];
		$nome = $row['n_fotogrande'];
	}
	header('Content-Disposition: attachment; filename="'.$nome.'"'); 
	header("Content-type:".$mimetype); 
	echo $img; 
}else{
	echo "Não encontrado";
	exit;
}

Bom amigo.. Você deve poder finalizar isso entao.. Assim:

 

Esse script SALVA a imagem com a extensão correta no computador de quem executa. Porém, não o mostra na tela. Mas até ai beleza.. Se salva..eu posso mostrar (ao menos imaginei que sim)

Mas ao tentar abrir.. no meu caso.. Jpg´s.. Dá visualização não disponível.

 

Se coloco umas 20 fotos no banco (no site terão centenas, milhares) salva todas ao invés de mostrar uma a uma.. risos

 

Vamos tentar de novo?

 

Abração

 

Charles MTBROKER

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.