Upload de imagem com PHP e MySQL

Aprenda a fazer upload de imagens e gravar no banco de dados o caminho da imagem, para exibir posteriormente nas suas páginas. Funciona muito bem para cadastros de usuários, ou gravar a imagem destaque de um produto, de uma notícia.

Por Programação 4 comentários
Upload de imagem com PHP e MySQL

Olá pessoal, desculpem pela ausência, mas é que eu estou trabalhando em alguns projetos e o tempo está curto. Hoje nesse artigo vou mostrar como fazer um upload de uma imagem para o servidor e também gravar isso no banco de dados. Vou utilizar como exemplo um mini-portal, onde o usuário irá se cadastrar e escolher sua foto de exibição. Então, vamos lá.

 

1. Banco de dados

Vamos criar nossa tabela de usuários:

CREATE TABLE `usuarios` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`nome` VARCHAR( 50 ) NOT NULL ,
`email` VARCHAR( 50 ) NOT NULL ,
`foto` VARCHAR( 100 ) NOT NULL
) ENGINE = MYISAM ;

 

2. Formulário de cadastro

 

Agora vamos desenhar nosso formulário e apontar a action para o mesmo arquivo:

IMPORTANTE: nunca se esqueça que quando se trata de arquivos, precisamos adicionar ao nosso form a seguinte propriedade:enctype=”multipart/form-data”

 

 
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Cadastro de usuário</title>
</head>
 
<body>
<h1>Cadastro de Usuário</h1>
<form action="" method="post" enctype="multipart/form-data" name="cadastro" >
Nome:<br />
<input type="text" name="nome" /><br /><br />
Email:<br />
<input type="text" name="email" /><br /><br />
Foto de exibição:<br />
<input type="file" name="foto" /><br /><br />
<input type="submit" name="cadastrar" value="Cadastrar" />
</form>
</body>
</html>

 

3. Cadastrando Usuário

Como a action está apontando para o próprio arquivo, nosso código vai nele mesmo:

<?
// Conexão com o banco de dados
$conn = @mysql_connect("localhost", "usuario", "senha") or die ("Problemas na conexão.");
$db = @mysql_select_db("banco", $conn) or die ("Problemas na conexão");
 
// Se o usuário clicou no botão cadastrar efetua as ações
if ($_POST['cadastrar']) {
 
	// Recupera os dados dos campos
	$nome = $_POST['nome'];
	$email = $_POST['email'];
	$foto = $_FILES["foto"];
 
	// Se a foto estiver sido selecionada
	if (!empty($foto["name"])) {
 
		// Largura máxima em pixels
		$largura = 150;
		// Altura máxima em pixels
		$altura = 180;
		// Tamanho máximo do arquivo em bytes
		$tamanho = 1000;
 
    	// Verifica se o arquivo é uma imagem
    	if(!preg_match("/^image/(pjpeg|jpeg|png|gif|bmp)$/", $foto["type"])){
     	   $error[1] = "Isso não é uma imagem.";
   	 	} 
 
		// Pega as dimensões da imagem
		$dimensoes = getimagesize($foto["tmp_name"]);
 
		// Verifica se a largura da imagem é maior que a largura permitida
		if($dimensoes[0] > $largura) {
			$error[2] = "A largura da imagem não deve ultrapassar ".$largura." pixels";
		}
 
		// Verifica se a altura da imagem é maior que a altura permitida
		if($dimensoes[1] > $altura) {
			$error[3] = "Altura da imagem não deve ultrapassar ".$altura." pixels";
		}
 
		// Verifica se o tamanho da imagem é maior que o tamanho permitido
		if($foto["size"] > $tamanho) {
   		 	$error[4] = "A imagem deve ter no máximo ".$tamanho." bytes";
		}
 
		// Se não houver nenhum erro
		if (count($error) == 0) {
 
			// Pega extensão da imagem
			preg_match("/.(gif|bmp|png|jpg|jpeg){1}$/i", $foto["name"], $ext);
 
        	// Gera um nome único para a imagem
        	$nome_imagem = md5(uniqid(time())) . "." . $ext[1];
 
        	// Caminho de onde ficará a imagem
        	$caminho_imagem = "fotos/" . $nome_imagem;
 
			// Faz o upload da imagem para seu respectivo caminho
			move_uploaded_file($foto["tmp_name"], $caminho_imagem);
 
			// Insere os dados no banco
			$sql = mysql_query("INSERT INTO usuarios VALUES ('', '".$nome."', '".$email."', '".$nome_imagem."')");
 
			// Se os dados forem inseridos com sucesso
			if ($sql){
				echo "Você foi cadastrado com sucesso.";
			}
		}
 
		// Se houver mensagens de erro, exibe-as
		if (count($error) != 0) {
			foreach ($error as $erro) {
				echo $erro . "
"
; } } } } ?>

