neste arquivo é o uso da instrução include, que serve para incluir o conteúdo
de outro arquivo no fluxo atual. O legal do include é que ele adiciona o outro
arquivo e todas as variáveis e funções do arquivo atual continuam valendo no arquivo
incluído, por isso podemos, neste caso, incluir um arquivo com apenas o template
do formulário de cadastro de tarefas e a lista de tarefas e ainda podemos continuar
usando a variável $lista_tarefas que foi definida no arquivo tarefas.php e
que contém um array com as tarefas cadastradas.
O arquivo com o template deve se chamar template.php pois este é o arquivo
que estamos incluindo usando o include no arquivo tarefas.php. Veja como
fica o arquivo template.php:
44
Casa do Código
Capítulo 5. Tratamento de diferentes campos de formulários
<html>
<head>
<meta charset="utf-8" />
<title>Gerenciador de Tarefas</title>
<link rel="stylesheet" href="tarefas.css" type="text/css" />
</head>
<body>
<h1>Gerenciador de Tarefas</h1>
<form>
<fieldset>
<legend>Nova tarefa</legend>
<label>
Tarefa:
<input type="text" name="nome" />
</label>
<input type="submit" value="Cadastrar" />
</fieldset>
</form>
<table>
<tr>
<th>Tarefas</th>
</tr>
<?php foreach ($lista_tarefas as $tarefa) : ?>
<tr>
<td><?php echo $tarefa; ?> </td>
</tr>
<?php endforeach; ?>
</table>
</body>
</html>
Agora temos apenas
o foreach que é um código PHP, o restante é apenas
HTML. Agora fica mais simples de para adicionar e alterar as funcionalidades, pois
os arquivos estão menores e, o que é mais importante, estão com suas responsabili-
dades separadas.
45
5.2. Adicionando mais informações às tarefas
Casa do Código
Devo separar meus projetos em vários arquivos sem-
pre?
Esta é uma pergunta difícil e a resposta é um pouco vaga: Depende.
Tudo depende do tamanho que sua aplicação terá e do quanto você
julgar que vale a pena investir um tempo separando os as responsabilida-
des entre os arquivos. No geral, vale bastante a pena fazer esta separação.
Veja que no nosso caso o programa ainda está bem pequeno e mesmo
assim a separação de arquivos já melhorou bastante no entendimento das
partes.
No geral não estamos perdendo tempo quando paramos para organi-
zar melhor um projeto. Esse tempo investido agora pode se tornar uma
grande economia de tempo nas futuras manutenções do código.
5.2
Adicionando mais informações às tarefas
Para que nosso sistema de controle de tarefas fique mais prático, vamos adicionar
algumas informações para melhor descrever e organizar as tarefas.
Por enquanto já temos um título para a tarefa, agora vamos adicionar uma des-
crição, um prazo para conclusão, um nível de prioridade e uma confirmação de que
a tarefa já está concluída. Para isso, vamos adicionar os novos campos no formulário
HTML:
...
<label>
Descrição (Opcional):
<textarea name="descricao"></textarea>
</label>
<label>
Prazo (Opcional):
<input type="text" name="prazo" />
</label>
<fieldset>
<legend>Prioridade:</legend>
<label>
<input type="radio" name="prioridade" value="baixa" checked /> 46
Casa do Código
Capítulo 5. Tratamento de diferentes campos de formulários
Baixa
<input type="radio" name="prioridade" value="media" />
Média
<input type="radio" name="prioridade" value="alta" />
Alta
</label>
</fieldset>
<label>
Tarefa concluída:
<input type="checkbox" name="concluida" value="sim" />
</label>
<input type="submit" value="Cadastrar" />
...
Se você usar o CSS dos exemplos, seu formulário deverá ficar parecido com este:
Figura 5.1: Formulário completo para o cadastro de tarefas
47
5.2. Adicionando mais informações às tarefas
Casa do Código
O legal é que só precisamos alterar o arquivo template.php, enquanto o
tarefas.php continuou o mesmo. O sistema continua funcionando e apenas ig-
nora os dados adicionais enviados.
Agora vamos alterar também o tarefas.php para pegar as novas informações.
Vamos usar o campo com o nome da tarefa como a base para saber se devemos
cadastrar uma nova tarefa, já que o nome da tarefa é a única informação essencial
para nós.
Para isso, vamos alterar aquele if logo após o session_start() e também
seu conteúdo. É claro que ele vai ficar maior, pois agora são vários campos que pre-
cisamos pegar do formulário enviado:
<?php
session_start();
if (isset($_GET['nome']) && $_GET['nome'] != '') {
$tarefa = array();
$tarefa['nome'] = $_GET['nome'];
if (isset($_GET['descricao'])) {
$tarefa['descricao'] = $_GET['descricao'];
} else {
$tarefa['descricao'] = '';
}
if (isset($_GET['prazo'])) {
$tarefa['prazo'] = $_GET['prazo'];
} else {
$tarefa['prazo'] = '';
}
$tarefa['prioridade'] = $_GET['prioridade'];
if (isset($_GET['concluida'])) {
$tarefa['concluida'] = $_GET['concluida'];
} else {
$tarefa['concluida'] = '';
}
48
Casa do Código
Capítulo 5. Tratamento de diferentes campos de formulários
$_SESSION['lista_tarefas'][] = $tarefa;
}
...
Repare que usamos sempre a função isset() para saber se os índices de $_GET