Erro no exercício do livro PHP e MySQL

Olá

Estou fazendo o exercício proposto no livro mas não está funcionando.
Abaixo o código:
template.php

<html>
<head>
	<title>Gerenciador de Tarefas</title>
	<link rel="stylesheet" href="tarefas.css">
</head>
<body>
	<h1>Gerenciador de Tarefas</h1>
	<form>
		<fieldset>
			<legend>Nova Tarefa</legend>
			<label>Tarefa:<input type='text' name='nome'/></label>
			<label>Descrição (opcional)<input type="textarea" name="descricao" value=""></label>
			<label>Prazo (opcional)<input type="text" name="prazo" value=""></label>
			<fieldset>
				<legend>Prioridade</legend>
					<label>Alta<input checked type="radio" name="prioridade" value="2"></label>
					<label>Normal<input type="radio" name="prioridade" value="1"></label>
					<label>Baixa<input type="radio" name="prioridade" value="0"></label>
			</fieldset>
			<label>Tarefa Concluída:<input type="checkbox" name="concluida" value="sim"></label>
					<input type='submit' value='Cadastrar'/>

		</fieldset>

	</form>
	<table>
		<tr>
			<th>Tarefas</th>
			<th>Descrição</th>
			<th>Prazo</th>
			<th>Prioridade</th>
			<th>Concluída</th>
		</tr>
      <?php foreach ($_SESSION as $tarefa):?>
		<tr>
			<td><?php echo $tarefa['nome'];?></td>
			<td><?php echo $tarefa['descricao'];?></td>
			<td><?php echo $tarefa['prazo']?></td>
			<td><?php echo $tarefa['prioridade']?></td>
			<td><?php echo $tarefa['concluida']?></td>
		</tr>
<?php endforeach;?>
	</table>
</body>
</html>

Código do tarefas.php

<?php

session_start();

if (array_key_exists('nome', $_GET) && $_GET['nome' != '']) {
$tarefa = [];

$tarefa['nome'] = $_GET['nome'];

if (array_key_exists('descricao', $_GET)) {
	$tarefa['descricao'] = $_GET['descricao'];
} else {
	$tarefa['descricao'] = '';
}

if (array_key_exists('prazo', $_GET)) {
	$tarefa['prazo'] = $_GET['prazo'];
} else {
	$tarefa['prazo'] = '';
}

if (array_key_exists('prioridade', $_GET)) {
	$tarefa['prioridade'] = $_GET['prioridade'];
}

if (array_key_exists('concluida', $_GET)) {
	$tarefa['concluida'] = $_GET['concluida'];
} else {
	$tarefa['concluida'] = '';
}

$_SESSION['lista_tarefas'][] = $tarefa;
}

 include 'template.php';

O erro que está aparecendo:

Notice: Undefined index: nome in /Applications/MAMP/htdocs/Livrophp/tarefas/template.php on line 36

No caso aparece um erro desse para cada

do table, que teoricamente deveria imprimir os elementos do array através do foreach.

Alguém ajuda?

Olá, amigo! Tudo bem?

Pelo visto você ainda está bem no começo do livro, né? A mensagem aponta que o index [‘nome’] do array $tarefa não existe.

Se importa de me indicar em qual capítulo/página você está para eu tentar ajuda-lo melhor?

Aguardo retorno.

Obrigado pela atenção.

Estou no início sim, capítulo 6.2 - Adicionando mais informações às tarefas (não sei qual a página pois estou lendo através do e-book).

No pouco que já entendo, e pelo que você já adiantou sobre o erro (o índice do array não existe) não estou conseguindo percorrer o array $tarefas que deveria ter os dados do formulário.
Estou em dúvida sobre como usar o foreach com os índices do array.

Agradeço novamente

@juliobarreto me parece que o problema está nesta linha:

<?php foreach ($_SESSION as $tarefa):?>

Você precisa acessar o índice lista_tarefas dentro deste array:

<?php foreach ($_SESSION['lista_tarefas'] as $tarefa):?>

Abraços

Agora o erro que aparece é esse:

Warning: Illegal string offset ‘nome’ in /Applications/MAMP/htdocs/Livrophp/tarefas/template.php on line 36
E

O que eu ainda não entendi, e acho que essa dúvida está ligada ao problema do meu código, é como percorrer os ítens do array pelo índice.
O foreach deveria percorrer o array, item por item a cada iteração. Então como posso chamar cada item em uma usando o índice?

Não sei se consigo me fazer entender.

De qualquer forma, valeu

Me parece que o array não contém as tarefas, mas sim uma string.

Logo após iniciar o foreach tente exibir o conteúdo da variável $tarefa:

<?php print_r($tarefa);?>

Isso vai dizer se a variável contém os índices com os dados da tarefa.

1 curtida

Valeu Evaldo, consegui.

Olá, boa tarde!

Eu comprei o livro recentemente e me deparei com o mesmo erro…
Havia uns índices no array que eu estava testando e, que estavam em branco e, ao tentar percorrer, aparecia esse erro.

Eu consegui solucionar fazendo uma verificação no foreach:

<?php echo isset($tarefa['nome']) ? $tarefa['nome'] : ''; ?> <?php echo isset($tarefa['descricao']) ? $tarefa['descricao'] : ''; ?> <?php echo isset($tarefa['prazo']) ? $tarefa['prazo'] : ''; ?> <?php echo isset($tarefa['prioridade']) ? $tarefa['prioridade'] : ''; ?> <?php echo isset($tarefa['concluida']) ? $tarefa['concluida'] : ''; ?>
1 curtida