Lista em tabela dados do formulario

Olá a todos!

estou estando php e em um exercio tinha tal propostada:

==== Usando os mesmos conceitos que vimos até agora, monte
uma lista de contatos na qual devem ser cadastrados o nome,
o telefone e o e-mail de cada contato. Continue usando as
sessões para manter os dados. Uma forma simples de resolver
5.5 RESUMO
5.6 DESAFIOS
5.5 RESUMO 67este desafio é copiando o arquivo tarefas.php para
contatos.php , mudar alguns nomes e adicionar os campos
necessários. ====

na tentativa fiz tal codigo …

<?php session_start(); ?> Lista de Contatos

Gerenciador de Contatos

Novo Contato Nome: Telefone: E-mail:
<?php

if	(array_key_exists('nome',	$_GET))	{
	$_SESSION['nome_contato'][] =	$_GET['nome'];
	}
if(array_key_exists('telefone', $_GET)){
	$_SESSION['telefone_contato'][] = $_GET['telefone'];
}

if(array_key_exists('email', $_GET)){
	$_SESSION['email_contato'][] = $_GET['email'];
}

$lista_contatos= [];

if(array_key_exists('nome_contato', $_SESSION)){
	$lista_contatos = $_SESSION['nome_contato'];
}

if(array_key_exists('telefone_contato', $_SESSION)){
	$lista_contatos = $_SESSION['telefone_contato'];
}

if(array_key_exists('email_contato', $_SESSION)){
	$lista_contatos = $_SESSION['email_contato'];
}
	
?>

	<table>
			<tr>
				<th></th>
			</tr>
			<?php foreach($lista_contatos as $contato):?>
			<tr>
				<td><?php echo $contato; ?></td>
				
								
				
			</tr>
			<?php	endforeach;	?>
	</table>
</body>

mais só imprime na tela o ultimo campo do formulario
ex: email@gmail.com
email@gmail.com
email@gmail.com
email@gmail.com
email@gmail.com

onde estou falhando ? :confused:

agredeço desde já!

Na minha opinião vc está dando muita volta e se perdendo principalmente nos 3 ultimos if’s, algo assim acho que lhe atenderia melhor…

<?php
session_start();
if ($_GET) {
    $_SESSION['contatos'][] = $_GET; //adiciona na lista
}
$contatos = $_SESSION['contatos'];
?>
....
<?php foreach($contatos as $contato):?>
<tr>
    <td><?=$contato['nome']; ?></td>
    <td><?=$contato['telefone']; ?></td>
    <td><?=$contato['email']; ?></td>
</tr>
<?php endforeach; ?>

Precisa de melhorias, principalmente validações, etc, mas para ter uma noção serve muito bem

Dica: prefira usar POST em formulários e não GET, pesquise mais a respeito e ajuste seu código…

Dica 2: use isset ao invés de array_key_exists, é mais rápido e o código fica mais enxuto…

Dica 3: se quiser validar se o campo está vazio use a função empty e não somente isset, lembre-se isset e array_key_exists validam se a chave existe, mas não testa seu valor na chave, são coisas distintas…

Dica 4: reveja sua lógica quando preenche $lista_contatos, do jeito que está sempre que mandar um campo email no get (mesmo que vazio) a lista de contatos só vai ter email, perdendo assim os nomes e telefones dos contatos…

Estou fazendo assim porque está assim na apostila. Infelizmente ainda não entendo bem onde está o meu erro. vou revisar a fim de descobrir, caso contrario não consigo avançar… tá tenso.

Faça isso e vc vai perceber onde está errando…

if(array_key_exists('nome_contato', $_SESSION)){
    $lista_contatos = $_SESSION['nome_contato'];
}
var_dump($lista_contatos);
echo '<hr>';

if(array_key_exists('telefone_contato', $_SESSION)){
    $lista_contatos = $_SESSION['telefone_contato'];
}
var_dump($lista_contatos);
echo '<hr>';

if(array_key_exists('email_contato', $_SESSION)){
    $lista_contatos = $_SESSION['email_contato'];
}
var_dump($lista_contatos);
echo '<hr>';

vc está apenas trocando os valores e não acumulando, pegou?