Cadastrar e recuperar imagens com PHP e MySQL

Olá a todos, continuando os tutoriais com PHP hoje veremos como guardar imagens em nosso sistema e recupera-las quando necessário.

A ideia é o seguinte, na tabela paginas iremos guardar alguns dados da imagem e o id do usuário proprietário desta imagem e o arquivo da imagem iremos armazena-lo em um diretório.

Tabela paginas para gravar as imagens
Tabela paginas para gravar as imagens

Obs: O nome da tabela é paginas porque faz parte de um projeto onde pretendo gravar as paginas favoritas de um usuário com uma imagem personalizada para cada página.

Agora que nossa tabela está criada vamos criar o formulário para a entrada dos dados.

<!DOCTYPE html>
<html lang="pt-br">
	<head>
		<meta name="viewport" content="width=device-width, initial-scale=1.0">
		<meta charset="UTF-8">
		<title>infWeb</title>
	</head>
	<body class="f2">
		<div>
			<form enctype="multipart/form-data" action="cadPagina.php" method="post" name="cadastro_form" autocomplete="off" id="cadastro_form">
				<div>
					<h1>Cadastrar Nova Pagina</h1>
					<!-- Nome -->
					<input name="nome" id="nome" placeholder="Nome da pagina" type="text">
					<!-- Email -->
					<input name="url" id="url" placeholder="Endereço da pagina" type="text">
					<!-- Login -->
					<label for="imagem">Imagem:</label>
					<input type="file" name="imagem"/>
					<!-- Castrar -->
					<span class="accent" style="display: block;margin-bottom: 10px;"></span>
					<button type="submit">Cadastrar</button>
				</div>
			</form>
		</div>	
	</body>
</html>

Observações:

  1. com o atributo enctype=”multipart/form-data”, nenhum caracteres é codificados. Este valor é necessário quando você estiver usando formulários que têm upload de arquivo.
  2. Os campos id_usuarioid_categoria e ordem não serão necessário neste exemplo, então vamos gravar sempre o valor 0 (zero) neles.

Agora vamos ao arquivo responsável por gravar os dados cadPagina.php