Resumindo, nós pegamos a imagem enviada, verificamos se ela está dentro dos limites permitidos, depois jogamos essa foto na pasta fotos/ do servidor e na tabela de usuários do banco de dados adicionamos as informações do usuário juntamente com o nome da foto.

OBS: não esqueça de dar pemissão de gravar na pasta onde serão gravadas as fotos.

 

4. Exibindo a imagem

Agora é simples. Vamos supor que queremos exibir as informações de todos os usuários, incluindo a foto:

<?
// Seleciona todos os usuários
$sql = mysql_query("SELECT * FROM usuarios ORDER BY nome");
 
// Exibe as informações de cada usuário
while ($usuario = mysql_fetch_object($sql)) 
{ // Exibimos a foto echo "< img src='fotos/".$usuario->foto."' alt='Foto de exibição' />< br />"; // Exibimos o nome e email echo "Nome: " . $usuario->nome . "< br />"; echo "Email: " . $usuario->email . "< br />< br />"; } ?>

 

5. Excluindo imagem

E se for necessário excluir um usuário? Simples, utilizamos o comando delete e tudo certo, porém a foto dele vai continuar lá na pasta fotos/ do nosso servidor. A solução é simples, utilizamos a função unlink(). Vamos supor que queremos remover o usuário de ID = 1 e sua respectiva foto:

// ID de exemplo
$id = 1; 
// Selecionando nome da foto do usuário
$sql = mysql_query("SELECT foto FROM usuarios WHERE id = '".$id."'");
$usuario = mysql_fetch_object($sql); 
// Removendo usuário do banco de dados
$sql = mysql_query("DELETE FROM usuarios WHERE id = '".$id."'"); 
// Removendo imagem da pasta fotos/unlink("fotos/".$usuario->foto."");
?> 

 

6. Conclusão

Podemos concluir que é muito simples fazer upload de uma imagem para o servidor, e não só apenas imagem, poderia ser qualquer outro arquivo, só mudaria o modo de validação. Espero que vocês tenham entendido, até o próximo artigo. Abraços.

 

Arquivos para download aqui

Compartilhe com seus amigos:
Mais sobre: mysql, upload, tutorial
Rafael Couto Alves
Rafael Couto Alves Meu nome é Rafael Couto, tenho 19 anos, moro em Bauru/SP e sou aficionado por informática e tecnologia, principalmente em relação a web.
FACEBOOK // TWITTER: @@faael
Quer conversar com o(a) Rafael, comente:
Carregar comentários
Últimas notícias de Programação
  • Google usa Mulher-Maravilha para ajudar meninas a programar

    Google usa Mulher-Maravilha para ajudar meninas a programar

    Meninas ganham um incentivo extra na hora de aprender a programar, a Mulher-Maravilha.

  • Criando um cadastro de usuário em Java

    Criando um cadastro de usuário em Java

    O objetivo deste artigo é desenvolver uma aplicação em JSE (Java Standard Edition) de inserção de dados utilizando alguns padrões de projeto.

  • Quer aprender PHP? Saiba mais

    Quer aprender PHP? Saiba mais

    Chegou o tão aguardado curso online de PHP do Oficina da Net. Você não pode perder. PHP é uma das linguagens mais usadas no mundo. Os conteúdos que vou mostrar no curso, são exatamente o que você precisa saber para iniciar sua carreira como programador.

  • Formulário de contato em php

    Formulário de contato em php

    Guia do PHP: Aprenda a fazer um formulário em PHP que envia via SMTP autenticado o e-mail para um destinatário.

  • Como fazer um GIF?

    Como fazer um GIF?

    Aprenda a criar um GIF animado de vídeos. Descubra como criar os GIFs, imagens animadas que você vê em na internet.

  • O que priorizar na hora de escolher o hosting para seu site?

    O que priorizar na hora de escolher o hosting para seu site?

    Com o crescimento das ofertas na web, saiba o que você deve levar em consideração na hora de escolher a melhor empresa de hosting para seu empreendimento

  • O que preciso fazer para criar um aplicativo?

    O que preciso fazer para criar um aplicativo?

    Temos visto que desenvolver aplicativos que visam o mercado mobile pode ser mais que uma alternativa rentável, pode colocá-lo no topo, deixá-lo rico. Mas nem tudo são flores, e o aspirante a desenvolvedor de app precisa seguir algumas regras.

  • WEBINAR 3.9

    WEBINAR 3.9

    Venha para o Maker e descubra como tornar o seu negócio mais competitivo.