[Livro PHP e MySQL] Dúvidas em geral

Olá, @AVenciguerra,

Em uma aplicação em produção o servidor do banco de dados provavelmente vai estar separado do servidor da aplicação PHP. Um dos capítulos do livro é sobre come hospedar a aplicação online e esses assuntos são discutidos :slight_smile:

Abraços

Tinha colocado uma dúvida aqui, mas era um erro de digitação meu. Apaguei pois não valia a pena, não é a dúvida de outros usuários. Obrigado a todos!

Ok, legal que você encontrou o problema, @claudineyjr. Muitas vezes isso acontece. Um simples erro de digitação que nos tira do sério :slight_smile:

boa tarde, gostaria de saber se a resposta para os desafios se encontra em algum lugar??

Olá, @mateuscaldas. Não as respostas não estão publicadas. Pode ser que alguém tenha publicado, mas não tenho essa informação. Aqui no fórum tem algumas discussões sobre as soluções.

Bom dia @evaldojuniorbento , O meu código de conexão com o banco está igual o do livro, porém ao executar ele só está mostrando na tabela os dados numéricos, ou seja a prioridade e a coluna concluida, os que contém texto ele da o seguinte erro:
Notice: Undefined index: txtNome in C:\xampp\htdocs\tarefas\template.php on line 66
Como resolver?

Verifique se os campos no banco são os mesmos que você está acessando no código.

Você consegue ver os dados direto no PHPMyAdmin?

Era isso mesmo… Eu havia mantido o igual ao name, dos inputs… Obrigado pela ajuda :blush:

Boa Tarde @evaldojuniorbento, Apereceu o seguinte erro no meu arquivo template_tarefa, estou no final do capítulo 10.
Warning: Illegal string offset ‘nome’

O que poderia ser isso?

Oi, @FernancoCendretti. Parece que você está tentando acessar uma string como se fosse um array. Confere a variável.

Problemas com FOREACH
Citar
Notice: Undefined variable: lista_tarefas in C:\xampp\htdocs\tarefas\template.php on line 25
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\tarefas\template.php on line 25

<?php

session_start();
if(isset($_GET['nome'])){
	$_SESSION['lista_tarefas'][]=$_GET['nome'];
}
$lista_tarefas = array();
if(isset($_SESSION['lista_tarefas'])){
	$lista_tarefas = $_SESSION['lista_tarefas']; 
	 //<!-- echo "Nome informado: ". $_GET['nome']; -->
} else{
	$lista_tarefas = array();
}
 include "template.php";

?>

------------ TEMPLATE

Gerenciador de Tarefas

Gerenciador de Tarefas

Nova Tarefa Tarefa: <?php foreach ( $lista_tarefas as $tarefa): ?> <?php endforeach; ?>
Tarefas:
<?php echo $tarefa; ?>
Descrição (Opcional) Prazo (Opicional) Prioridade: Baixa Média Alta

@evaldojuniorbento, o que na realidade faltava era a colchetes na função de buscar os anexos, Obrigado pela ajuda

Como faço para acrescentar a porta do servidor do banco de dados??
Assim:

$bdServidor = ‘localhost’;
$bdPorta = 8889;
$bdUsuario = ‘sistematerefas’;
$bdSenha = ‘sistema’;
$bdBanco = ‘tarefas’;

$conexao = mysqli_real_connect($link, $bdServidor, $bdPorta, $bdUsuario, $bdSenha, $bdBanco);

Olá, @maraiva.

Veja a sequencia dos parametros em http://php.net/manual/pt_BR/mysqli.real-connect.php :slight_smile:

Olá, @evaldojuniorbento,

Esse problema eu consegui resolver. Agora estou com outro problema.
Não estou conseguindo trazer os dados do banco. Já estou com a função buscar_tarefas pronta e parece q a variável $lista_tarefas não está recebendo os dados do banco. Já tentei de tudo para tentar resolver e não consegui solucionar. Pode me ajudar??

Códigos: https://github.com/InFog/phpmysql/issues/2

Olá @evaldojuniorbento, estou com problemas no capítulo 6, o foreach dentro do arquivo tamplate.php
não está reconhecendo a variável $lista_tarefas que está no arquivo tarefas.php.

Na página HTML aparece a seguinte mensagem de erro:

Undefined variable: lista_tarefas in C:\wamp\www\DesenvolvimentoWebComPHPeMySQL\capitulo5\template.php on line 63

Warning: Invalid argument supplied for foreach() in C:\wamp\www\DesenvolvimentoWebComPHPeMySQL\capitulo5\template.php on line 63

Vi que algumas pessoas do fórum também passaram por isso e resolveram com a dica que você deu.
Que seria adicionar o código:

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

No meu caso mesmo fazendo isso não resolve.


Segue o código de 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'] = '';
	}

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

	if (array_key_exists('concluida', $_GET)) {
		$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";
?>

Obs.: Já testei declarando $lista_tarefas antes do primeiro e o último if, mas não funcionou.


Segue o código de template.php

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<link rel="stylesheet" type="text/css" href="./CSS/tarefas.css">
		<title>Gerenciador de Tarefas - Capítulo 5</title>
	</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): <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 /> 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" />
		</fieldset>
	</form>

	<table>
		<tr>
			<th>Tarefas</th>
			<th>Descrição</th>
			<th>Prazo</th>
			<th>Prioridade</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>
	</body>
</html>

Desde já agraço a ajuda.
Abraço.

O que acontece se você simplesmente declarar $lista_tarefas antes do include "template.php"?

Olá @evaldojuniorbento pelo retorno, teste da seguinte maneira.

$lista_tarefas = $_SESSION['lista_tarefas];
include “template.php”;

e

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

E o erro persistiu, detalhe os dois arquivos estão no mesmo diretório.
Não sei se o erro tem alguma relação com o ambiente de desenvolvimento também.
Estou usando XAMPP com PHP 7 e como editor o Sublime Text 3.

O que acontece se você colocar apenas a linha $lista_tarefas = [] antes do include template?

Testei da maneira como você exemplificou e continuou com a mesma mensagem.