Sistema De Notícias Em PHP E MySQL
Hoje falaremos sobre um tipo de sistema muito utilizado no dia a dia. O Sistema de Notícias.

Dificilmente você encontra matérias na Internet contendo um passo a passo completo e explicativo. Tem sim: vários sistemas disponíveis com código pronto para você apenas copiar.
Nesta matéria comentaremos as partes mais importantes de cada script, visando facilitar seu aprendizado.
Passo 1: Estrutura de pastas
Como alguns já sabem, gosto de focar os sistemas que desenvolvo de forma limpa, prática e organizada.
Por este motivo, apresentamos abaixo a estrutura utilizada nas pastas deste Sistema:

OBS.: Na pasta
Passo 2: Criando as Tabelas na Base de Dados:
Antes de partirmos para a programação, abra o arquivo script-sql.txt (disponível no arquivo em anexo) e cole seu conteúdo no Programa utilizado para gerenciamento da base de dados.
Em nossas matérias utilizamos como padrão o MySQLFront. Caso você queira utilizar este programa, clique em SQL Editor e cole o conteúdo do script (conforme imagem abaixo).

Passo 3: Script De Conexão
Tendo as pastas já criadas e as tabelas na base de dados geradas, você já pode dar início à Programação!
Crie o arquivo conexao.php e coloque dentro da pasta CONFIG.
Neste arquivo, você deverá disponibilizar o texto abaixo:
----- CONFIG.PHP ------
<?
$database="localhost:3307"; // SERVIDOR E PORTA UTILIZADA
$dbname="tutorial"; // BASE DE DADOS
$usuario="root"; // USUÁRIO DO MYSQL
$dbsenha=""; // SENHA DO MYSQL
$conexao=mysql_connect ($database, $usuario, $dbsenha);
if($conexao){
if (mysql_select_db($dbname, $conexao)){ print "";
}else{ print "Não foi possível selecionar o Banco de Dados"; }
}else{ print "Erro ao conectar o MySQL"; }
?>
----------
Passo 4: Menu Gerencial – Formulário (index.php):
A página index.php apesar de ter uma aparência simples, é de fundamental importância para este sistema.
Através dela temos acesso ao menu gerencial!
OBS.: Para facilitar seus acessos, criamos o usuário abaixo:
Login: teste@teste.com – Senha: 123456

