Erro no exercício do livro PHP e MySQL

php-mysql

#1

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?


#2

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.


#3

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


#4

@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


#5

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


#6

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.


#7

Valeu Evaldo, consegui.