Ir ao conteúdo
  • Cadastre-se

PHP Exibir uma imagem de uma pasta em PHP


Ir à solução Resolvido por DiF,

Posts recomendados

Olá pessoal , bom estou com uma duvida bem simples mas que está me dando nos nervos, eu quero exibir uma imagem de uma pasta, só que eu quero exibir uma unica imagem, no caso eu tenho no banco de dados o nome da imagem, e quero resgatar esse nome do banco ( eu já consigo fazer isso e mostrar na tela este nome) e buscar esse nome resgatado do banco na pasta e assim exibir a imagem

 

Linguagem --> PHP

Banco --> Mysql

 

 

As minhas pastas estão feitas da seguinte forma

 

Projeto (Onde fica os arquivos PHP e HTML)  -----> Img (Onde é salva as imagens cadastradas)

 

O que eu quero fazer é , pegar o nome da imagem cadastrada no banco, e buscar na pasta Img a imagem com o mesmo nome, e assim exibi-la na pagina PHP

 

 

OBS: Eu já pesquisei vários e vários tópicos a respeito disso e nenhum funcionou para o que eu preciso.

 

Minha tentativa

 

<?php 
  while($dado = mysql_fetch_array($con)){
 ?>
 <?php echo $dado["nm_publicacao"]. '<br>'; ?>
 <?php echo $dado["ds_publicacao"]. '<br>';  ?>
 <?php echo $dado["dt_publicacao"]. '<br>';  ?>
 <?php echo $dado["img_publicacao"]. '<br>';  ?>
  // a parte onde está dando erro (Não aparece a imagem) 
 <?php echo "<img src='C:/xampp/htdocs/Projeto/Img/".$dado["img_publicacao"]."' alt='Foto de exibição' /><br />"; ?>
<?php echo '<br>'.'<hr>'; ?>
<?php } ?>

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@

 

Isso é relativamente simples de fazer. 

O primeiro passo você já fez..  mostrar em tela o nome da imagem do banco de dados.. já é meio caminho andado.

 

O próximo passo é mostrar na tela essa imagem em específico.. para isso.. faça do mesmo modo que vem fazendo.. puxando o nome, armazena o caminho da imagem numa variável e mostra em tela.. bem simples mesmo..

 

exemplo prático:

<?php   
  include 'conexao.php';  
  $buscaDados = mysqli_query($conexao, "SELECT nick, email, img FROM tbl_usuarios");         
  
  //armazena em uma variável o caminho concatenado com o nome vindo do banco de dados        
  while($dados = mysqli_fetch_object($buscaDados)):       
  $img = "Img/" . $dados->img;       
  echo" <div class='perfil'>
            <h1>$dados->nick</h1>                
            <p>$dados->email</p>                
            <div class='avatar'>                     
                <img src='$img' alt='$dados->img' />                 
            </div>
         </div>";   
  endwhile; 

O que mais lhe interessa no exemplo é as linhas 10 e 17...  veja que na linha 10 eu armazeno em uma variável o diretório da imagem concatenada com o nome da imagem vindo do banco de dados.

Na linha 17, eu coloco no atributo SRC do elemento img  a variável que contem a imagem concatenada... 

é simples assim.

 

Sem mistérios. 

 

Com isso poderias fazer uma galeria de imagens...   por exemplo... 

Link para o comentário
Compartilhar em outros sites

@

 

Isso é relativamente simples de fazer. 

O primeiro passo você já fez..  mostrar em tela o nome da imagem do banco de dados.. já é meio caminho andado.

 

O próximo passo é mostrar na tela essa imagem em específico.. para isso.. faça do mesmo modo que vem fazendo.. puxando o nome, armazena o caminho da imagem numa variável e mostra em tela.. bem simples mesmo..

 

exemplo prático:

<?php   include 'conexao.php';   $buscaDados = mysqli_query($conexao, "SELECT nick, email, img FROM tbl_usuarios");         while($dados = mysqli_fetch_object($buscaDados)):       //armazena em uma variável o caminho concatenado com o nome vindo do banco de dados        $img = "Img/" . $dados->img;        echo"            <div class='perfil'>                <h1>$dados->nick</h1>                <p>$dados->email</p>                 <div class='avatar'>                     <img src='$img' alt='$dados->img' />                 </div>";   endwhile; 

