Você está na página 1de 7

1

Like

Share

MYSQL + PHP

Cadastrando e Exibindo imagens diretamente do MySQL 5


25 de janeiro de 2006 por Jlio Csar Martini

Fala pessoal! Feliz Ano Novo! Aps uma pequena pausa, estamos retornando com fora total a coluna de PHP. Essa semana tentarei mostrar, de uma maneira simples, como podemos cadastrar e exibir uma imagem diretamente do banco de dados MySQL. Esse artigo foi baseado no MySQL e PHP 5. Vamos l: Primeiramente, devemos criar o nosso database.

CREATE DATABASE JULIO;

Criaremos a tabela FOTOS, conforme descrio abaixo dentro do schema julio:

CREATE TABLE `julio`.`fotos` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `foto` BLOB NOT NULL DEFAULT , `tipo` VARCHAR(20) NOT NULL DEFAULT , PRIMARY KEY(`id`) ) ENGINE = InnoDB;

Depois que a tabela for criada, podemos comear a escrever o nosso formulrio (form.php ), que ser o responsvel pelo envio da imagem.

<html> <head>

<title>Gravando e exibindo uma imagem diretamente do MySQL 5</title> </head> <body bgcolor="#FFFFFF"> <h2> Gravando imagem no banco de dados MySQL 5</h2> <? //VERIFICA SE O FORM FOI ENVIADO if($_POST) { //CONECTA AO MYSQL $conn = mysqli_connect("localhost", "usuario", "senha", "base de dados ") or die("Erro na conexo com o BD"); //RECEBE DADOS DO FORMULRIO $pFoto = $_FILES["txtFoto"]["tmp_name"]; $pTipo = $_FILES["txtFoto"]["type"]; //MOVE move_uploaded_file($pFoto, "c:\\temp\\latest.img"); //ABRE ARQUIVO $pont = fopen("c:\\temp\\latest.img", "rb"); //PERCORRE O ARQUIVO $dados = addslashes(fread($pont, filesize("c:\\temp\\latest.img"))); //INSERE NA BASE DE DADOS $sql = mysqli_query($conn, "INSERT INTO fotos (foto, tipo) VALUES(".$dados.", ".$pTipo.") "); echo "<table border=0 cellpading=0 cellspacing=0 width=95%>"; //LINHAS AFETADAS $row = mysqli_affected_rows($conn); //TOTAL DE LINHAS AFETADAS PELA INSERO if($row) { echo "<tr>";

echo "<td>Incluso efetuada com Sucesso!"; echo "</tr>"; }//FECHA IF ( num_rows ) else { echo "<tr>"; echo "<td>Erro na incluso da foto!"; echo "</tr>"; }//FECHA ELSE echo "</table>"; }//FECHA IF ( post ) //EXIBE O FORMULRIO else { ?> <form name="frmFoto" method="post" enctype="multipart/form-data"> <table border="0" cellpading="0" cellspacing="0" width="95%"> <tr> <td height="50">Foto:</td> <td><input type="file" name="txtFoto" size="35"></td> </tr> <tr> <td colspan="2"> <input type="submit" name="Enviar"></td> </tr> </table> </form> <? }//FECHA ELSE ?> </body> </html>

Depurando:

Linha 11: Verificamos se o formulrio foi enviado. Linha 18: Recebemos o nome temporrio do arquivo armazenado no servidor. Linha 19: Recebemos o tipo do arquivo. Linha 22: Movemos o contedo do arquivo temporrio para o arquivo latest.img Linha 25: Abrimos o arquivo para leitura. Linha 28: Lemos o seu contedo e armazenamos o resultado na varivel dados. Utilizamos addslashes para colocar barras invertidas em caracteres que precisam ser escapados. Linha 31: Finalmente, inserimos a imagem no banco de dados.

Feito isso, criaremos o arquivo (exibe.php ) que ir preparar as imagens para serem visualizadas.

<? //CONECTA AO MYSQL $conn = mysqli_connect("localhost", "usuario", "senha", "base de dados "); //EXECUTA A QUERY $sql = mysqli_query($conn, "SELECT id, foto,tipo FROM fotos"); echo "<h2>Exibe imagens cadastradas no BD</h2>"; while ($row = mysqli_fetch_row($sql)) { $id = $row[0]; $bytes = $row[1]; $tipo = $row[2]; echo "<img src=gera.php?id=".$id." width=100 height=100 border=1>"; echo "<br><br>"; } ?>

Depurando: Linha 24: Essa a linha mais importante desse arquivo. Veja que chamo dentro da tag <img> o gera.php que ser o responsvel por fazer a imagem aparecer. Fiz o script dessa maneira pois queria que a pgina exibe.php trouxesse todas as imagens cadastradas no banco de dados.

O arquivo gera.php exibir as imagens cadastradas:

<? //RECEBE PARMETRO $id = $_GET["id"]; //CONECTA AO MYSQL $conn = mysqli_connect("localhost", "usuario", "senha", "base de dados "); //EXIBE IMAGEM $sql = mysqli_query($conn, "SELECT foto,tipo FROM fotos WHERE id = ".$id.""); $row = mysqli_fetch_array($sql, MYSQLI_ASSOC); $tipo = $row["tipo"]; $bytes = $row["foto"]; //EXIBE IMAGEM header("Content-type: ".$tipo.""); echo $bytes; ?>

Depurando: Linha 20: Percorremos o array para exibir todas as imagens cadastradas no BD. Linha 24: Informamos ao browser que o arquivo a ser visualizado ser uma imagem. Linha 25: Exibimos a imagem.

Resultado:

Para baixar os exemplos desse artigo, clique no link abaixo: