Sistema De Notícias Em PHP E MySQL Parte1

Outros artigos desta série Sistema de Notícias em PHP e MySQL:

O meu projecto para os próximos artigos é criar e desenvolver um sistema de notícias em PHP e MySQL. Vou começar com o básico e o sistema irá evoluir para um sistema de notícias mais completo, mas será uma evolução passo a passo. Assim, qualquer leitor que esteja a aprender PHP e MySQL terá a oportunidade de compreender o desenvolvimento do sistema de notícias e poderá utilizar e adaptar este sistema de notícias às suas necessidades.

Também aguardo feedback dos leitores em relação ao próprio desenvolvimento do sistema de notícias. Que características é que vocês gostariam de ver neste sistema de notícias? Atenção, que não quero criar um CMS como o WordPress, Joomla ou Drupal. Para isso, já existem esses CMS. Quero criar um sistema simples e que seja muito fácil de utilizar.

Hoje apresento o projecto e a base do sistema de notícias em PHP e MySQL. Nos próximos artigos, vamos adicionar módulos; uma zona de administração com necessidade de autenticação, um sistema de upload de imagens, um editor HTML, como gerar estatísticas, e tudo o que vocês desejaram, desde que se enquadre na ideia de SIMPLICIDADE.

Vou utilizar o CSS framework grid 960 para trabalhar o design das páginas de administração. Mais tarde, o design poderá evoluir por outros caminhos.

Criar A Base De Dados MySQL

O primeiro passo é criar a base de dados MySQL.

Abram o vosso gestor de MySQL. Se utilizam um WAMP ou equivalente, activem os respectivos serviços e apontem o vosso browser para o phpMyAdmin. Se utilizam o Xampp, por exemplo, podem encontrar o phpMyAdmin no url:
http://localhost/phpmyadmin/ .

Criem uma base de dados MySQL com o nome tutorial e podem executar o código que segue para criar a tabela:


CREATE TABLE IF NOT EXISTS `noticias` (
`n_id` int( 11 ) NOT NULL AUTO_INCREMENT ,
`n_data` date NOT NULL ,
`n_titulo` varchar( 255 ) NOT NULL ,
`n_texto` text NOT NULL ,
`n_img` varchar( 255 ) NOT NULL ,
PRIMARY KEY ( `n_id` )
);

  • O campo n_id é um campo numérico que se incrementa automaticamente. É bastante útil, pois sendo uma referência única, sem duplicações, podemos utilizar esse campo para distinguir linhas de dados para edição e outros comandos.
  • O campo n_data é um campo onde vamos gravar a data da inserção da notícia.
  • O campo n_titulo é o campo reservado para os títulos das notícias. Podemos escrever até 255 caracteres.
  • O campo n_texto é para o texto da notícia.
  • O campo n_img é idêntico ao do titulo e esta guardado para gravarmos o url duma imagem. Também está limitado a 255 caracteres.

Começar do Zero!

Em termos práticos, existem 2 tarefas básicas:

  1. gravar informação na base de dados;
  2. visualizar a informação gravada na base de dados.

Vamos ter um ficheiro index.php, onde vamos visualizar a informação que foi gravado na base de dados. Mais tarde, vamos decidir que informação é que pretendemos visualizar e como podemos seleccionar essa informação e visualizá-la. O index.php é o ficheiro que os visitantes do website vão abrir, quando acederem ao nosso domínio. É usual chamar à parte pública do sistema de notícias Frontoffice.

A parte de administração do sistema de notícias, onde executamos todas as tarefas de gestão das notícias é chamado de Backoffice. Vamos colocar as pastas e ficheiros do Backoffice numa pasta admin.

Também precisamos de estabelecer a ligação entre a programação em PHP e a base de dados em MySQL. Essa ligação ou coneção à base de dados, que é necessária tanto no Frontoffice, como no Backoffice, encontra-se dentro da pasta conn, no ficheiro conn.php. Vamos configurar neste ficheiro a ligação entre os ficheiros php e a base de dados MySQL, permitindo desse modo o acesso à base de dados e consequentemente todos os comandos que nos vão permitir adicionar e gravar informação na base de dados e seleccionar e visualizar informação gravada na base de dados.

Portanto, para já, temos 1 ficheiro index.php, 1 pasta conn, onde temos o ficheiro conn.php e uma pasta admin, onde temos vários ficheiros do Backoffice.

O Ficheiro conn.php – Ligação À Base De Dados MySQL

Este ficheiro é a chave de acesso à base de dados. Se estiver mal configurado, não há sistema de notícias. Portanto, é importante que fique bem configurado.


<?php
$servidor  =  "localhost";
$basedados  =  "tutorial";
$utilizador  =  "root";
$chavepass  =  "";

$conn = mysql_connect($servidor, $utilizador, $chavepass);
if (!$conn)
{
die('Erro; ' . mysql_error());
}
?>

Ao escrever o ficheiro e configurar a ligação, verifique se as variáveis $servidor, $basedados, $utilizador e $chavepass estão correctas. A variável $servidor refere-se ao servidor MySQL. Como estamos a trabalhar num sistema simples e com leitores que estão a aprender programação, é normal que o servidor de MySQL esteja alojado no mesmo computador / servidor que o servidor web e os ficheiros php do sistema de notícias. Nesse caso, o valor correcto para a variável $servidor deverá ser localhost.

A variável $basedados refere-se ao nome da base de dados MySQL. No meu caso, como eu criei uma base de dados com o nome tutorial, o valor é tutorial. Para quem utiliza o xampp ou outro WAMP no pc de casa ou do trabalho, a base de dados é criada no gestor de MySQL, normalmente o phpmyadmin. E você decide o nome da base de dados. E é esse nome que vai colocar como valor na variável $basedados. Quem criar a base de dados num alojamento, num servidor web com control panel, como o cPanel, essa base de dados normalmente é criada no próprio control panel e fica com um prefixo correspondente ao utilizador desse control panel. Vamos imaginar que o utilizador do cPanel é userc e você criou uma base de dados chamada tutorial, o valor que você terá que colocar na variável $basedados será userc_tutorial.

As variáveis $utilizador e $chavepass referem-se ao utilizador MySQL e respectiva password. Se utilizar o Xampp e utilizar os dados do sistema por defeito, pode utilizar o user root e não precisa de preencher o valor para a variável $chavepass. Quando passar o sistema de notícias para um alojamento web, terá que criar um utilizador mysql, com a respectiva password, por razões de segurança. E até porque num alojamento partilhado, se você colocar o utilizador root, não vai funcionar, porque a sua conta de alojamento não tem permissões para aceder com esse utilizador.

O Ficheiro admin.php No Backoffice Do Sistema de Notícias

Voltamos agora prestar atenção ao nosso Backoffice e aos ficheiros que estão na pasta admin. Comecemos pelo ficheiro admin.php. Neste ficheiro, vamos encontrar o formulário que nos vai permitir escrever e submeter a informação que pretendemos e gravar na base de dados MySQL.


<form id="inserir" name="inserir" method="post" action="inserir-noticia.php">
<input name="data" type="hidden" id="data" value="<?php echo date('Y-m-d') ?>" />
Titulo:<br />
<input name="titulo" type="text" id="titulo" size="40" /><br />
Texto:<br />
<textarea name="texto" id="texto" cols="45" rows="5"></textarea><br />
Img:<br />
<input name="imgs" type="text" id="imgs" size="40" /><br />
<input type="submit" name="button" id="button" value="Submeter" />
</form>

Se verificarmos a primeira linha do formulário, vamos utilizar o método post e vamos processar no ficheiro inserir-noticia.php a informação submetida no ficheiro admin.php. O ficheiro inserir-noticia.php vai gravar a informação submetida pelo formulário na base de dados MySQL.

No formulário, no ficheiro admin.php, vamos criar as seguintes variáveis:

  • data
  • titulo
  • texto
  • imgs

O Ficheiro inserir-noticias.php No Backoffice Do Sistema de Notícias

O ficheiro inserir-noticias.php é aquele que vai processar a informação contida nas variáveis do formulário e inserir e gravar essa informação na base de dados MySQL.


<?php
ob_start();
include('../conn/conn.php');

$data  =  $_POST['data'];
$titulo  =  $_POST['titulo'];
$texto  =  $_POST['texto'];
$imgs  =  $_POST['imgs'];

if ((!empty($titulo)) and (!empty($texto))) {
mysql_select_db($basedados, $conn);
mysql_query("INSERT INTO noticias (n_data, n_titulo, n_texto, n_img)
VALUES ('$data', '$titulo', '$texto', '$imgs')");

mysql_close($conn);

header("Location: admin.php?accao=noticia");
exit();
}
?>

Incluímos a chave de acesso à base de dados, ou seja, incluímos o ficheiro onde está a ligação à base de dados: vejam o include do ficheiro conn.php.

Depois declaramos as variáveis e atribuímos às variáveis declaradas os valores do formulário. Portanto, a informação submetida pelo utilizador, através do formulário existente no ficheiro admin.php passa a estar contida nessas variáveis declaradas.

Antes do ficheiro inserir-noticias.php processar os dados, há uma condição: se a variável referente ao titulo e a variável referente ao texto estiverem vazias, o php não grava a informação na base de dados. Caso não estejam vazias, vai processar a informação contida nas variáveis que declaramos e inserir os dados na base de dados.

O Ficheiro index.php No Frontoffice Do Sistema de Notícias

Como já escrevemos, o ficheiro index.php vai permitir que os visitantes do website visualizem as notícias. Nesta primeira fase, é muito simples.


<?php
include('conn/conn.php');
mysql_select_db($basedados, $conn);

$resultado = mysql_query("SELECT * FROM noticias ORDER BY n_id DESC");

while($linha = mysql_fetch_array($resultado)) {
echo   "<h1>".$linha['n_titulo']."</h1>";
echo   "<br />";
echo  "<p>".$linha['n_texto']." <img src='".$linha['n_img']."' alt='' align='left' /> "."</p>";
echo   "<br />";
}

mysql_close($conn);
?>

Mais uma vez, reparem no include do ficheiro conn.php, que permite o acesso à base de dados, dado que a ligação à base de dados está nesse ficheiro.

A seguir, o comando SELECT * FROM noticias significa seleccionar todos os dados da tabela noticias. Acrescentamos ORDER BY n_id DESC. Estamos a ordenar as notícias pelo n_id e duma forma descendente. Como o n_id é incremental, estamos a visualizar as notícias pela ordem com que foram inseridas na base de dados, neste caso, ordem descendente. Ou seja, as últimas notícias inseridas na base de dados são sempre as primeiras que vamos ver no index.php.

Inserimos também um while que significa que enquanto houver dados o index.php processa a informação e permite a respectiva visualização.

Download Do Código Do Sistema De Noticias Em PHP e MySQL

Descarreguem aqui o código do Sistema De Noticias Em PHP e MySQL

Próximo Artigo

Ainda não escrevemos a parte 2 desta série. Ajude-nos a decidir a evolução deste sistema de notícias. Comente o que deve ser adicionado a seguir. O que é que vocês pretendem que seja incluído no Sistema de Notícias?

Be Sociable, Share!

14 Comentários

  1. Bruno

    Olá, estou iniciando em php graças ao wordpress, os tutorias do WP que vcs disponibilizaram está ótimo, sem ele acho que não conseguiria sequer instalá-lo, parabéns pelo artigo WP. Bom já se tratando desse tutorial, eu gostaria que vcs explicassem como é feito um upload de imagens, isso será muito útil para as noticias, o interessante também seria ter cadastro de usuários e como é feito a verificação do usuário na hora de fazer o login. Vcs estão de parabéns.

  2. Danilo Miranda

    Fazer um sistema de comentários nas notícias.

    • Olá Danilo! É uma boa ideia. Acho que o artigo 2 vai introduzir um sistema de upload de imagens, que foi pedido nos comentários. O autor vai ler o seu comentário e certamente vai considerá-lo. Um Abraço Rui Soares

  3. Olá Danilo, estou quase a acabar o meu próximo artigo e é mesmo sobre upload de imagens. Só falta escrever o texto, a programação já esta.

    Posso garantir que vou incluir um sistema de comentários, mas antes tenho inserir um editor WYSIWYG na admin das notícias e melhorar a formatação da notícia.

  4. Amigo estou com o seguinte problema,

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/fellippest/public_html/viper/noticias/index.php on line 7

    como resolver, sou totalmente leigo em mysql

  5. Estou precisando de ajuda, pois esta me aparecendo esse erro

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in C:AppServwwwsistema-noticiasadmin
    oticias_listar.php on line 190 o que eu fasso

  6. Matheus

    Qual a Senha Pra entrar no admin 
    deu tudo certo so falta isso :s

  7. Thavo

    Excelente tutorial!

  8. Emerson

    Olá! Aqui funcionou bem. Mas eu gostaria de saber como colocar cores no menu… Obrigado.

  9. valeu cara bom tutorial me ajudou muito

  10. Joao

    Parabens, bom tutorial. Encontrei apenas 1 "erro", não é bem um erro é uma noticia, no arquivo admin.php, ele não esta declarando a accao então na pag fica assim "Notice: Undefined index: accao in C:xampphtdocsnoticiaadminadmin.php on line 19" eu sei o pq do erro mas nao sei concertar, so quebro galho com php.
    Uma duvida: Como fazer para aparecer na index apenas as ultimas 2 noticias?

  11. NC Junior

    Bom dia Cara muito bom seu tutorial, simples e prático, parabéns pelo seu trabalho!

Participa! Comenta...