O que mais lhe interessa no exemplo é as linhas 10 e 17...  veja que na linha 10 eu armazeno em uma variável o diretório da imagem concatenada com o nome da imagem vindo do banco de dados.

Na linha 17, eu coloco no atributo SRC do elemento img  a variável que contem a imagem concatenada... 

é simples assim.

 

Sem mistérios. 

 

Com isso poderias fazer uma galeria de imagens...   por exemplo... 

 

 

Então Dif , eu fiz isso acho que de umas 300 maneiras, e não funcionou, ele não exibe a imagem. estava fazendo em php normal , sem PDO , mudei para PDO para fazer da forma que você mostrou, mas mesmo assim , não mostra

Link para o comentário
Compartilhar em outros sites

  • Moderador

Então...  mostrar em tela não requer nenhuma função ou extensão específica...  basta colocar o nome da imagem concatenada no SRC...  

 

Mas não sei o que se passa.. qual é a mensagem de erro?

 

outra coisa você usa o xampp.. ele é ruim..  muita gente reclama que algumas coisas não funcionam... por isso sempre recomendo usar o EasyPHP 14.1 DEV SERVER .

 

Ele pode apresentar alguns erros de DLL.. mas isso é facilmente simples de arrumar, tanto que fiz um tópico ensinando como arrumar:  http://forum.clubedohardware.com.br/forums/topic/1079461-easyphp-141-solucionando-o-problema-de-dll-no-windows-78/

 

Seria interessante você postar prints do problema.. se possível. Algo aí não está certo..  uma vez que mostrar em tela não requer nada de mais... 

Link para o comentário
Compartilhar em outros sites

<?php	date_default_timezone_set("America/Sao_Paulo");	require 'connect.php'; ?><!DOCTYPE html><html><head>	<meta charset="utf-8">	<meta http-equiv="X-UA-Compatible" content="IE=edge">	<title>Publicação</title></head><body bgcolor="#ffad06">			<?php			$consulta = "SELECT * FROM tb_publicacao";			$con = mysql_query($consulta, $connect) or die ("Deu erro");			        			?>	<?php while($dado = mysql_fetch_object($con)){?><?php echo $dado->nm_publicacao. '<br>'; ?><?php echo $dado->ds_publicacao. '<br>';  ?><?php echo $dado->dt_publicacao. '<br>';  ?><?php echo $dado->img_publicacao. '<br>'; ?><?php$caminho = '\Img'.$dado->img_publicacao;echo "<img src='$caminho'>";?>	<?php echo '<br>'.'<hr>'; ?>	<?php } ?>		</body></html>

Este é o código que estou utilizando

Link para o comentário
Compartilhar em outros sites

  • Moderador

@

 

Bom.. o código está mal feito, se me permite dizer isto sem levar para o lado pejorativo.

Além disso.. o caminho está errado... colocou uma barra antes do diretório..

Outra coisa que chamo a atenção é que não precisa ficar abrindo e fechando a tag php.. faça tudo dentro uma tag só se possível...  os echos também.. quanto menos linhas melhor e mais organizado..

 

Tente desta maneira:

<!DOCTYPE html><html><head>	<meta charset="utf-8">	<meta http-equiv="X-UA-Compatible" content="IE=edge">	<title>Publicação</title></head><body bgcolor="#ffad06">		<?php                        date_default_timezone_set("America/Sao_Paulo");	                include 'connect.php';			$consulta = "SELECT * FROM tb_publicacao";			$con = mysql_query($consulta, $connect) or die ("Deu erro");			$caminho = 'Img/';                        	          while($dado = mysql_fetch_object($con)){                       $imagem = $caminho . $dado->img_publicacao;		     echo" 	                          $dado->nm_publicacao <br/>			  $dado->ds_publicacao <br/>			  $dado->dt_publicacao <br/>			  <img src='$imagem' alt='$dado->img_publicacao'/><hr/>                        ";                 }?></body></html>

