Agora é necessário exibir a lista de tarefas. Ainda no mesmo arquivo, antes da
tag </body> vamos adicionar uma tabela HTML para listar as atividades. Dentro
desta tabela usaremos o foreach para pegar cada uma das tarefas que está no array
$lista_tarefas e exibir como linhas da tabela:
...
<table>
<tr>
<th>Tarefas</th>
</tr>
<?php foreach ($lista_tarefas as $tarefa) : ?>
<tr>
<td><?php echo $tarefa; ?> </td>
</tr>
<?php endforeach; ?>
</table>
36
Casa do Código
Capítulo 4. Entrada de dados com formulário
</body>
...
Repassando o código, foi criada uma tabela com apenas uma coluna, na qual o
cabeçalho é a palavra Tarefas e as linhas serão os nomes das tarefas.
Aqui existe um laço novo do PHP. Já vimos o while agora apresento o
foreach. Este laço serve para passar por todos os índices de um array, atribuindo
cada índice a uma variável que escolhemos, no caso, a variável $tarefa.
Uma outra novidade aqui é que não foram usadas as chaves para criar o bloco do
foreach, assim como foram usadas chaves para o bloco do while. Na verdade, o
foreach também pode ser usado com as chaves, sem problemas, mas esta forma,
usando dois pontos para abrir o bloco e a palavra endforeach fica mais legível em
templates HTML. Lembre-se que o nosso código com while estava apenas dentro
de um grande código PHP, neste caso estamos colocando pequenos pedaços de PHP
dentro do HTML. Sendo assim, fica mais legível fazer o uso desta sintaxe. Como
exemplo, veja como fica o mesmo bloco usando as chaves:
<?php foreach ($lista_tarefas as $tarefa) { ?>
<tr>
<td><?php echo $tarefa; ?> </td>
</tr>
<?php } ?>
Não parece ter muita diferença em um trecho pequeno desses, mas perceba
que <?php } ?> é uma linha bem genérica, que pode estar fechando um if, um
while, um foreach ou mesmo uma função e outros blocos PHP, enquanto <?php
endforeach; ?> é mais expressivo. Por isso, recomendo usar esta forma. Alias,
você pode experimentar outros blocos com esta sintaxe, como o if e endif, while
e endwhile e for e endfor. Mas prefira esta sintaxe para os templates HTML,
deixando a sintaxe de chaves para os arquivos e blocos que contenham apenas PHP.
Bem, voltando ao assunto da lista de tarefas, ao enviar um nome de tarefa, a sua
página deverá ficar assim:
37
4.4. Pegando os dados da URL
Casa do Código
Figura 4.3: Lista de tarefas com uma tarefa
Como estamos deixando tudo na mesma página, fica fácil adicionar uma nova
tarefa, então vamos adicionar uma nova tarefa usando o formulário que está antes
da tabela, no endereço http://localhost/tarefas/tarefas.php. Aqui eu digitei Estudar
HTML e usei o botão cadastrar e o resultado foi este:
Figura 4.4: Lista de tarefas com uma tarefa
Apenas a tarefa nova é listada! Onde está a tarefa antiga?
Por que a primeira tarefa sumiu?
PHP trabalha principalmente com web e neste caso o que acontece
a cada nova requisição que fazemos, seja pedindo uma página, seja en-
viando dados, é que o PHP interpreta tudo de novo e devolve apenas
HTML para o navegador. Ou seja, ele não lembra do que aconteceu na
última requisição feita!
A cada nova requisição o PHP processa tudo de novo e não guarda as variáveis
para outros acessos. Isso é um problema para a nossa aplicação, já que precisamos
38
Casa do Código
Capítulo 4. Entrada de dados com formulário
manter a lista das nossas tarefas. Mas calma, nem tudo está perdido! O PHP tem um
recurso que nos auxiliará a solucionar isso.
4.5
Sessões no PHP
O recurso que nos auxiliará a manter os dados entre as requisições são as sessões.
Uma sessão serve para mantermos uma variável especial que irá existir em todas as
nossas requisições. Lembra da super global $_GET? As sessões são tão fáceis de usar
quanto a $_GET, basta usar a super global $_SESSION. A grande
diferença é que
usamos a $_GET mais para ler informações e usaremos a $_SESSION para escrever
e ler informações.
O uso da $_SESSION exige só um esforço adicional, que é chamar a função
session_start() no começo do nosso programa. Para isso, vamos adicionar a
função antes da abertura do HTML:
<?php session_start(); ?>
<html>
...
Depois disso, precisamos alterar o uso da lista $lista_tarefas para pegar
os dados de $_SESSION, caso esses dados existam. Vamos mudar o if que veri-
fica se existem dados em $_GET e vamos adicionar um novo if após a criação do
array $lista_tarefas para preenchê-lo com os dados da $_SESSION, quando
necessário:
<?php
...
if (isset($_GET['nome'])) {
$_SESSION['lista_tarefas'][] = $_GET['nome'];
}
$lista_tarefas = array();
if (isset($_SESSION['lista_tarefas'])) {
$lista_tarefas = $_SESSION['lista_tarefas'];
}
...
?>
Agora, ao cadastrar algumas tarefas, o PHP irá manter os dados entre as requi-
sições! Veja como a sua lista deve ficar:
39
4.5. Sessões no PHP
Casa do Código
Figura 4.5: A lista de tarefas usando $_SESSION para manter os dados
Legal! Temos uma lista de tarefas já bem funcional! Claro que agora precisamos
de mais funcionalidades, como editar e excluir uma tarefa, mas já conseguimos pegar