Erro no último exercício do Capítulo 5

86 views
Skip to first unread message

Jhonatan Moura

unread,
Jun 6, 2016, 9:22:28 PM6/6/16
to Livro PHP e MySQL - Casa do Código
Olá à todos, verifiquei que já há outros tópicos tratando deste assunto, porém, os que conseguiram resolver o problema não compartilharam a solução com o restante (não que eu tenha percebido).

Meu código está idêntico ao do livro, inclusive cheguei a copiar o mesmo código disponível no BitHub e o erro persiste. 

Segue o erro:

Notice: Undefined variable: lista_tarefas inC:\xampp\htdocs\tarefas\template.php on line 58

Warning: Invalid argument supplied for foreach() inC:\xampp\htdocs\tarefas\template.php on line 58
TarefaDescriçãoPrazoPrioridadeConcluída


Desde já agradeço à todos!

Genivaldo Santos

unread,
Jun 6, 2016, 9:25:15 PM6/6/16
to Jhonatan Moura, Livro PHP e MySQL - Casa do Código

Olá Jonathan,

Envie o código para que possamos ver.

--
Você recebeu essa mensagem porque está inscrito no grupo "Livro PHP e MySQL - Casa do Código" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para phpemysqlcasadoc...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Jhonatan Moura

unread,
Jun 6, 2016, 9:31:41 PM6/6/16
to Genivaldo Santos, Livro PHP e MySQL - Casa do Código
ARQUIVO TAREFAS.PHP

<?php 

session_start();


if (isset($_GET['nome']) && $_GET['nome'] != '') {
$_SESSION['lista_tarefas'][] = $_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'] = '';
}

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

}

include "template.php";

?>

--------------------------------------------------------------------------------------------------------
ARQUIVO TEMPLATE.PHP

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" type="text/css" href="css/bootstrap.css">
<title>Gerenciador de Tarefas</title>
</head>
<body>

<div class="col-md-4"></div>
<div class="col-md-4">
<h1>Gerenciador de Tarefas</h1>
<form>
<fieldset>
<legend>Nova Tarefa</legend>
<label>
Tarefa:
<input type="text" name="nome"></input>
</label>
<label>
Descrição (opcional):
<textarea name="descricao"></textarea>
</label>
<label>
Prazo (opcional):
<input type="text" name="prazo"></input>
</label>
<fieldset>
<legend>Prioridade:</legend>
<label>
<input type="radio" name="prioridade" value="baixa" checked>
Baixa
</input>
<input type="radio" name="prioridade" value="media">
Média
</input>
<input type="radio" name="prioridade" value="alta">
Alta
</input>
</label>
</fieldset>
<label>
Tarefa concluída:
<input type="checkbox" name="concluida" value="sim"></input>
</label> </br>
<input type="submit" class="btn btn-success" value="Cadastrar"></input>
</fieldset>
</form>
<table>
<tr>
<th>Tarefa</th>
<th>Descrição</th>
<th>Prazo</th>
<th>Prioridade</th>
<th>Concluída</th>
</tr>

<?php foreach ($lista_tarefas 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>
</div>
<div class="col-md-4"></div>


</body>
</html>
--
Edison Jhonatan R. Moura
_______________________________

Bacharel em Engenharia de Software
Mestrando em Ciência da Computação

Genivaldo Santos

unread,
Jun 6, 2016, 9:56:04 PM6/6/16
to Jhonatan Moura, Livro PHP e MySQL - Casa do Código
Olá novamente Jhonatan,

Tem duas coisas para corrigir no seu código:

A primeira é: 

ARQUIVO TAREFAS.PHP

<?php 

session_start();


if (isset($_GET['nome']) && $_GET['nome'] != '') {
$_SESSION['lista_tarefas'][] = $_GET['nome'];  ===> Remova essa linha 

$tarefa = array();

A segunda é no mesmo arquivo, depois do fechamento do if,

}

Bem aqui ====> Falta uma verificação, se a sessão lista de tarefas existe, pois a primeira vez que você roda, ela ainda não existe, então recebe um array.

Seria algo como:

if (isset($_SESSION['lista_tarefas'])) {
    $lista_tarefas = $_SESSION['lista_tarefas'];
} else {
    $lista_tarefas = array();
}

include "template.php";

?>

Sugiro fechar completamente o navegador e abrir novamente.

Boa sorte!!

Genivaldo.

Jhonatan Moura

unread,
Jun 6, 2016, 10:32:56 PM6/6/16
to Genivaldo Santos, Livro PHP e MySQL - Casa do Código
Obrigado pelo retorno Genivaldo!

Fiz o que você sugeriu, o erro persistiu. Experimentei executar a verificação que você mencionou antes do primeiro 'if' e funcionou, porém, a tabela não é preenchida "automaticamente", eu tenho que clicar no botão cadastrar e após dar um F5 ou inserir outra tarefa é que a anterior é apresentada.

Genivaldo Santos

unread,
Jun 6, 2016, 10:40:37 PM6/6/16
to Jhonatan Moura, Livro PHP e MySQL - Casa do Código

Estranho hein, aqui funcionou corretamente, você ajustou nos dois lugares? Fechou completamente o navegador e abriu de novo?

Jhonatan Moura

unread,
Jun 6, 2016, 10:42:59 PM6/6/16
to Genivaldo Santos, Livro PHP e MySQL - Casa do Código
Sim, fechei e abri o navegador, o código está assim:

<?php 

session_start();

if (isset($_SESSION['lista_tarefas'])) {
    $lista_tarefas = $_SESSION['lista_tarefas'];
} else {
    $lista_tarefas = array();
}

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'] = '';
}

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

}


include "template.php";

Genivaldo Santos

unread,
Jun 6, 2016, 10:48:44 PM6/6/16
to Jhonatan Moura, Livro PHP e MySQL - Casa do Código

A verificação tem que ser depois do fechamento do if mesmo e não no começo.

Que erro apresenta quando vc deixa igual eu sugeri?

Jhonatan Moura

unread,
Jun 6, 2016, 11:17:00 PM6/6/16
to Genivaldo Santos, Livro PHP e MySQL - Casa do Código
Coloquei no final e finalmente funcionou corretamente, está adicionando as informações ao clicar no botão "Cadastrar".

Vou colar aqui o código das duas classes, para quem estiver com o problema ou vier a ter no futuro poder se guiar.

Muito obrigado Genivaldo!

Segue o código.

TAREFAS.PHP --------------------------------

<?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'] = '';
}

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

}

if (isset($_SESSION['lista_tarefas'])) {
    $lista_tarefas = $_SESSION['lista_tarefas'];
} else {
    $lista_tarefas = array();
}


include "template.php";

-----------------------------------------------------------------------------------
TEMPLATE.PHP

<table class="table">
<tr>
<th>Tarefa</th>
<th>Descrição</th>
<th>Prazo</th>
<th>Prioridade</th>
<th>Concluída</th>
</tr>

<?php foreach ($lista_tarefas 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>
</div>
<div class="col-md-4"></div>


</body>
</html>

Genivaldo Santos

unread,
Jun 7, 2016, 5:58:18 AM6/7/16
to Jhonatan Moura, Livro PHP e MySQL - Casa do Código

Boa Jonathan  =]

Sucesso aí cara!

Abraço.

Genivaldo

Reply all
Reply to author
Forward
0 new messages