Formulário para envio das imagens
Formulário para envio das imagens
<?php
	//lendo os dados passados pelo formulario
	$nome      = $_POST['nome'];
	$url       = $_POST['url'];
	$ordem     = $_POST['ordem'];
	$imagem    = $_FILES["imagem"];
	
	//Validando os dados passados
	if($nome == NULL) {
		$error[1] = "Informe um nome para pagina";
	}

	if($url == NULL) {
		$error[2] = "Informe uma URL";
	}

	if($ordem == NULL) {
		$ordem = 1;
	}
	
	// Se a imagem estiver sido selecionada 
	if (!empty($imagem["name"])) {  
		// Validando a imagem
		// Largura máxima em pixels 
		$largura = 256; 
		// Altura máxima em pixels 
		$altura = 256; 
		// Tamanho máximo do arquivo em bytes 
		$tamanho = 100000;
		// Verifica se o arquivo é uma imagem 
		$tipos = "%\.(pjpeg|jpeg|png|gif|bmp)$%i";
		if(preg_match($tipos, $imagem["type"]) == 1){
			$error[3] = "Arquivo selecionado não é uma imagem."; 			
		}

		// Pega as dimensões da imagem 
		$dimensoes = getimagesize($imagem["tmp_name"]);

		// Verifica se a largura da imagem é maior que a largura permitida 
		if($dimensoes[0] > $largura) { 
			$error[4] = "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[5] = "Altura da imagem não deve ultrapassar ".$altura." pixels"; 
		}

		// Verifica se o tamanho da imagem é maior que o tamanho permitido 
		if($imagem["size"] > $tamanho) { 
			$error[6] = "A imagem deve ter no máximo ".$tamanho." bytes. Ela tem: ".$imagem["size"]; 
		}

		// Se não houver erros
		if (count($error) == 0) {
			//Dados do banco de dados
			$host     = "endereco_servidor";
			$username = "usuario_do_servidor";
			$password = "senha_do_usuario";
			$db       = "nome_banco_de_dados";
			
			// Conexão com o banco de dados
			$conn = @mysql_connect($host, $username, $password) or die ("Problemas na conexão.");
			$db = @mysql_select_db($db, $conn) or die("Problemas na conexão");
		
			// Pega extensão da imagem 
			preg_match("/.(gif|bmp|png|jpg|jpeg){1}$/i", $imagem["name"], $ext);
			
			// Gera um nome único para a imagem 
			$nome_imagem = md5(uniqid(time())) . "." . $ext[1];   
			// Diretório de onde ficará a imagem 
			$caminho_imagem = "imgGrid/" . $nome_imagem;
			
			// Faz o upload da imagem para seu respectivo caminho 
			move_uploaded_file($imagem["tmp_name"], $caminho_imagem);   
			// Insere os dados no banco 
			$sSQL = "INSERT INTO paginas( id_usuario, id_categoria, descricao, url, ordem, img ) VALUES (0,0,'".$nome."','".$url."',1,'".$nome_imagem."')";
			$sql = mysql_query($sSQL);

			// Se os dados forem inseridos com sucesso 
			if($sql){ 
				echo "Cadastrado feito com sucesso.";
				// Seleciona todos os usuários
				$sql = mysql_query("SELECT * FROM paginas");
				 
				// Exibe as informações de cada usuário
				while ($usuario = mysql_fetch_object($sql)) {
					// Exibimos a foto
					echo "<img src='imgGrid/".$usuario->img."' alt='Foto de exibição' /><br />";
					// Exibimos o nome e email
					echo "<b>Nome:</b> " . $usuario->descricao . "<br />";
					echo "<b>URL:</b> " . $usuario->url . "<br /><br />";
				}
			} 
			else{echo "Houve erro no cadastro.";}
		}
		
		// Se houver mensagens de erro, exibe-as 
		if (count($error) != 0) { 
			foreach ($error as $erro) { echo  "<p>" . $erro . "</p> "; } 
		}
	}
?>

No código acima depois de validarmos todos os dados a serem gravados, geramos um nome único para a imagem para que não possa coincidir com o nome de outra imagem e garantir que não haja carácter especial, que pode acabar gerando erro em algum momento.

Também apontamos o diretório imgGrid que será onde guardaremos a imagem.

// Gera um nome único para a imagem 
$nome_imagem = md5(uniqid(time())) . "." . $ext[1];   
// Diretório de onde ficará a imagem 
$caminho_imagem = "imgGrid/" . $nome_imagem;

Com tudo preparado podemos realizar o upload da imagem e gravar os dados da mesma.

// Faz o upload da imagem para seu respectivo caminho 
move_uploaded_file($imagem["tmp_name"], $caminho_imagem);   
// Insere os dados no banco 
$sSQL = "INSERT INTO paginas( id_usuario, id_categoria, descricao, url, ordem, img ) VALUES (0,0,'".$nome."','".$url."',1,'".$nome_imagem."')";
$sql = mysql_query($sSQL);

E por fim, lemos a tabela onde gravamos os dados da imagem como nome e caminho e as apresentamos montado um HTML bem simples.

$sql = mysql_query("SELECT * FROM paginas");
 
// Exibe as informações de cada usuário
while ($usuario = mysql_fetch_object($sql)) {
	// Exibimos a foto
	echo "<img src='imgGrid/".$usuario->img."' alt='Foto de exibição' /><br />";
	// Exibimos o nome e email
	echo "<b>Nome:</b> " . $usuario->descricao . "<br />";
	echo "<b>URL:</b> " . $usuario->url . "<br /><br />";
}
Apresentando imagens gravadas no sistema
Apresentando imagens gravadas no sistema

É isso ai, temos nossas imagens guardas!

qualquer duvida estou a disposição! até mais.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.