Outros artigos desta série Sistema de Notícias em PHP e MySQL:
Upload De Imagens
Decidi atender ao pedido de um leitor e integrar já um sistema de upload de imagens. A mensagem desta minha decisão é simples: Somos Uma Comunidade! Este sistema de notícias irá evoluir de acordo com os vossos comentários. A decisão sobre as funcionalidades deste sistema de notícias é vossa. Sem prejuízo do princípio subjacente a este projeto: não queremos criar um Joomla, um WordPress ou um Drupal. Esses CMS já existem e são open source e grátis. Queremos um sistema de notícias simples e fácil de usar, por 2 razões:
- Este tutorial tem como destinatários aqueles leitores que estão a aprender PHP e MySQL e a aprendizagem é como uma escada que vai do simples até ao mais complexo. Vamos começar pelo simples.
- Muitas vezes, até para a maioria dos sites para empresas, um Joomla ou um Drupal são demasiado complexos. E um sistema de notícias simples é mais vantajoso para o programador e especialmente para o utilizador final, que não vai ter 101 opções de configuração e não vai precisar de ler um manual para editar um artigo.
Não criamos um módulo autónomo para o sistema de upload. Mas, podemos fazer isso no futuro. Depende da evolução do script. É um sistema de upload muito simples e que nem mexemos na base de dados. Vamos utilizar um campo já existe na base de dados MySQL para guardar o nome do ficheiro da imagem: n_img.
Em relação ao script publicado na Parte1, alteramos os seguintes ficheiros:
- index.php
- admin/admin.php
- admin/inserir-noticia.php
O Ficheiro admin/admin.php
Não alteramos muito o código do formulário. Vamos analisar em pormenor as alterações do ficheiro admin/admin.php:
// A seguinte linha de código:
<form id="inserir" name="inserir" method="post" action="inserir-noticia.php">
// Foi substituída por esta linha de código:
<form name="inserir" id="inserir" method="post" action="inserir-noticia.php" enctype="multipart/form-data" >
// Este linha de código foi substituída:
<input name="imgs" type="text" id="imgs" size="40" />
// por esta linha de código:
<input name="imgs" type="file" id="imgs" size="45" />
enctype=”multipart/form-data” [6]: Adicionamos, pois o nosso formulário vai processar um ficheiro de imagem e vai utilizar um campo de input do tipo type=”file”.
O Ficheiro admin/inserir-noticia.php
As principais alterações ocorrem neste ficheiro. É aqui que acontece a acção!
// Esta é a variável $imgs na versão anterior.
$imgs = $_POST['imgs'];
// A variável $imgs deixa de ser um $_POST e transforma-se num $_FILES['imgs'], e criamos uma nova variável a $trimimg
$imgs = $_FILES['imgs'];
$trimimg= str_replace(" ", "", strtolower($_FILES["imgs"]["name"]));
A $trimimg vai ao MIME data stream do $_FILES['imgs'] e fica a saber o nome do ficheiro da imagem: $_FILES["imgs"]["name"].
Dado que o nome do ficheiro pode ter várias formatações: escrito em letras MAIÚSCULAS, escrito em letras minúsculas ou até com uma combinação de letras maiúsculas e micúsculas (Exemplo.JPG.), decidi utilizar o strtolower [7] para alterar o nome do ficheiro de modo que seja um nome só com letras minúsculas.
Outro problema de formatação é o nome do ficheiro ter espaços. Por exemplo: “Nome do ficheiro.jpeg”. Decidi usar o str_replace [8], para remover os espaços no nome do ficheiro.
Se desenvolvermos um módulo autónomo para o upload de ficheiros, podemos também remover acentos do nome dos ficheiros e também criar automaticamente um nome de ficheiro único.
A seguir vamos criar uma condição baseada no $_FILES["imgs"]["type"] e restringir o upload dos ficheiros a 3 tipos de ficheiros: gif, png e jpeg. Aproveitamos a boleia e restringimos também o tamanho do ficheiro a ficheiros inferiores a 120 kb.
if ((($_FILES["imgs"]["type"] == "image/pjpeg") || ($_FILES["imgs"]["type"] == "image/jpeg") || ($_FILES["imgs"]["type"] == "image/gif") || ($_FILES["imgs"]["type"] == "image/png")) && ($_FILES["imgs"]["size"] < 120000)) {
Vamos efectuar o INSERT desta nova informação na base de dados MySQL. Não esquecer que a variável não é a $imgs. A variável é a $trimimg.
mysql_query("INSERT INTO noticias (n_data, n_titulo, n_texto, n_img) VALUES ('$data', '$titulo', '$texto', '$trimimg')");
O upload de imagens está a ser efectuado para a pasta admin/img. O código que determina a pasta para onde vai ser efectuado o upload é o seguinte:
move_uploaded_file($_FILES["imgs"]["tmp_name"], "img/" . $trimimg);
Nesta linha de código, movemos o ficheiro da pasta temporária no servidor “tmp_name”, onde ficou uma cópia do ficheiro, para a pasta para onde vamos efectuar o upload dos ficheiros das imagens, na nossa conta de alojamento ou na pasta onde estão os ficheiros do nosso script no nosso computador. No servidor, é importante que o utilizador que executa os ficheiros PHP tenha permissões de escrita nessa pasta, para onde vamos efectuar o upload dos ficheiros das imagens.
admin/img/exemplo.gif
Como o código vai ser processado na pasta admin, indicamos a pasta img/ e o nome do ficheiro que vai ser escrito nessa pasta. O nome do ficheiro vamos buscar à variável $trimimg. Neste código:
move_uploaded_file($_FILES["imgs"]["tmp_name"], "img/" . $trimimg);
o pedaço de código que faz exactamente isso é este: “img/” . $trimimg.
O Ficheiro index.php
Estamos próximos do fim da Parte2 deste tutorial. Falta actualizar o ficheiro index.php, para poder ler as imagens, uma vez que deixamos de usar url e vamos passar a ler a imagem na pasta admin/img/.
echo "<p>".$linha['n_texto']." <img src='admin/img/".$linha['n_img']."' alt='' align='left' /> "."</p>";
Que novas funcionalidades querem para este sistema de notícias em PHP e MySQL?
Download do código: Sistema De Notícias Em PHP E MySQL Parte2 [9]