Criando um Portal
de Notícias baseado em PHP/MySQL
1.º Passo - Criando e preparando o Banco de Dados (MySQL)Comece criando um
banco de dados dedicado a este tutorial. Por exemplo, com o nome notícias; se já
estiver no cliente MySQL, digite o seguinte:
create database noticias;
Por conseguinte, abra o banco de dados criado:
use noticias;
Agora é criar uma tabela para cadastro das suas notícias. Você pode seguir o
exemplo abaixo, superprático:
CREATE TABLE noticias (
id int(5) NOT NULL auto_increment,
nome char(30) NOT NULL ,
sobrenome char(30) NOT NULL ,
cidade char(50) NOT NULL ,
estado char(2) NOT NULL ,
email char(80) ,
data date NOT NULL,
hora time NOT NULL ,
titulo char(100) NOT NULL ,
subtitulo char(200) ,
texto text NOT NULL ,
ver char(3) DEFAULT 'off' ,
PRIMARY KEY (id),
UNIQUE id (id)
);
Se você já tiver uma base de conhecimento em SQL, poderá saber o que cada
linha acima realizará. Irei especificar o que você irá cadastrar em cada
campo:
- id = Campo de
identificação da notícia (não é necessário cadastrar nenhum dado, pois
ele já está habilitado com a função auto_increment que, automaticamente,
irá inserindo novos valores)
- nome =
Primeiro nome do autor da notícia
- sobrenome =
Sobrenome do autor da notícia
- cidade =
Cidade do autor
- estado =
Estado da cidade (especificada com apenas 2 caracteres)
- email = Email
do autor, para contatos
- data = Data
utilizada, para saber quando foi realizado o cadastro (não será necessário
nenhum cadastro, pois faremos isso no php automaticamente, inserindo a data
atual)
- hora = Hora
utilizada no cadastro da notícias (também não é necessário o cadastro,
pois será feito automaticamente com o PHP)
- título = Título
da notícia (máximo de 100 caracteres)
- subtítulo =
Pequeno resumo da sua notícia (máximo de 200 caracteres)
- texto = Agora
sim, o texto da sua notícia, sem limite de caracteres
- ver = Este
campo é curioso. Ele será utilizado para o webmaster poder autorizar cada
notícia, pois caso não tivesse um campo parecido, toda notícia cadastrada
iria para o site. É como um controle de notícias. O padrão aqui, é off,
assim toda notícia primeiro será passada para o webmaster, para depois ser
validada. *
são campos obrigatórios no cadastro Agora com o banco de dados preparado,
é hora de criarmos o sistema de cadastro de notícias do seu site. Este será
o 2.º passo! 2º Passo - Criando o sistema de cadastro de notíciasEste é
um passo importante, onde um script criado em PHP irá inserir dados no
banco de dados MySQL. Aqui iremos utilizar os conhecimentos passados no
tutorial anterior, sobre questões básicas de PHP/MySQL. Primeiramente será
criado o arquivo em HTML (formulário) para o cadastro de notícias. Vamos lá:
ARQUIVO cadastra.php
<?php
$data = date("Y-m-d");
$hora = date("H:i:s");
$novadata = substr($data,8,2) . "/" .substr($data,5,2) .
"/" . substr($data,0,4);
$novahora = substr($hora,0,2) . "h" .substr($hora,3,2) .
"min";
echo "<h1>Sistema de Cadastro de Notícias</h1>";
echo "<hr><br>";
echo "<form action='inserir.php' method='post'>";
echo "Nome:<input name='nome' type='text' size=30> *<br>";
echo "Sobrenome:<input name='sobrenome' type='text' size=30>
*<br>";
echo "Cidade:<input name='cidade' type='text' size=30> *<br>";
echo "Estado:<i>(Exemplo: SP, RS, BA)</i><input name='estado'
type='text' size=5> *<br>";
echo "Email: <i>(Exemplo: feitosac@yahoo.com)</i><input
name='email' type='text' size=30><br><br>";
echo "Título do Texto:<input name='titulo' type='text' size=30>
*<br>";
echo "Subtítulo do Texto:<textarea name='subtitulo' rows=5 cols=30></textarea><br>";
echo "Texto:<textarea name='texto' rows=10 cols=30></textarea>
*<br>";
echo "<input name='data' type='hidden' value='$data'<>input
name='hora' type='hidden' value='$hora'>";
echo "<input type='submit' value='Cadastrar'>";
echo "</form>";
echo "<br><hr>";
echo "<i>Campos marcados com <b>*</b> são obrigatórios
no cadastro.<br>";
echo "<b>Observação</b>: Será inserido no seu cadastro a
data atual, bem como a hora atual do cadastro<br>";
echo "Data: $novadata - Hora: $novahora<br>";
?>
FIM DO ARQUIVO cadastra.php
- Vamos realizar
uma pequena análise neste arquivo. Repare que os dados do formulário serão
enviados para o script "inserir.php", este, por conseguinte, será
o responsável pela inserção desta notícia no MySQL. Outro ponto, é que
não existem os campos id, ver, estes, como expliquei, serão
inseridos automaticamente pelo MySQL, e os campos data, hora,
serão inseridos pelo PHP.
- Agora é hora
de criar o script PHP responsável por isto tudo. Vamos nessa:
ARQUIVO inserir.php
<?php
//Vamos definir as variáveis de data e hora
//para inserção no banco de dados
//Agora com as variáveis de data e hora criadas
//vamos criar uma variável especial para a querie sql
$sql = "INSERT INTO noticias (nome, sobrenome, cidade, estado, email,
data, hora,
titulo, subtitulo, texto) VALUES ('$nome', '$sobrenome', '$cidade',
'$estado',
'$email', '$data', '$hora', '$titulo', '$subtitulo', '$texto')";
//Agora é hora de contatar o mysql
$conexao = mysql_connect("localhost", "root",
"root")
or die ("Configuração de Banco de Dados Errada!");
//Substitua os valores acima caso não esteje de acordo com sua máquina
//Selecionando o banco de dados...
$db = mysql_select_db("noticias")
or die ("Banco de Dados Inexistente!");
//Inserindo os dados
$sql = mysql_query($sql)
or die ("Houve erro na gravação dos dados, por favor, clique em
voltar e verifique os campos obrigatórios!");
echo "<h1>Cadastro efetuado com sucesso!</h1>";
?>
FIM DO ARQUIVO inserir.php
- Você pode
aperfeiçoar muito mais o script. Por exemplo, personalizar a mensagem de
erro e de êxito, inserir um link para cadastrar novamente, etc.
- Agora vamos
para o próximo e último passo, "Recuperando os dados
cadastrados" 3.º
Passo - Recuperando os dados cadastradosIrei mostrar como selecionar, por
exemplo, as últimas 15 notícias inseridas no MySQL; isto é muito útil,
para sites que têm seções do tipo "Últimas Notícias". Isto é
feito com PHP novamente; faça conforme o exemplo abaixo, e salve como um
arquivo em PHP.
ARQUIVO noticias.php
<?php
//Vamos precisar contar o MySQL novamente
$conexao =
mysql_connect("localhost","root","root");
$db = mysql_select_db("noticias");
//Agora é realizar a querie de busca no banco de dados
$sql = "SELECT * FROM noticias WHERE ver = 'on' ORDER BY id DESC LIMIT
15";
// Irá selecionar as últimas 15 notícias inseridas
// O curioso aqui, é que ele só irá selecionar os campos onde
// estiver o ver=on, isto foi discutido logo atrás, como um
// controle de notícias pelo webmaster
// Por padrão o MySQL colocou off, mas o webmaster terá que
// revisar as notícias e alterar o campo ver para as que quiser validar.
$resultado = mysql_query($sql)
or die ("Não foi possível realizar a consulta ao banco de
dados");
// Agora iremos "pegar" cada campo da notícia
// e organizar no HTML
while ($linha=mysql_fetch_array($resultado)) {
$id = $linha["id"];
$nome = $linha["nome"];
$sobrenome = $linha["sobrenome"];
$cidade = $linha["cidade"];
$estado = $linha["estado"];
$email = $linha["email"];
$data = $linha["data"];
$hora = $linha["hora"];
$titulo = $linha["titulo"];
$subtitulo = $linha["subtitulo"];
$texto = $linha["texto"];
$ver = $linha["ver"];
$novadata = substr($data,8,2) . "/" .substr($data,5,2) .
"/" . substr($data,0,4);
$novahora = substr($hora,0,2) . "h" .substr($hora,3,2) .
"min";
echo "<b>Código da Notícia</b>: $id";
echo "<br>";
echo "Autor: $nome $sobrenome - ($email)";
echo "<br>";
echo "Cidade: $cidade - Estado: $estado";
echo "<br>";
echo "Data: $novadata - Horário: $novahora";
echo "<br>";
echo "Título da Notícia: $titulo";
echo "<br>";
echo "Subtítulo da Notícia: <i> $subtitulo </i>";
echo "<br>";
echo "Notícia: $texto";
echo "<br>";
echo "Validado pelo Webmaster: ";
if ($ver=on) { echo "Sim"; } else { echo "Não"; }
echo "<hr>";
}
?>
FIM DO ARQUIVO noticias.php
- Viu como é
super simples? Neste script criamos uma variável para cada campo da tabela,
assim fica mais fácil de manusear os dados de qualquer forma. Nas variávels
novadata, novahora, crie uma função para mostrar as variáveis
de uma forma melhor. (agradecimentos a RENAS - Amigão!)
- Você ainda
pode personalizar estas notícias, deixando o layout do seu jeito!
- OBS: para
mostrar todas as notícias em vez de só as últimas 15, apenas crie uma
nova variável $sql, como esta abaixo:
$sql = "SELECT * FROM noticias WHERE ver = 'on' ORDER BY id DESC";
- Pronto! Foi só
retirar "LIMIT 15". ;) 4.º
Passo - Controle de Notícias para WebmasterNeste passo irei explicar como
mostrar todos os dados da tabela, para podermos modificá-los, apagá-los,
etc. Primeiramente, devemos criar um arquivo PHP para mostrar todos os dados
na tela, para depois podermos manuseá-los. Faça como o exemplo abaixo:
ARQUIVO controle.php
<?php
$conexao =
mysql_connect("localhost","root","root");
$db = mysql_select_db("noticias");
$sql = "SELECT * FROM noticias ORDER BY id DESC";
$resultado = mysql_query($sql)
or die ("Não foi possível realizar a consulta ao banco de
dados");
echo "<table width=740 border=1 cellpadding=1
cellspacing=1>";
echo "<tr>";
echo "<th width=15>ID:</th>";
echo "<th width=100>Nome:</th>";
echo "<th width=100>Sobrenome:</th>";
echo "<th width=100>Cidade:</th>";
echo "<th width=15>UF:</th>";
echo "<th width=100>Email:</th>";
echo "<th width=30>Data:</th>";
echo "<th width=30>Hora:</th>";
echo "<th width=100>Título:</th>";
echo "<th width=50>Disponível?</th>";
echo "<th width=50>Alterar</th>";
echo "<th width=50>Excluir</th>";
echo "</tr>";
while ($linha=mysql_fetch_array($resultado)) {
$id = $linha["id"];
$nome = $linha["nome"];
$sobrenome = $linha["sobrenome"];
$cidade = $linha["cidade"];
$estado = $linha["estado"];
$email = $linha["email"];
$data = $linha["data"];
$hora = $linha["hora"];
$titulo = $linha["titulo"];
$ver = $linha["ver"];
$novadata = substr($data,8,2) . "/" .substr($data,5,2) .
"/" . substr($data,0,4);
$novahora = substr($hora,0,2) . "h" .substr($hora,3,2) .
"min";
echo "<tr>";
echo "<th width=15>$id<br></th>";
echo "<th width=100>$nome<br></th>";
echo "<th width=100>$sobrenome<br></th>";
echo "<th width=100>$cidade<br></th>";
echo "<th width=15>$estado<br></th>";
echo "<th width=100>$email<br></th>";
echo "<th width=30>$novadata<br></th>";
echo "<th width=30>$novahora<br></th>";
echo "<th width=100>$titulo<br></th>";
echo "<th width=50>$ver<br></th>";
echo "<th width=50><a
href='alterar.php?id=$id'>Alterar</a><br></th>";
echo "<th width=50><a
href='excluir.php?id=$id'>Excluir</a><br></th>";
echo "</tr>";
echo "<br>";
}
echo "</table>";
?>
FIM DO ARQUIVO controle.php
O próximo passo agora é criar os arquivos alterar.php e excluir.php,
responsáveis pela alteração e exclusão dos dados. É muito simples o código,
veja só:
ARQUIVO excluir.php
<?php
$conexao =
mysql_connect("localhost","root","root");
$db = mysql_select_db("noticias");
$sql = “DELETE FROM noticias WHERE id='$id'”;
$resultado = mysql_query($sql)
or die ("Não foi possível realizar a exclusão dos dados.");
echo “<h1>A notícia foi excluída com êxito!</h1>”;
?>
FIM DO ARQUIVO excluir.php
ARQUIVO alterar.php
<?php
$conexao =
mysql_connect("localhost","root","root");
$db = mysql_select_db("noticias");
$sql = "SELECT * FROM noticias WHERE id='$id'";
$resultado = mysql_query($sql)
or die ("Não foi possível realizar a consulta ao banco de
dados");
while ($linha=mysql_fetch_array($resultado)) {
$id = $linha["id"];
$nome = $linha["nome"];
$sobrenome = $linha["sobrenome"];
$cidade = $linha["cidade"];
$estado = $linha["estado"];
$email = $linha["email"];
$data = $linha["data"];
$hora = $linha["hora"];
$titulo = $linha["titulo"];
$subtitulo = $linha["subtitulo"];
$texto = $linha["texto"];
$ver = $linha["ver"];
$novadata = substr($data,8,2) . "/" .substr($data,5,2) .
"/" . substr($data,0,4);
$novahora = substr($hora,0,2) . "h" .substr($hora,3,2) .
"min";
echo "<h1>Alterar Cadastro...</h1>";
echo "<hr><br>";
echo "<form action='alterar_db.php?id=$id' method='post'>";
echo "Código da Notícia: <input name='id_novo' type='text'
value='$id' size=20><br>";
echo "Data: $novadata<br>";
echo "Hora: $novahora<br>";
echo "Nome:<input name='nome_novo' type='text' value='$nome'
size=30> *<br>";
echo "Sobrenome:<input name='sobrenome_novo' type='text'
value='$sobrenome' size=30> *<br>";
echo "Cidade:<input name='cidade_novo' type='text' value='$cidade'
size=30> *<br>";
echo "Estado:<i>(Exemplo: SP, RS, BA)</i><input
name='estado_novo' type='text'
value='$estado' size=5> *<br>";
echo "Email: <i>(Exemplo: feitosac@yahoo.com)</i><input
name='email_novo' type='text'
value='$email' size=30><br><br>";
echo "Título do Texto:<input name='titulo_novo' type='text'
value='$titulo' size=30> *<br>";
echo "Subtítulo do Texto:<textarea name='subtitulo_novo' rows=5
cols=30>$subtitulo</textarea><br>";
echo "Texto:<textarea name='texto_novo' rows=10
cols=30>$texto</textarea> *<br>";
echo "Disponibilizar? (on ou off): <input name='ver_novo'
type='text' value='$ver' size=5><br>";
echo "<input type='submit' value='Alterar'>";
echo "</form>";
echo "<br><hr>";
}
?>
FIM DO ARQUIVO alterar.php
Agora basta criarmos o arquivo alterar_db.php que irá receber os
dados deste arquivo (alterar.php) e alterará seus respectivos dados no
MySQL. É muito simples:
ARQUIVO alterar_db.php
<?php
$conexao =
mysql_connect("localhost","root","root");
$db = mysql_select_db("noticias");
$sql = "UPDATE noticias SET id='$id_novo',nome='$nome_novo'
,sobrenome='$sobrenome_novo',cidade='$cidade_novo',estado='$estado_novo'
,email='$email_novo',titulo='$titulo_novo',subtitulo='$subtitulo_novo'
,texto='$texto_novo',ver='$ver_novo' WHERE id='$id'";
$resultado = mysql_query($sql)
or die ("Não foi possível realizar a consulta ao banco de
dados");
echo "<h1>Notícia alterada com sucesso!</h1>";
?>
FIM DO ARQUIVO alterar_db.php
Tutorial por:
Ciro Feitosa
http://cirofeitosa.com.br
feitosac@yahoo.com