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 ?
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?