Mini Curso PHP, PHP
- 11/02/2009
Mini Curso de PHP – Sistema de notícias (Colocando um ‘layout’ básico) – Aula 15
Olá pessoal. Vamos dar continuidade ao nosso curso.
Como vocês sabem, estamos desenvolvendo um sistema de notícias. Já fizemos o seguinte:
- Cadastro de usuários
- Lista de usuários
- Exclusão de usuários
Até agora estamos colocando todos os arquivos na raiz do sistema. Hoje vamos organizar um pouco a estrutura dos arquivos, pois desta forma fica muito confuso.
Vamos organizar da seguinte forma:
- Criar um arquivo chamado ‘index.php’ na raiz do sistema. Nele, colocaremos um menu e definiremos uma área para usar como conteúdo.
- Criar uma pasta chamada ‘img’ onde vamos colocar todas as imagens que usarmos no sistema.
Abra um editor de HTML de sua preferência(Dreamweaver por exemplo) e faça um layout com as seguintes áreas:
Veja no ‘Wireframe’(Wiki) acima, definimos a área vermelha como sendo para o menu e a área verde sendo para o conteúdo. NÃO VOU FAZER UM LAYOUT BONITO OU COM FIRULAS. A intenção é mostrar o funcionamento do PHP neste caso, que será assim:
- Este layout será salvo com o nome de índex.php
- No lado do menu, listaremos todos os links do sistema(Ultimas noticias, login, cadastrar noticia, listar noticias, etc…)
- Quando o usuário clicar em algum link, iremos recarregar a índex.php mas agora com um parâmetro, que é o nome da página clicada. Assim, carregaremos a mesma na área do conteúdo.
Bom, se você quiser agilizar o processo, copie o HTML abaixo e salve-o como índex.php na raiz do sistema:
-
<?
-
# ===— A index será carregada em TODOS os links, portanto, vamos incluir o banco.php aqui. Para não ter que repetir o código em todas as páginas. Muito mais prático não?
-
require_once(‘banco.php’);
-
?>
-
<html>
-
<head>
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-
<title>MiniCurso de PHP – Sistema de Notícias</title>
-
</head>
-
-
<body>
-
<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">
-
<tr>
-
<td align="center" valign="top"><table width="750" border="0" cellspacing="0" cellpadding="0">
-
<tr>
-
<td bgcolor="#000000"><table width="750" border="0" cellspacing="1" cellpadding="0">
-
<tr>
-
<td width="167" bgcolor="#FFFFFF"><table width="100%" border="0" cellspacing="0" cellpadding="0">
-
<tr>
-
<td> </td>
-
</tr>
-
<tr>
-
<td>INICIAL</td>
-
</tr>
-
<tr>
-
<td> </td>
-
</tr>
-
<tr>
-
<td><strong>[ USUÁRIOS ]</strong></td>
-
</tr>
-
<tr>
-
<td>- Lista</td>
-
</tr>
-
<tr>
-
<td>- Cadastrar</td>
-
</tr>
-
<tr>
-
<td> </td>
-
</tr>
-
<tr>
-
<td>[ NOTÍCIAS ]</td>
-
</tr>
-
<tr>
-
<td>- Lista</td>
-
</tr>
-
<tr>
-
<td>- Cadastrar</td>
-
</tr>
-
<tr>
-
<td> </td>
-
</tr>
-
<tr>
-
<td> </td>
-
</tr>
-
</table></td>
-
<td width="580" align="center" valign="top" bgcolor="#FFFFFF">AQUI O CONTEÚDO</td>
-
</tr>
-
</table></td>
-
</tr>
-
</table></td>
-
</tr>
-
</table>
-
</body>
-
</html>
Mas, ainda não terminamos de manipular este arquivo. Apenas coloquei a base dele para você entender direito.
Você deve ter reparado que eu comentei na índex.php que ela será executada TODAS as vezes que alguém clicar em algum link… Mas então como iremos mostrar a tela correspondente ao link clicado???
Veja a ‘mágica’:
Em cada link, iremos inserir uma variável GET que será passada para a índex.php. Desta forma:
- index.php?pagina=login
- index.php?pagina=usuário_formulario
- index.php?pagina=usuário_lista
- E assim por diante…
Você reparou que o parâmetro ‘pagina’ são exatamente os nomes dos arquivos que criamos? Então significa que se recuperarmos esta variável e inserir um .php no final agente consegue dar um include no arquivo. Como abaixo:
-
<?
-
include($_GET[‘pagina’].‘.php’);
-
?>
Viram como é simples?
Mas calma, ainda estamos só na teoria… se fizéssemos isto, estaríamos abrindo uma brecha de segurança muito grande em nosso sistema… pois se o usuário mais esperto fizer isto: index.php?pagina=http://www.google.com
O Google será carregado no meio do nosso sistema. Você irá aprender a se prevenir contra isso. Veja abaixo a implementação do index.php já com a correção para este problema.
-
<?
-
# ===— A index será carregada em TODOS os links, portanto, vamos incluir o banco.php aqui. Para não ter que repetir o código em todas as páginas. Muito mais prático não?
-
require_once(‘banco.php’);
-
-
# ===— Se a variável página existir e tiver valor
-
-
# ===— Se existir carrega a página clicada
-
$pagina = $_GET[‘pagina’].‘.php’;
-
-
} else {
-
# ===— Se não existir carrega a tela de login
-
$pagina = ‘login.php’;
-
}
-
-
?>
-
<html>
-
<head>
-
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
-
<title>MiniCurso de PHP – Sistema de Notícias</title>
-
</head>
-
-
<body>
-
<table width="100%" height="100%" border="0" cellspacing="0" cellpadding="0">
-
<tr>
-
<td align="center" valign="top"><table width="750" border="0" cellspacing="0" cellpadding="0">
-
<tr>
-
<td bgcolor="#000000"><table width="750" border="0" cellspacing="1" cellpadding="0">
-
<tr>
-
<td width="167" bgcolor="#FFFFFF"><table width="100%" border="0" cellspacing="0" cellpadding="0">
-
<tr>
-
<td> </td>
-
</tr>
-
<tr>
-
<td>INICIAL</td>
-
</tr>
-
<tr>
-
<td> </td>
-
</tr>
-
<tr>
-
<td><strong>[ USUÁRIOS]</strong></td>
-
</tr>
-
<tr>
-
<td>- Lista</td>
-
</tr>
-
<tr>
-
<td>- Cadastrar</td>
-
</tr>
-
<tr>
-
<td> </td>
-
</tr>
-
<tr>
-
<td>[ NOTÍCIAS ]</td>
-
</tr>
-
<tr>
-
<td>- Lista</td>
-
</tr>
-
<tr>
-
<td>- Cadastrar</td>
-
</tr>
-
<tr>
-
<td> </td>
-
</tr>
-
<tr>
-
<td> </td>
-
</tr>
-
</table></td>
-
<td width="580" align="center" valign="top" bgcolor="#FFFFFF">
-
<?
-
# ===— se a página existir no servidor ele inclui, caso contrário exibe um erro
-
include($pagina);
-
} else {
-
echo ‘Opa! acho que você esta tentando ver uma página que não existe!!’;
-
}
-
?>
-
</td>
-
</tr>
-
</table></td>
-
</tr>
-
</table></td>
-
</tr>
-
</table>
-
</body>
-
</html>
Mas, usando esta organização, teremos que mudar todas as actions dos formulários.. pois senão vai problema(a pagina será carregada fora do layout que definimos na index.php).
Bom, para testar, rode o que fizemos até agora ok? Veja o vídeo abaixo:
OK! Agora que você viu o sistema funcionando com um ‘layout’, agora vamos corrigir os links das páginas que programamos até agora!! Vamos fazer da seguinte forma:
Abra o arquivo usuario_lista.php e altere os links dos links ‘Apagar’ e ‘Editar’. Deixe-os conforme o exemplo abaixo:
-
<?
-
echo "<b>$nome</b> (<a href=’mailto:$email’>$email</a>) – [ <a href='?pagina=usuario_delete&id=".$id."'>Apagar</a> - <a href='?pagina=usuario_edita_formulario&id=".$id."'>Editar</a> ]<BR>";
-
?>
Perceba que incluímos “?pagina=”, tiramos o .php do arquivo e antes da variável id troquei o ‘?’ por ‘&’. Ou seja, vamos passar para a index.php dois parâmetros: pagina e id. Faça a alteração e teste no navegador… no meu caso a url ficou assim:
http://localhost/marcelosabadini/mini-curso/noticias/?pagina=usuario_delete&id=1
http://localhost/marcelosabadini/mini-curso/noticias/?pagina=usuario_edita_formulario&id=1
Agora abra o arquivo usuario_formulario.php e altere a action do <form>. Vai ser igual o arquivo anterior… veja abaixo como ficou:
-
<h1>Cadastro de usuários</h1>
-
-
<form name="form1" action="?pagina=usuario_cadastro" method="POST">
-
Nome: <input type="text" name="nome" id="nome" maxlength="50" /><BR>
-
E-mail: <input type="text" name="email" id="email" maxlength="50" /><BR>
-
Usuário: <input type="text" name="usuario" id="usuario" maxlength="12" /><BR>
-
Senha: <input type="password" name="senha" id="senha" maxlength="12" /><BR>
-
<BR>
-
<input type="submit" value="Enviar" />
-
</form>
Agora abra o arquivo usuario_cadastro.php e altere o todos os links.
Abra o arquivo usuario_delete.php e altere todos os links.
Abra o arquivo usuario_edita.php e altere todos os links.
Abra o arquivo usuario_edita_formulario.php e altere todos os links e a action do formulário.
Bom, por hoje é só!
Espero ter sido direto e ter explicado direito. Se você não entendeu ou não conseguiu fazer, poste ou entre em contato comigo… agora já posso passar o código fonte.
Um grande abraço!