O caminho tem que ser:  $caminho = 'Img/';  veja que  a barra é depois da palavra. 

Link para o comentário
Compartilhar em outros sites

Olá Dif , realmente está tudo desorganizado, estou fazendo curso de programação e realmente sou novato nisso, estou realizando meu TCC.

 

Bom vamos lá , copiei e colei o código no meu programa, rodei e o resultado foi este--->

 

https://imageshack.com/i/p1qJFG6Fp

 

Não exibiu a imagem , estou ficando preocupado, preciso muito que isso funcione, o que eu faço ??

Link para o comentário
Compartilhar em outros sites

  • Moderador
  • Solução

@

 

Pelo print vejo que a imagem ficou com ícone de quebrado.. isso é problema de localização do arquivo.. 

 

Tente desta forma:

<!DOCTYPE html><html lang="pt-br"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="description" content=""><meta name="keywords" content=""><meta name="author" content=""><meta name="reply-to" content=""><meta name="generator" content="Eclipse mars"><script src="http://code.jquery.com/jquery-2.1.4.min.js"></script><title>Insert title here</title><style type="text/css">    .perfil{        background: #ccc;        margin-bottom: 15px;    }</style></head><body>	<?php 	   include 'conexao.php';	   	   $caminho = "Img/";	   	   $busca = mysqli_query($conexao, "SELECT nome, email, img FROM perfil");	   while($perfil = mysqli_fetch_object($busca)):	   $img = $caminho . $perfil->img;	      echo"                <div class='perfil'>                    <h1> Dados do usuário </h1>                    <p> Nome: $perfil->nome </p>                    <p> E-mail: $perfil->email </p>                    <img src='$img' alt=''/>Nome da imagem: $perfil->img                </div>                 ";	   endwhile;		?></body></html>

Ia postar umas prints mostrando o resultado.. e as imagens.. mas o imgur ta meio lento...

 

Veja a linha 24, a linha 28  e a linha 34...   

O código.. eu testei e funciona.. assim que o imgur normalizar eu atualizo meu post com as imagens do teste... 

 

Eu insisto no lance de você trocar o xampp pelo EASYPHP.  Desde 2009 eu uso o easyphp e nunca tive problemas com nada... ao contrário de que muita gente tem problemas com certas coisas no xampp ou o wampsever.

Por isso o EasyPHP é o melhor.

 

 

EDIT: Como prometido os prints:

 

Primeiro como está no banco de dados:

51ECB5i.png

 

Agora o código, embora já tenha postado mais acima... nunca é demais postar uma imagem do código no meu IDE

7Ju73MU.png

 

 

Agora o resultado disso tudo funcionando:

BAOacF4.png

Esqueci de postar que a conexão entre mySQLi  é assim:

<?php   $conexao = mysqli_connect("localhost","usuario","senha","Nome do banco de dados"); 

apenas isso. 

Link para o comentário
Compartilhar em outros sites

EDITADO ::   

 

 

Olá dif !!! , muito obrigado !!!! deu certinho , eu tinha dito que tinha que usar PDO etc etc, falei bobagem, o EASYPHP aceita o myslqi, então não muda quase nada dos meus códigos anteriores, só adicionar o i no final hahahahaha

 

 

Agradeço sua ajuda e sua paciencia !!! Desculpa tantos problemas e duvidas , como eu disse sou novo no mundo da programação !!

Link para o comentário
Compartilhar em outros sites

  • Moderador

@

 

No código não tem erros. tá praticamente igual ao meu exemplo.

O problema é você tentando usar o PDO onde não precisa.

 

Apague todo o conteúdo do seu arquivo connect.php... e coloque apenas isso. e exatamente como coloquei:

<?php   $connect = mysqli_connect("localhost","root", "", "db_jobshere");

assim mesmo.. apenas duas linhas sem fechar a tag php. 

Link para o comentário
Compartilhar em outros sites

Funcionou aqui !!

 

O que eu fiz foi que eu baixei o EASYPHP, mudei meus códigos que estavam em mysql  para mysqli , utilizei os códigos que o DIF passou, e como resultado o código deu certo.

 

O problema que estava tendo era referente ao XAMPP , o porque disso, eu realmente não sei.

 

Caso alguém esteja com este mesmo problema, utilize o EASYPHP e comandos em mysqli.

 

Att,

 

Pedro

  • Curtir 2
Link para o comentário
Compartilhar em outros sites

  • 5 anos depois...
Em 14/10/2015 às 22:23, DiF disse:

@

 

Pelo print vejo que a imagem ficou com ícone de quebrado.. isso é problema de localização do arquivo.. 

 

Tente desta forma:


<!DOCTYPE html><html lang="pt-br"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><meta name="description" content=""><meta name="keywords" content=""><meta name="author" content=""><meta name="reply-to" content=""><meta name="generator" content="Eclipse mars"><script src="http://code.jquery.com/jquery-2.1.4.min.js"></script><title>Insert title here</title><style type="text/css">    .perfil{        background: #ccc;        margin-bottom: 15px;    }</style></head><body>	<?php 	   include 'conexao.php';	   	   $caminho = "Img/";	   	   $busca = mysqli_query($conexao, "SELECT nome, email, img FROM perfil");	   while($perfil = mysqli_fetch_object($busca)):	   $img = $caminho . $perfil->img;	      echo"                <div class='perfil'>                    <h1> Dados do usuário </h1>                    <p> Nome: $perfil->nome </p>                    <p> E-mail: $perfil->email </p>                    <img src='$img' alt=''/>Nome da imagem: $perfil->img                </div>                 ";	   endwhile;		?></body></html>

Ia postar umas prints mostrando o resultado.. e as imagens.. mas o imgur ta meio lento...

 

Veja a linha 24, a linha 28  e a linha 34...   

O código.. eu testei e funciona.. assim que o imgur normalizar eu atualizo meu post com as imagens do teste... 

 

Eu insisto no lance de você trocar o xampp pelo EASYPHP.  Desde 2009 eu uso o easyphp e nunca tive problemas com nada... ao contrário de que muita gente tem problemas com certas coisas no xampp ou o wampsever.

Por isso o EasyPHP é o melhor.

 

 

EDIT: Como prometido os prints:

 

Primeiro como está no banco de dados:

http://i.imgur.com/51ECB5i.png

 

Agora o código, embora já tenha postado mais acima... nunca é demais postar uma imagem do código no meu IDE

http://i.imgur.com/7Ju73MU.png

 

 

Agora o resultado disso tudo funcionando:

http://i.imgur.com/BAOacF4.png

Esqueci de postar que a conexão entre mySQLi  é assim:


<?php   $conexao = mysqli_connect("localhost","usuario","senha","Nome do banco de dados"); 

apenas isso. 

 

Boa Tarde,

Preciso fazer exatamente o que você fez no tópico acima. A princípio estava cometendo o mesmo erro que o Pedro, usando o PDO, então não conseguia ver as imagens.

Então fiz exatamente como falou e deu certo. Consegui visualizar as imagens.

Depois tentei criar outro projeto, com base nesse e adequando às minhas necessidades e não sei onde estou errando.Pode me dar uma força?

 

meu IDE:

 

conexao.php 

<?php
$conn = mysqli_connect("localhost","root", "informa56", "database"); 

 

Formulário para inserir no banco de dados (estou usando EASY PHP 14.1)

 

index.php

<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <form method="POST" action="processa.php" enctype="multipart/form-data">
	<label>Nome: </label>
	<input type="text" name="nome"><br><br>
	<label>Imagem: </label>
	<input type="file" name="arquivo"/><br><br>
	<input type="submit" value="Cadastrar">
</form>
    </body>
</html>

 

processa.php

<?php
	include_once("conexao.php");
	$nome=$_POST['nome'];
	$nome_imagem = $_FILES['arquivo']['name'];
	echo "Nome do produto: $nome <br>";
	echo "Nome da Imagem do produto: $nome_imagem <br>";
	
	//Salvar no banco de dados
	$result_produto = "INSERT INTO dadosindividuos (nome, imagem) VALUES ('$nome', '$nome_imagem')";
	$resultado_produto = mysqli_query($conn, $result_produto);
	$ultimo_id = mysqli_insert_id($conn);
	echo "Ultimo Id Inserido: $ultimo_id <br>";
	
	//Pasta onde o arquivo vai ser salvo
	$_UP['pasta'] = 'imagens/'.$ultimo_id.'/';
	
	//Criar a pasta de foto do produto
	mkdir($_UP['pasta'], 0777);
	
	//Verificar se é possive mover o arquivo para a pasta escolhida
	if(move_uploaded_file($_FILES['arquivo']['tmp_name'],$_UP['pasta'].$nome_imagem)){
		echo "Imagem salva com sucesso!<br>";
	}

?>

 

e por fim o arquivo visualizar.php que é o projeto que você postou para o nosso colega Pedro

<!DOCTYPE html>
<html lang="pt-br">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
        <meta name="description" content="">
        <meta name="keywords" content="">
        <meta name="author" content="">
        <meta name="reply-to" content="">
        <meta name="generator" content="Eclipse mars">
        <script src="http://code.jquery.com/jquery-2.1.4.min.js">
        </script>
        <title>Insert title here</title>
        <style type="text/css">    .perfil{        background: #ccc;        margin-bottom: 15px;    }</style>
    </head>
    <body>
	<?php
        include 'conexao.php';
        $caminho = "imagens/";
        $busca = mysqli_query($conn, "SELECT nome, imagem FROM dadosindividuos");
        while($perfil = mysqli_fetch_object($busca)):
            $img = $caminho . $perfil->imagem;
        echo"                <div class='perfil'>"
        . "                    <h1> Dados do usuário </h1>"
                . "                    <p> Nome: $perfil->nome </p>"                
                . "                    <img src='$img' alt=''/>Nome da imagem: $perfil->imagem"
                . "                </div>                 ";
        endwhile;
        ?>
    </body>
</html>

 

Assim que insiro um registro no sistema, ele salva o nome no banco de dados e faz o upload da imagem, criando uma pasta, dentro da pasta "imagens" com o numero de ID, conforme segue:

image.thumb.png.d0f2ba7a01dd6216f71adf62ca15efab.png

 

No phpmyadmin está assim:

image.thumb.png.af730d210bdbd0de419fb1cd8cec4fe5.png

 

Quando acesso o arquivo visualizar.php aparecem os dados mas a imagem nao carrega

image.png.960f49ba0271e711931b07d07024ce28.png

 

Pode me ajudar? 

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Carlos Eduardo MAchado Provavelmente é porque você está criando uma "pasta" dentro das imagens mas no caminho está indo como imagens/nome-da-imagem

 

No caso, você precisa identificar o nome da pasta que contém a imagem do perfil, como cada pasta do diretório vai ter o mesmo valor ID do registro.. basta você concatenar dessa forma:

 

$img = $caminho . $perfil->id .'/' . $perfil->imagem;

Dessa forma o caminho vai ficar:  imagens/2/assinatura.jpeg

 

Outro jeito também é cadastrar o "id" da pasta na tabela, mas isso você só iria fazer se caso o nome da pasta não fosse o mesmo do valor ID... como é o mesmo... basta usar o mesmo valor do registro.

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

16 minutos atrás, DiF disse:

@Carlos Eduardo MAchado Provavelmente é porque você está criando uma "pasta" dentro das imagens mas no caminho está indo como imagens/nome-da-imagem

 

No caso, você precisa identificar o nome da pasta que contém a imagem do perfil, como cada pasta do diretório vai ter o mesmo valor ID do registro.. basta você concatenar dessa forma:

 


$img = $caminho . $perfil->id .'/' . $perfil->imagem;

Dessa forma o caminho vai ficar:  imagens/2/assinatura.jpeg

 

Outro jeito também é cadastrar o "id" da pasta na tabela, mas isso você só iria fazer se caso o nome da pasta não fosse o mesmo do valor ID... como é o mesmo... basta usar o mesmo valor do registro.

 

Funcionou perfeitamente! Muito obrigado pela atencão e disposição.

 

Forte Abraço

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário 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

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...