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.

Este artigo/tutorial é indicado para aqueles que já tem um conhecimento básico de PHP e MySQL, portanto eu não irei entrar em maiores detalhes do funcionamento básico deste sistema. Se você não esta familiarizado com os mesmos, dê uma olhada nos seguintes links que eles poderão lhe ajudar a compreender melhor eles:

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\" />&nbsp;&nbsp;<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:

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\" />&nbsp;&nbsp;<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:

Outros controles/noções interessante de se aplicar/de se ter nesse tipo de sistema é o seguinte:

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:

  1. Sistema de votação online em PHP e MySQL
  2. Sistema de votação online em PHP e MySQL
  3. Simples sistema de notícias que não possui Banco de Dados MySql
  4. Usar MySQL com PHP
  5. Como instalar PHP, MySQL, PHPMyAdmin e FTP no Ubuntu

Leave a Reply

Spam Protection by WP-SpamFree