Criando um portal de notícias com área administrativa em PHP com MySQL
Veremos neste artigo/tutorial como criar um portal de notícias utilizando PHP com a gravação das notícias em um Banco de dados MySQL. Este portal terá como recursos: o envio de notícias; área administrativa para publicação, alteração ou exclusão das notícias; página inicial listando todas as notícias publicadas; visualização das notícias.
- Introdução a utilização do PHP com MySQL – Parte 1;
- Introdução a utilização do PHP com MySQL – Parte 2;
- Guia de utilização de PHP e MySQL.
Vamos lá então!
Nós iremos utilizar a seguinte tabela para armazenar as notícias:
CREATE TABLE artigo ( id Integer(11) NOT NULL AUTO_INCREMENT UNIQUE, titulo Varchar(100) NOT NULL, descricao Varchar(255) NOT NULL, artigo Text NOT NULL, autor Varchar(100), email Varchar(255), data_hora DateTime NOT NULL, ip Varchar(50) NOT NULL, publicado Char(1) DEFAULT 'N', PRIMARY KEY (id) );
Criada a tabela, vamos começar a montar os PHPs para tratar as notícias a serem inseridas no sistema.
Arquivo conexao.php:
<?php
$conexao = mysql_connect("seu_host", "seu_nome_de_usuario", "sua_senha");
$db = mysql_select_db("seu_banco_de_dados");
?>
Onde:
- seu_host: Você deverá indicar o endereço do host do seu Banco de dados MySQL (por exemplo: localhost (normalmente usado quando o servidor é local; mysql.seudominio.com.br; etc);
- seu_nome_de_usuario: Você deverá indicar o seu nome de usuário nele (por exemplo: seu_login);
- sua_senha: Você deverá indicar a sua senha no mesmo (por exemplo: sua_senha);
- seu_banco_de_dados: Você deverá indicar o nome do seu Banco de dados no MySQL.
Arquivo enviar_noticia.php:
<?php
include "conexao.php";
if(!isset($_POST["submit"])) {
echo "Envio de notícia<br /><br />";
echo "<form action=\"enviar_noticia.php\" name=\"form\" method=\"post\">";
echo "Título:<br /><input name=\"titulo\" type=\"text\" maxlength=\"100\" size=\"40\" /><br />";
echo "Descrição:<br /><input name=\"descricao\" type=\"text\" maxlength=\"255\" size=\"40\" /><br />";
echo "Notícia:<br /><textarea name=\"artigo\" rows=\"10\" cols=\"30\"></textarea><br />";
echo "Autor:<br /><input name=\"autor\" type=\"text\" maxlength=\"100\" size=\"40\" /><br />";
echo "E-mail:<br /><input name=\"email\" type=\"text\" maxlength=\"255\" size=\"40\" /><br />";
echo "<input name=\"submit\" type=\"submit\" value=\"Enviar\" /> <input type=\"reset\" value=\"Redefinir\" />";
echo "</form>";
}
else {
$titulo = $_POST["titulo"];
$descricao = $_POST["descricao"];
$artigo = $_POST["artigo"];
$autor = $_POST["autor"];
$email = $_POST["email"];
$data_hora = date("Y-m-d H:i:s");
$ip = getenv("REMOTE_ADDR");
$sql_enviar_noticia = "INSERT INTO artigo (titulo, descricao, artigo, autor, email, data_hora, ip, publicado) VALUES ('$titulo', '$descricao', '$artigo', '$autor', '$email', '$data_hora', '$ip', 'N')";
$resultado_enviar_noticia = mysql_query($sql_enviar_noticia)
or die (mysql_error());
echo "Envio de notícia<br /><br />";
echo "Notícia enviada com sucesso!";
}
?>
Através deste arquivo as notícias estarão sendo enviadas para o seu Banco de dados.
Note que eu não implementei nenhum tipo de validação dos dados no mesmo (se eles foram preenchidos, se o e-mail indicado é válido). Se você quiser ver algumas validações do tipo, acesse:
- Validação de dados em PHP
- Validando um e-mail
- A função empty()
- Algumas formas de validar um endereço de e-mail em uma string
Vamos agora montar nossa área administrativa.
Arquivo administrar.php:
<?php
include "conexao.php";
echo "<table border=\"1\" cellspacing=\"0\" cellpadding=\"0\" width=\"500\">";
echo "<tr>";
echo "<td width=\"50\" valign=\"top\"><div align=\"center\">ID</div></td>";
echo "<td width=\"210\" valign=\"top\"><div align=\"center\">Título</div></td>";
echo "<td width=\"60\" valign=\"top\"><div align=\"center\">Enviado em</div></td>";
echo "<td width=\"60\" valign=\"top\"><div align=\"center\">Publicado?</div></td>";
echo "<td width=\"60\" valign=\"top\"><div align=\"center\">Alterar</div></td>";
echo "<td width=\"60\" valign=\"top\"><div align=\"center\">Excluir</div></td>";
echo "</tr>";
$sql_administrar_noticias = "SELECT id, titulo, data_hora, publicado FROM artigo ORDER BY id DESC";
$resultado_administrar_noticias = mysql_query($sql_administrar_noticias)
or die (mysql_error());
if(mysql_num_rows($resultado_administrar_noticias) < 1) {
echo "<tr>";
echo "<td width=\"50\" valign=\"top\" colspan=\"6\"><div align=\"center\">Nenhuma notícia encontrada</div></td>";
echo "</tr>";
}
else {
while ($linha=mysql_fetch_array($resultado_administrar_noticias)) {
$id = $linha["id"];
$titulo = $linha["titulo"];
$data_hora = $linha["data_hora"];
$publicado = $linha["publicado"];
if($publicado=="S") {
$publicado = "Sim";
}
else {
$publicado = "Não";
}
echo "<tr>";
echo "<td width=\"50\" valign=\"top\"><div align=\"center\">$id</div></td>";
echo "<td width=\"210\" valign=\"top\">$titulo</td>";
echo "<td width=\"60\" valign=\"top\"><div align=\"center\">$data_hora</div></td>";
echo "<td width=\"60\" valign=\"top\"><div align=\"center\">$publicado</div></td>";
echo "<td width=\"60\" valign=\"top\"><div align=\"center\"><a href=\"alterar_noticia.php?id=$id\">Alterar</a></div></td>";
echo "<td width=\"60\" valign=\"top\"><div align=\"center\"><a href=\"excluir_noticia.php?id=$id\">Excluir</a></div></td>";
echo "</tr>";
}
}
echo "</table>";
?>
Através da área administrativa listamos as notícias já enviadas ao sistema e podemos estar as editando e excluindo – estas duas últimas ações estaremos criando agora no sistema.
Arquivo alterar_noticia.php:
<?php
include "conexao.php";
if(!isset($_POST["submit"])) {
$id = (int)$_GET["id"];
$sql_alterar_noticia = "SELECT * FROM artigo WHERE id='$id' ORDER BY id DESC";
$resultado_alterar_noticia = mysql_query($sql_alterar_noticia)
or die (mysql_error());
if(mysql_num_rows($resultado_alterar_noticia) < 1) {
echo "Notícia inválida.";
}
else {
while ($linha=mysql_fetch_array($resultado_alterar_noticia)) {
$id = $linha["id"];
$titulo = $linha["titulo"];
$descricao = $linha["descricao"];
$artigo = $linha["artigo"];
$autor = $linha["autor"];
$email = $linha["email"];
$data_hora = $linha["data_hora"];
$ip = $linha["ip"];
$publicado = $linha["publicado"];
if($publicado=="S") {
$publicado = "Sim";
}
else {
$publicado = "Não";
}
echo "Alterar notícia<br /><br />";
echo "<form action=\"alterar_noticia.php?id=$id\" name=\"form\" method=\"post\">";
echo "Título:<br /><input name=\"titulo\" type=\"text\" maxlength=\"100\" value=\"$titulo\" size=\"40\" /><br />";
echo "Descrição:<br /><input name=\"descricao\" type=\"text\" maxlength=\"255\" value=\"$descricao\" size=\"40\" /><br />";
echo "Notícia:<br /><textarea name=\"artigo\" rows=\"10\" cols=\"30\">$artigo</textarea><br />";
echo "Autor:<br /><input name=\"autor\" type=\"text\" maxlength=\"100\" value=\"$autor\" size=\"40\" /><br />";
echo "E-mail:<br /><input name=\"email\" type=\"text\" maxlength=\"255\" value=\"$email\" size=\"40\" /><br />";
echo "Enviado em: $data_hora (IP: $ip)<br />";
echo "Publicar? Status: $publicado<br />";
echo "<select size=\"1\" name=\"publicado\">";
echo "<option value=\"S\">Sim</option>";
echo "<option value=\"N\">Não</option>";
echo "</select><br />";
echo "<input name=\"submit\" type=\"submit\" value=\"Enviar\" /> <input type=\"reset\" value=\"Redefinir\" />";
echo "</form>";
}
}
}
else {
$id = (int)$_GET["id"];
$titulo = $_POST["titulo"];
$descricao = $_POST["descricao"];
$artigo = $_POST["artigo"];
$autor = $_POST["autor"];
$email = $_POST["email"];
$publicado = $_POST["publicado"];
$sql_alterar_noticia = "UPDATE artigo SET titulo='$titulo', descricao='$descricao', artigo='$artigo', autor='$autor', email='$email', publicado='$publicado' WHERE id='$id'";
$resultado_alterar_noticia = mysql_query($sql_alterar_noticia)
or die (mysql_error());
echo "Alterar notícia<br /><br />";
echo "Notícia alterada com sucesso!";
}
?>
Através deste arquivo poderemos publicar uma notícia ou alterá-la.
Arquivo excluir_noticia.php:
<?php
include "conexao.php";
$id = (int)$_GET["id"];
if(empty($_GET["excluir"])) {
echo "Exclusão de notícia<br /><br />";
echo "Tem certeza?!<br /><br />";
echo "<a href=\"excluir_noticia.php?id=$id&excluir=S\">Sim</a><br />";
echo "<a href=\"administrar.php\">Não</a><br />";
}
else {
$sql_excluir_noticia = "DELETE FROM artigo WHERE id='$id'";
$resultado_excluir_noticia = mysql_query($sql_excluir_noticia)
or die ("$mysql_erro");
if(mysql_affected_rows() > 0) {
echo "Exclusão de notícia<br /><br />";
echo "Notícia removida com sucesso!";
}
else {
echo "Notícia inválida.";
}
}
?>
Através deste arquivo poderemos excluir uma notícia.
Feito isso, a nossa área administrativa esta pronta. Vamos agora montar a nossa página inicial que irá listar nossas notícias publicadas.
Arquivo index.php:
<?php
include "conexao.php";
$sql_listar_noticias = "SELECT id, titulo, descricao, autor, email, data_hora, publicado FROM artigo WHERE publicado='S' ORDER BY id DESC LIMIT 10";
$resultado_listar_noticias = mysql_query($sql_listar_noticias)
or die (mysql_error());
if(mysql_num_rows($resultado_listar_noticias) < 1) {
echo "Nenhum notícia publicada.";
}
else {
while ($linha=mysql_fetch_array($resultado_listar_noticias)) {
$id = $linha["id"];
$titulo = $linha["titulo"];
$descricao = $linha["descricao"];
$autor = $linha["autor"];
$email = $linha["email"];
$data_hora = $linha["data_hora"];
echo "Título: $titulo<br />";
echo "Descrição: $descricao<br />";
echo "Autor: $autor<br />";
echo "E-mail: $email<br />";
echo "Enviado em: $data_hora<br />";
echo "<hr />";
}
}
?>
Através deste arquivo são listado somente as notícias publicadas no sistema e é listado as últimas 10 notícias publicadas.
Se você quiser listar todas as notícias publicadas no seu sistema, você poderia fazer isso utilizando paginação. Veja mais sobre isso nos seguintes links:
- Criando uma simples paginação de resultados;
- Paginação de resultados;
- Paginação com opção de limit;
- Paginação de resultados em PHP/MySQL.
Outros controles/noções interessante de se aplicar/de se ter nesse tipo de sistema é o seguinte:
- Função htmlentities;
- Função nl2br;
- Permitindo tags HTML sem brechas para XSS;
- Segurança em programação PHP – Parte 1;
- Segurança em programação PHP – Parte 2.
Há diversas outras coisas interessantes para se adicionar em um sistema do tipo. Mas eu irei deixar isto para uma segunda parte desse artigo/tutorial.
NOTICIAS RELACIONADAS:
- Sistema de votação online em PHP e MySQL
- Simples sistema de notícias que não possui Banco de Dados MySql
- Sistema de votação online em PHP e MySQL
- Usar MySQL com PHP
- Como instalar PHP, MySQL, PHPMyAdmin e FTP no Ubuntu
Filed under: PHP