Passo 5: Menu Gerencial – Autenticação (autenticacao.rotinas.php):
Esta será a página onde faremos todo o gerenciamento de usuários, isto é: Diremos ao Sistema quem deve ou não ter acesso à Área Gerencial.
Bem… estamos disponibilizando um script simples de acesso, porém, caso seja de seu interesse, você poderá melhorar este código.
-----Linha 02 e 03 -----
session_start();
include ("../config/conexao.php");
------------
Talvez esta seja a parte mais importante do código, pois se você não tiver este conteúdo em seu código, ele simplesmente não vai registrar a sessão, nem permitir a conexão à base de dados.
-----Linha 06 à Linha 08 -----
$cliente_username = $_POST["usuario"];
$cliente_password = $_POST["senha"];
$enviado = $_POST["enviado"];
---------------
Através das linhas acima você receberá as variáveis com o nome do usuário, senha de acesso e o status (neste caso, utilizaremos a condição enviado para reforçar na segurança).
-----Linha 10 à Linha 29 -----
if ($enviado == "posted"){
if (!isset($cliente_username) or !isset($cliente_password)) { echo "Erro!"; exit; }
if (empty($cliente_username) or empty($cliente_password)) { echo "Dados inválidos!"; exit; }
$query = "select * from tbl_usuarios where email = '$cliente_username' and senha = '$cliente_password'";
$result = mysql_query($query);
$number = mysql_num_rows($result);
if ($number==0) { ?>
<script>alert('Autorização inexistente/Senha inválida ou expirada.');history.back();</script>
<?
exit;
} else {
$_SESSION['usuario_id'] = mysql_result($result,0,'id');
$_SESSION['usuario_nome'] = mysql_result($result,0,'nome');
?><script>document.location = '../principal.php'</script><?
}
mysql_close($conexao);
}
----------
Nas linhas acima o script fará uma validação completa, verificando se o usuário e a senha informado existem.
Antes disso, ele só fará a leitura se a variável $enviado (exemplo da linha 6 à linha
tiver o valor posted.
Caso este valor (que será passado através do método POST) não seja o informado, ele sequer fará a leitura no demais.
Nas linhas a seguir (após ele validar a variável $enviado) o script fará uma série de verificações, finalizando ao registrar as sessões para o ID e NOME do Usuário selecionado. Além disso ele fará seu direcionamento à página principal.php.
Passo 6: Menu Gerencial – Página Principal (principal.php):
Esta será a página principal do sistema, onde teremos acesso às demais a serem gerenciadas (conforme você pode ver na imagem abaixo).

OBS.: Apesar de também estar disponível no Sistema (no arquivo em anexo), para não tomar muito seu tempo, falaremos nesta matéria apenas dos itens Cadastrar Notícia e Listar Notícias.
Certamente os comentários diversos disponíveis nesta matéria sanarão qualquer dúvida que você tenha quanto aos demais arquivos.
-----Linha 02 à Linha 11 -----
session_start();
if (empty($_SESSION['usuario_id'])){
echo "Acesso negado!";
exit;
}else{
include('config/conexao.php');
$usuario_id = $_SESSION['usuario_id'];
$usuario_nome = $_SESSION['usuario_nome'];
}
------------
Neste trecho do script faremos uma validação!
Se o ID e NOME do usuário tiver em uso nsta sessão, ele deverá lhe dar acesso, caso não esteja em uso ele deverá restringir o acesso.
Fará acesso também ao script conexao.php (responsável pela conexão ao banco de dados).
Após isto, o sistema fará algumas verificações simples neste script, só atentando para o botão excluir (onde ele deverá direcionar seu acesso ao script logout.php (responsável pela exclusão da sessão).
Passo 7: Menu Gerencial – Cadastrar Notícia (noticias_cadastrar.php):
Esta é a página responsável pelo cadastro da notícia (conforme você pode ver na imagem disponível abaixo).

-----Linha 28 à Linha 35 -----
<script language="javascript" type="text/javascript" src="javascript.js"></script>
<script type="text/javascript" src="htmlarea.js"></script>
<SCRIPT src="javascript/jscripts.js"></SCRIPT>
<script type="text/javascript">
_editor_url = "htmlarea/";
_editor_lang = "en";
</script>
----------
O trecho acima chama os scripts responsáveis pelo funcionamento do Editor de Textos.
OBS.: Veja que ele chama os scripts a seguir: javascript.js, htmlarea.js, jscript.js e a pasta htmlarea.
-----Linha 46 -----
<form action='script_noticias.php?acao=cadastrar' Method='post' enctype='multipart/form-data'>
----------
Apesar do trecho acima ser muito utilizado (por tratar-se do FORM), fiz questão de comentar esta linha, por ter o enctype.
Fazendo uso do multipart/form-data será possível efetuar o envio de arquivo (FILE) ao Servidor.
-----Linha 195 à Linha 198 -----
<script language="JavaScript1.2" defer> editor_generate('msg'); </script>
<textarea name="msg" cols="65" rows="15" border='1'></textarea>
-----
O Javascript acima trás ao TEXTAREA o Editor de Textos personalizado.
Passo 8: Menu Gerencial – Script Notícias (script_noticias.php):
Trata-se de um script exclusivo que deverá receber os scripts tratados enviar ao banco de dados, devendo após este inserir, alterar ou excluir o conteúdo.
OBS.: Para saber mais sobre este script, sugerimos verificá-lo na íntegra, dentro da pasta ADMIN.
-----Linha 25 à Linha 29 -----
$acao = $_GET['acao'];
switch ($acao) {
case cadastrar_categoria:
----------
Assim como os demais scripts, o script_noticias.php também tem o conteúdo padrão para manter sua segurança; porém, até para facilitar seu gerenciamento, recebe por método GET o motivo da entrada (exemplo: alterar, cadastrar, cadastrar_categoria, excluir) e por método POST receberá os valores a serem manipulados.
OBS.: Após a inserção, edição ou exclusão, seja qual for o comando utilizado, o script fará o redirecionamento para uma outra página.
Passo 9: Menu Gerencial – Listar Notícia (noticias_listar.php):
Através desta página você poderá de forma prática e simples listar todas as notícias cadastradas, além de poder visualizá-las em janela popup, podendo editá-las ou efetuar sua exclusão a qualquer momento..

-----Linha 27 à Linha 31 -----
<script language="JavaScript">
function Abrir_Pagina(URL,Configuracao) {
window.open(URL,'',Configuracao);
}
</script>
----------
No trecho acima você chamará a página externa noticias_visualizar.php. Esta página deverá abrir a notícia selecionada, sendo possível visualizar até mesmo a imagem inserida.
-----Linha 203 à Linha 205 -----
<a href="javascript:Abrir_Pagina('noticias_visualizar.php?id_noticia=<?= $row["id_noticia"];?>','scrollbars=yes,width=700,height=800')">
<img src="imagens/ed_preview.gif" width="16" height="14" border="0">
</a>
----------
O trecho acima completa o que comentamos da linha 27 à linha 31, abrindo a página noticias_visualizar.php.
Passo 10: Página Externa – Index (index.php):
Será a área onde disponibilizaremos erá a página principal do sistema, onde teremos acesso às demais a serem gerenciadas (conforme você pode ver na imagem abaixo).
-----Linha 13 à Linha 24 -----
$query_noticias = "select * from tbl_noticias where status = '1' limit 8";
$rs_noticias = mysql_query($query_noticias);
while($campo_noticias = mysql_fetch_array($rs_noticias)){
$id_noticia = $campo_noticias['id_noticia'];
$data_noticia = $campo_noticias['data'];
$titulo_noticia = $campo_noticias['titulo'];
$descricao_noticia = $campo_noticias['descricao'];
$texto_noticia = $campo_noticias['msg'];
$fonte_noticia = $campo_noticias['legenda'];
$imagem_noticia = $campo_noticias['nome_arquivo'];
----------
No trecho acima o SELECT busca todas as notícias com status = 1, limitando a busca a 8 registros.
Após isto, utilizaremos o comando WHILE para retornar os registros através das variáveis acima definidas (um após o outro).
Passo 11: Página Externa – Descrição de Notícia (noticias-descricao.php):
Através desta página você poderá visualizar a notícia, visualizando-a por inteiro (título, descrição, notícia, imagem e fonte da notícia).

OBS.: Não vamos inserir a descrição da notícia aqui, para não prolongar mais a matéria, porém, te aconselho a verificar a página noticias-descricao.php (disponível em anexo), onde você poderá visualizar o script por inteiro.
Passo 12: Página Externa – Últimas Notícias (noticias.php):
Através desta página você poderá visualizar as últimas 50 notícias cadastradas no Sistema, podendo encontrá-las facilmente através da data de cadastro e descrição.

OBS.: Você poderá alterar esta página, inserindo um buscador e contador de páginas!
Ficamos por aqui em mais uma matéria! Esperamos tê-lo ajudado em algo…
Envie-nos suas dúvidas e dê sugestões para as próximas matérias! Nosso compromisso é lhe ajudar!
DOWNLOAD: Descarregue o código utilizado neste tutorial: Sistema De Notícias Em PHP E MySQL, em formato .zip.
Related posts:












Sei que já faz tempo mas descobri o problema que a maioria estava tendo quanto ao login e tudo mais…
o autor usou as Short tag's do PHP <? ?> e por padrão alguns servidores locais como WAMP XAMP etc.. não vem habilitado essa opção. Ou seja basta habilitar as short tags e tudo volta a funcionar
Olá amigo,
Como faço para deixar as notícia em ordem decrescente por data , pois quando cadastramos uma notícia ela fica em ultimo e deveria ficar em primeiro pois é a mais atual. Aguardo sua resposta.
Abraços
Poxa MUITO obrigado , sistema exelente !!
quando colo o script no Mysql front diz que tem erro de sintaxe em tbl_noticias line 1. Foi publicada já alguma correção?
Boas a todos.. Gostei bastante da simplicidade do script, por ser simples de compreender e facil de usar.
Alem de outros bugs, um dos problemas que reparei, foi mesmo o facto de nao estarem ordenadas por ordem decrescente na pagina principal.
Se alguem puder ajudar, ficaria muito agradecido.
Abraços
Olá amigo, Não concigo entrar no sistema (Autorização Inxistente/senha invalida ou expirada), porém as soluções mostradas , não serviram para resolver meu problema, continua igual.
Amigo, boa noite, baixei o script, porem o cadastrar uma notícia com texto com caracteres com acentos, não funciona, se cadastrar sem acentro funciona.
Exemplo: Avião
So aparece: Avi
Boas, seria possivél fazer upload de multiplas imagens em vez de ser so uma seria prai umas 3 ou 4…
Agradeçia resposta
Ae Amigos, eu uso wamp para aprender e como uso esses codigos no phpmyadmin?
pessoa gostaria de parabenizar o autor por este código excelente, estou tendo um probleminha só , o título,descrição das notícias estão retornando do banco de dados com os acentos errados por exemplo:
Abre novas inscri��es
como resolvo isso??
muito obrigado.
Eu solucionei este caso mudando a codificação da página para iso-8859-1
espero que resolva o seu problema.
Olá amigo, ótimo sistema, fácil e prático, os scripts são escritos para que um iniciante como eu possa entender bem e avançar nos estudo, por isso agradeço a atenção dispendida neste post. Gostaria de saber como fazer uma agenda de compromissos com calendário, se possível posta ai!!
Dário
Alguém resolveu o problema das ordens na qual as notícias aparecem?
Quando cadastro novas notícias a mais antiga que aparece na primeira linha. :/
Alguem conseguiu resolver, quando vai adicionar nova noticia, aparece em branco no Banco de Dados?
estou usando Ubuntu 11.04 php5.3.5, apache2.2.17, MySql 5.1.54
Boa noite pessoal, estou a utilizar esse excelente sistema de notícias porém estou tendo alguns problemas em cadastrar e editar tanto as notícias quanto as categorias. Recebo a mensagem em javascript dizendo que foi feito o cadastramento ou edição da noticia, porém isso não ocorre. É necessário da um CHMOD em algum arquivo ou pasta??? Poderiam me ajudar???
opa!! Primeiramente gostaria de parabenizar pelo artigo, muito bom. Em segundo gostaria de uma ajuda,
baixei o sistema no link informado e já mandei tudo para o servidor. Verificando as funcionalidades do mesmo percebi que o sistema não esta cadastrando e nem editando noticias, também não edita as categorias.
Poderiam me ajudar???
Oi, estou já há algum tempo tentando resolver este problema, mas ainda não consegui, será que alguem pode dar uma ajuda, quando tento fazer login aparece o alert de "Autorização inexistente/Senha inválida ou expirada", ja verifiquei inúmeras vezes o arquivo de conexão e está tudo certo, quando compilo o arquivo tenho o seguinte warning:
Warning: session_start(): Cannot send session cookie – headers already sent in C:Webserverwwwsistema-noticiasadminincautenticacao.rotinas_Temp.phpon line 2
Warning: session_start(): Cannot send session cache limiter – headers already sent (output started at C:Webserverwwwsistema-noticiasadminincautenticacao.rotinas_Temp.php:2) in C:Webserverwwwsistema-noticiasadminincautenticacao.rotinas_Temp.php on line 2
também não consigo cadastrar ou sequer visualizar as notícias previamente cadastradas no banco, se alguem puder ajudar fico grata!
BOA TARDE, EU COMECEI A FAZER UMA MODIFICAÇÃO NA INTERFACE DO SISTEMA SEM ALTERAR O SCRIPT DO BANCO, MAS NÃO ESTOU OBTENDO SUCESSO. eSTOU UTILIZANDO TAMBÉM, NO WAMPSERVER. SE VOCE PUDER ME ORIENTAR PARA CONSEGUIR RODAR O SISTEMA E ARMAZENAR NO BANCO EU LHE SEREI MUITO GRATO.
o sistema é muito bom mas notei uma falha. as noticias não são mostradas na ordem decrescente pois da forma que está a nticia mais atual acaba sendo a ultima da lista.
Se poderem resolver isto agradeço muito.
Bom dia a todos, como mencionei anteriormente, não consigo fazer a conexão do banco no sistema. Estou utilizando o wampserver. Gostaria que alguém pudesse me ajudar.
Pessoal, eu estou apanhando um pouco na importação do script para a criação dos itens no MySQL.
Segue mensagem de erro:
consulta SQL:
CREATE TABLE tbl_categorias_noticias(
id_categoria_noticia tinyint( 3 ) unsigned NOT NULL AUTO_INCREMENT ,
categoria varchar( 50 ) default NULL ,
PRIMARY KEY ( id_categoria_noticia ) ) TYPE = MYISAM ROW_FORMAT = DYNAMIC ;
Mensagens do MySQL :
#1064 – You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM ROW_FORMAT=DYNAMIC' at line 6
estou temdo problemas na hora de cadastrar e editar as noticias.
quando cadastro fica tudo em branco e quando edito as q coloquei direto no banco de dados nao faz alteração nenhuma, o erro é sempre no script_noticias até mesmo para excluir da erro mas mesno assim a noticia e excluida tambem o cadastro de categorias da erro mas mesmo assim cadastra se tiver como ver esses erros pra mim, aqui diz q o erro está na linha 29,45,114,134 e um monte de outros q não consigo ler.
não fiz alteraçoes no script porque ainda estou testando modifiquei apenas no arquivo noticias_visualizar porque eu nao estava conseguindo visualizar as noticias mas ja resolvi essa pagina mas a outra ta dificil.
bom se puder ajudar.