5 Comentários to “Mini Curso de PHP – Sistema de notícias (Colocando um ‘layout’ básico) – Aula 15”
Amigo, gostei muito do seu mini-curso, parabéns,
embora ja se tenha passado um tempo da publicação, vc teria o codigo fonte dessa parte? pois nao consegui fazer os includes
se tiver, poderia me enviar por email?
desde já agradeço
Por Dhillan (2 comments) em 08/04/2010
Tem razão! abandonei este assunto aqui no blog
estou trabalhando d+!
Mas olha só, o ‘sistema’ rodando esta aqui:
http://marcelosabadini.com.br/mini-curso/noticias/
E o zip do fonte esta aqui:
http://marcelosabadini.com.br/mini-curso/noticias.zip
Por Marcelo Sabadini (109 comments) em 10/04/2010
Marcelo, muito obrigado por responder e atender meu pedido, repito aqui meu agradecimento pelo mini-curso, muito bom mesmo, parabéns
Por Dhillan (2 comments) em 10/04/2010
Foi mal falar, mas você incluiu no arquivo fonte um arquivo com o seu Banco de Dados, login e senha, e isso é grave. Se alguém pegar pode deletar ou fazer bobagem com o seu BD.
Por Luciano (1 comments) em 07/07/2010
Obrigado por avisar Luciano.
Eu acessei o arquivo pelo ZIP e removi a senha… acho que o Windows fez cagada e salvou o arquivo original tipo um temporário. Sinistro.
Obrigado novamente. Um grande abraço!
Por Marcelo Sabadini (109 comments) em 07/07/2010