logo

Paleta - Deixe colorido🎨

Palette — Construtor visual de páginas. Não precisa ser designer.

Demonstração ao vivo Baixar Palette

Scroll

Lições de PHP - Lição 3.5 - Trabalhando com Banco de Dados MySQL. Operador JOIN. Carregamento de Arquivos no Servidor.

08/12/2019, by Ivan

Antes de escrever esta lição, pensei muito sobre como melhor apresentar consultas com operadores JOIN. O fato é que o operador JOIN é necessário para selecionar de várias tabelas ao mesmo tempo. E como você precisa de outra tabela, vamos criá-la. Proponho criar uma tabela para arquivos que carregaremos através de um formulário já nesta lição. Resultará em uma lição sobre dois tópicos diferentes: trabalho com banco de dados e trabalho com formulários.

Vamos começar, adicione um campo para fazer upload de arquivo. Para que o formulário possa fazer upload de arquivos, você precisa adicionar um tipo de formulário aos seus parâmetros:

$content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="post" enctype="multipart/form-data">'; 

Assim, através do parâmetro enctype fornecemos ao navegador que através deste formulário carregaremos arquivos. Agora que o formulário está pronto, vamos adicionar um campo para fazer upload de arquivo:

  public function display_admin() { // método de entrada de mensagem
	$content = '';

	$content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="post" enctype="multipart/form-data">';
	$content .= '<label for="title">Nome:</label><br />';
	$content .= '<input name="title" id="title" type="text" maxlength="150" />';
	$content .= '<div class="clear"></div>';
	$content .= '<label for="bodytext">Mensagem:</label><br />';
	$content .= '<textarea name="bodytext" id="bodytext"></textarea>';
	$content .= '<input type="file" name="filename">'; // campo de upload de arquivo
	$content .= '<div class="clear"></div>';
	$content .= '<input type="submit" value="Adicionar mensagem" />';
	$content .= '</form>';
	$content .= '<p><a href="/index.php">Voltar à página principal</a></p>';

    return $content;
  }

Através de input com tipo file, faremos upload do nosso arquivo. Se você salvar os arquivos e atualizar a página para adicionar mensagem, você deverá ver um campo de upload de arquivo.

Agora vamos ver como o arquivo é transmitido na solicitação POST.

  public function write($p) {
	print_r($p); // imprima o array do formulário
	print_r($_FILES); // imprima o array de arquivos
    $sql = 'INSERT INTO Messages (title, bodytext, created) VALUES ("'. $p["title"] . '", "' . $p["bodytext"] . '", ' . time() . ')';
    return mysql_query($sql);
  } 

Agora vamos carregar algum arquivo e salvar a mensagem. Todos os arquivos que forem carregados através do formulário estarão disponíveis na variável superglobal $_FILES. Carrego um arquivo e obtenho esses arrays:

Array (
  [title] => asfasdf
  [bodytext] => asfasdf
)
Array (
  [filename] => Array (
    [name] => ip.txt
    [type] => text/plain
    [tmp_name] => Y:\tmp\phpAA.tmp
    [error] => 0
    [size] => 13
   )
) 

Agora que temos um array de dados e arquivo, vamos criar uma tabela de arquivos para salvar os arquivos carregados. Comece criando uma pasta de arquivos na raiz do seu site e se você estiver no Linux ou em um servidor de hospedagem, dê permissões a essa pasta 777 para que nosso script possa salvar arquivos nela.

Vamos alterar a consulta de criação de tabelas para o método buildDB():

$sql = "CREATE TABLE Messages
(
mid int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(mid),
title varchar(15),
bodytext text,
created  int(11),
file int(11),
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;
CREATE TABLE Files
(
fid int NOT NULL AUTO_INCREMENT,
PRIMARY KEY(fid),
filename varchar(255),
filepath varchar(255),
filemime varchar(255),
filesize int(10),
timestamp int(10),
)ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;";

Além de adicionar uma nova tabela, também adicionaremos um campo fid que será uma chave estrangeira para a tabela de arquivos. Para a nova tabela de arquivos, teremos os seguintes campos:

fid - esta é a chave primária da nossa tabela, número do arquivo.

filename - nome do arquivo.

filepath - caminho para o arquivo da raiz do site.

filemime - tipo de arquivo para determinar a extensão do arquivo e para que ele pode ser usado (por exemplo, para arquivos de texto é text/plain, para imagens pode ser image/jpg, image/png).

filesize - tamanho do arquivo em bytes.

timestamp - hora do upload do arquivo.

Agora vamos escrever para salvar o arquivo e escrever a consulta para adicionar o arquivo ao banco de dados. Você pode criar os campos necessários através do phpMyAdmin.