1.º Passo - Criando e preparando o Banco de Dados (MySQL)
Você pode pular esta etapa e utilizar algum gerenciador gráfico para o MySQL.
Comece criando um banco de dados dedicado.
create database noticias;
Abra o banco de dados criado.
use noticias;
Agora é criar uma tabela para cadastro das suas notícias. Veja um exemplo a seguir.
CREATE TABLE noticias ( `id` INT(11) NOT NULL auto_increment, `nome` VARCHAR(40) NOT NULL , `sobrenome` VARCHAR(40) NOT NULL , `cidade` VARCHAR(50) NOT NULL , `estado` CHAR(2) NOT NULL , `email` VARCHAR(80) , `data` DATE NOT NULL, `hora` TIME NOT NULL , `titulo` VARCHAR(200) NOT NULL , `resumo` VARCHAR(255) , `texto` TEXT NOT NULL , `ver` TINYINT(1) DEFAULT '0' , PRIMARY KEY (id) );
Comentários sobre os campos acima:
- id: Campo de identificação -> Int, Chave-primária, Auto-incrementável
- nome: Primeiro nome do autor-> String, Não-vazio
- sobrenome: Sobrenome do autor -> String, Não-vazio
- cidade: Cidade do autor -> String, Não Vazio
- estado: Estado -> String, Não Vazio
- email: Email do autor -> String, Não Vazio
- data: Data do cadastro -> Date, Não Vazio
- hora: Hora do cadastro -> Time, Não Vazio
- título: Título -> String, Não Vazio
- resumo: Resumo (chamada) da notícia -> String
- texto: Corpo da notícia -> Text, Não Vazio
- ver: Flag para listar, ou não, a notícia -> Int, Padrão '0'
Nos campos data e hora acima, poderia ser utilizado um campo do tipo DATETIME, mas resolvi separar para facilitar no entendimento. 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ícias
Este é 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á:
<h1>Sistema de Cadastro de Notícias</h1> <form action="inserir.php" method="post"> <label for="nome">Nome: </label> <input name="nome" id="nome" type="text" /> <label for="sobrenome">Sobrenome: </label> <input name="sobrenome" id="sobrenome" type="text" /><br /> <label for="cidade">Cidade: </label> <input name="cidade" id="cidade" type="text" /><br /> <label for="estado">Estado: </label> <input name="estado" id="estado" type="text" /><br /> <label for="email">Email: </label> <input name="email" id="email" type="text" /><br /> <label for="titulo">Título do Texto: </label> <input name="titulo" id="titulo" type="text" /><br /> <label for="resumo">Resumo do Texto:</label> <input name="resumo" id="resumo" type="text" ><br /> <label for="texto">Texto: </label> <textarea name="texto" id="texto" rows="10" cols="30" /> </textarea><br /> <input type="submit" value="Cadastrar"> </form>
Vamos realizar uma pequena análise neste arquivo. Repare que os dados do formulário serão enviados para o script "inserir.php" que será o responsável pela inserção desta notícia no banco de dados. A data e hora serão inseridas automaticamente. Caso você queira preenchê-los, apenas tire o campo do "hidden" e coloque-os como editável ("text"). Não foi inserido nenhum validador do formulário, portanto de você não preencher algum campo, o banco de dados não irá aceitar a inserção pois os campos são NOT NULL (exceção do campo resumo).
Agora é hora de criar o script PHP responsável por isto tudo. Vamos nessa:
<?php /* * faz a conexao ao banco * e seleciona a base de dados */ $conexao = mysql_connect("localhost", "root", "root") or die ("Erro na conexão ao banco de dados."); $db = mysql_select_db("noticias") or die ("Erro ao selecionar a base de dados."); /* * monta query em SQL para insercao */ $sql = "INSERT INTO noticias ( nome, sobrenome, cidade, estado, email, data, hora, titulo, resumo, texto ) VALUES ( '".mysql_real_escape_string($_POST['nome'])."', '".mysql_real_escape_string($_POST['sobrenome'])."', '".mysql_real_escape_string($_POST['cidade'])."', '".mysql_real_escape_string($_POST['estado'])."', '".mysql_real_escape_string($_POST['email'])."', NOW(), NOW(), '".mysql_real_escape_string($_POST['titulo'])."', '".mysql_real_escape_string($_POST['resumo'])."', '".mysql_real_escape_string($_POST['texto'])."' )"; /* * executa a query */ $sql = mysql_query($sql) or die ("Houve erro na gravação dos dados."); ?> <h1>Cadastro efetuado com sucesso!</h1>
Você pode aperfeiçoar muito mais o script. Por exemplo, personalizar as mensagens de erro e sucesso, redirecionar para outras páginas, etc.
3.º Passo - Recuperando os dados cadastrados
Irei 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". A ordenação é feita pelo campo id, mas podia ser feita também pelo campo data, caso fosse um campo do tipo DATETIME.
<?php /* * faz a conexao ao banco * e seleciona a base de dados */ $conexao = mysql_connect("localhost", "root", "root") or die ("Erro na conexão ao banco de dados."); $db = mysql_select_db("noticias") or die ("Erro ao selecionar a base de dados."); /* * monta consulta em SQL * seleciona as ultimas 15 noticias ordenadas * decrescente por data * obs.: seleciona somente as noticias que foram * liberadas pelo webmaster */ $sql = "SELECT * FROM noticias WHERE ver = '1' ORDER BY id DESC LIMIT 15"; /* * executa e trata a consulta */ $resultado = mysql_query($sql) or die ("Não foi possível realizar a consulta"); if (@mysql_num_rows($resultado) == 0) die('Nenhum registro encontrado'); /* * fazendo um loop para mostrar os resultados */ while ($linha = mysql_fetch_array($resultado, MYSQL_ASSOC)) { $novadata = substr($linha['data'],8,2) . "/" . substr($linha['data'],5,2) . "/" . substr($linha['data'],0,4); $novahora = substr($linha['hora'],0,2) . "h" . substr($linha['hora'],3,2) . "min"; echo "<b>Código da Notícia</b>: {$linha['id']} <br />"; echo "Autor: {$linha['nome']} {$linha['sobrenome']} <br />"; echo "E-mail: {$linha['email']} <br />"; echo "Cidade: {$linha['cidade']} <br />"; echo "Estado: {$linha['estado']} <br />"; echo "Data: $novadata - Horário: $novahora <br />"; echo "Título: {$linha['titulo']} <br />"; echo "Resumo: <em> {$linha['resumo']} </em> <br />"; echo "Notícia: {$linha['texto']} <br />"; echo "Validado pelo Webmaster: "; if ($linha['ver'] == 1) echo "Sim"; else echo "Não"; echo "<hr />"; } ?>
As variáveis novadata e novahora foram criadas para tratar a hora e data do formato do SGBD para o formato usual.
Você ainda pode personalizar estas notícias, deixando o layout do seu jeito!
OBS: para mostrar todas as notícias, apenas retire o "LIMIT 15" da consulta.
4.º Passo - Controle de Notícias para Webmaster
Neste passo irei explicar como gerenciar os dados desta tabela. Primeiramente, devemos criar um arquivo PHP para mostrar todos os dados na tela, para depois podermos manuseá-los. Faça como o exemplo abaixo:
<?php /* * faz a conexao ao banco * e seleciona a base de dados */ $conexao = mysql_connect("localhost", "root", "root") or die ("Erro na conexão ao banco de dados."); $db = mysql_select_db("noticias") or die ("Erro ao selecionar a base de dados."); /* * monta e executa consulta em SQL */ $sql = "SELECT * FROM noticias ORDER BY id DESC"; $resultado = mysql_query($sql) or die ("Não foi possível realizar a consulta."); ?> <table> <tr> <th>ID:</th> <th>Nome:</th> <th>Sobrenome:</th> <th>Cidade:</th> <th>UF:</th> <th>Email:</th> <th>Data:</th> <th>Hora:</th> <th>Título:</th> <th>Disponível?</th> <th>Opções</th> </tr> <?php /* * mostra os dados na tela */ while ($linha = mysql_fetch_array($resultado, MYSQL_ASSOC)) { $novadata = substr($linha['data'],8,2) . "/" . substr($linha['data'],5,2) . "/" . substr($linha['data'],0,4); $novahora = substr($linha['hora'],0,2) . "h" . substr($linha['hora'],3,2) . "min"; echo "<tr>"; echo "<td>{$linha['id']}</td>"; echo "<td>{$linha['nome']}</td>"; echo "<td>{$linha['sobrenome']}</td>"; echo "<td>{$linha['cidade']}</td>"; echo "<td>{$linha['estado']}</td>"; echo "<td>{$linha['email']}</td>"; echo "<td>$novadata</td>"; echo "<td>$novahora</td>"; echo "<td>{$linha['titulo']}</td>"; echo "<td>{$linha['ver']}</td>"; echo "<td><a href='alterar.php?id={$linha['id']}'>Alterar</a> / "; echo "<a href='excluir.php?id={$linha['id']}'>Excluir</a></td>"; echo "</tr>"; } echo "</table>"; ?>
O próximo passo agora é criar os arquivos alterar.php e excluir.php, responsáveis pela alteração e exclusão dos dados. Veja o código dos 2 arquivos respectivamente:
<?php /* * faz a conexao ao banco * e seleciona a base de dados */ $conexao = mysql_connect("localhost", "root", "root") or die ("Erro na conexão ao banco de dados."); $db = mysql_select_db("noticias") or die ("Erro ao selecionar a base de dados."); /* * monta e executa consulta em SQL */ $sql = "SELECT * FROM noticias WHERE id = ".(int)$_GET['id']; $resultado = mysql_query($sql) or die ("Não foi possível realizar a consulta."); $linha = mysql_fetch_array($resultado, MYSQL_ASSOC); ?> <h1>Alterar Cadastro</h1> <form action="alterar_db.php?id=<?php echo $_GET['id'] ?>" method="post"> <label for="nome">Nome: </label> <input name="nome" id="nome" type="text" value="<?php echo $linha['nome'] ?>" /> <label for="sobrenome">Sobrenome: </label> <input name="sobrenome" id="sobrenome" type="text" value="<?php echo $linha['sobrenome'] ?>" /><br /> <label for="cidade">Cidade: </label> <input name="cidade" id="cidade" type="text" value="<?php echo $linha['cidade'] ?>" /><br /> <label for="estado">Estado: </label> <input name="estado" id="estado" type="text" value="<?php echo $linha['estado'] ?>" /><br /> <label for="email">Email: </label> <input name="email" id="email" type="text" value="<?php echo $linha['email'] ?>" /><br /> <label for="titulo">Título do Texto: </label> <input name="titulo" id="titulo" type="text" value="<?php echo $linha['titulo'] ?>" /><br /> <label for="resumo">Resumo do Texto:</label> <input name="resumo" id="resumo" type="text" value="<?php echo $linha['resumo'] ?>" ><br /> <label for="texto">Texto: </label> <textarea name="texto" id="texto" rows="10" cols="30" /> <?php echo $linha['texto'] ?></textarea><br /> <label for="mostra">Mostrar Notícia? </label> <input name="ver" id="ver" type="checkbox" value="1" <?php if ($linha['ver'] == 1) { ?>checked="checked"<?php } ?>/><br /> <input type="submit" value="Alterar" /> </form> ?>
<?php /* * faz a conexao ao banco * e seleciona a base de dados */ $conexao = mysql_connect("localhost", "root", "root") or die ("Erro na conexão ao banco de dados."); $db = mysql_select_db("noticias") or die ("Erro ao selecionar a base de dados."); /* * monta e executa consulta em SQL */ $sql = "DELETE FROM noticias WHERE id = ".(int)$_GET['id']; $resultado = mysql_query($sql) or die ("Erro ao remover notícia."); ?> <h1>A notícia foi excluída com êxito!</h1>
Agora basta criarmos o arquivo alterar_db.php que irá receber os dados do arquivo alterar.php e alterará seus respectivos dados no SGBD:
<?php /* * faz a conexao ao banco * e seleciona a base de dados */ $conexao = mysql_connect("localhost", "root", "root") or die ("Erro na conexão ao banco de dados."); $db = mysql_select_db("noticias") or die ("Erro ao selecionar a base de dados."); /* * monta e executa consulta em SQL */ $sql = "UPDATE noticias SET nome='".mysql_real_escape_string($_POST['nome'])."', sobrenome='".mysql_real_escape_string($_POST['sobrenome'])."', cidade='".mysql_real_escape_string($_POST['cidade'])."', estado='".mysql_real_escape_string($_POST['estado'])."', email='".mysql_real_escape_string($_POST['email'])."', data=NOW(), hora=NOW(), titulo='".mysql_real_escape_string($_POST['titulo'])."', resumo='".mysql_real_escape_string($_POST['resumo'])."', texto='".mysql_real_escape_string($_POST['texto'])."', ver='".(($_POST['ver']) ? 1 : '0')."' WHERE id = ".(int)$_GET['id']; $resultado = mysql_query($sql) or die ("Erro ao alterar notícia."); ?> <h1>Notícia alterada com sucesso!</h1>