mantendo dados no formulário depois do submit

Iniciado por maurov, 07 de Junho de 2011, 17:51

tópico anterior - próximo tópico

maurov

Como faço para manter os dados digitados no formulário após o submit? Defino um:
Citar<input value="<?php print $username>" type="text" ...> , no formulário de login, por exemplo?
Creio precisar inserir um:
Citar<php?
...
print $username
..
?>
Não achei a lógica da coisa

maurov

Outra ideia que achei foi a de gerar uma variável de session uma linha antes de executar o submit do POST e depois fazer um echo desta variavel session no form.
Como vocês fazem? Mudam o VALUE do campo no form ou fazem echo em cada campo?
[ ]

fpissarra

Citação de: maurov online 09 de Junho de 2011, 16:28
Outra ideia que achei foi a de gerar uma variável de session uma linha antes de executar o submit do POST e depois fazer um echo desta variavel session no form.
Como vocês fazem? Mudam o VALUE do campo no form ou fazem echo em cada campo?
[ ]

Quanto mais coisas você manter na sessão, maior vai ser o consumo de memória e trafêgo... Mantenha o mínimo possível!

maurov

caso a resposta possa ser longa, ou exigir um conhecimento extra, aceito sugestões de locais de estudo onde possa achar resposta para esta questão de manter os dados no fomulário depois do submit no form.
[ ]

agente100gelo

O conceito está correto. O problema é que você está usando variáveis globais que não vem por padrão no PHP, nem é uma boa ideia.

Correto:
<input value="
<?php echo $_POST[username]>" type="text" ...>

Advogado e analista de sistema cearense.
Twitter: @glaydson

maurov

O sistema tem um arquivo de formulário e outro arquivo de inserção, php.
Com o código:
Citar<input value="<?php echo $_POST[nome]; ?>" type="text" ...>
o dado digitado no formulário não aparece na tela.

Para testar, criei (mesmo não sendo indicado) um $_SESSION[nome]=$_POST[nome]; no início , e com:
Citar<input type="text" name="nome" value="<?php echo "$_SESSION[nome]"; ?>">
e aparece o valor no formulário.

Por orientações recebidas no fórum, prefiro fazer direto o POST. Só não sei porque ele não mostra o dado digitado.

agente100gelo

Advogado e analista de sistema cearense.
Twitter: @glaydson

maurov

sim,
Citar<form action="insfup.php" method="post" name="Mural" id="Mural">
<input type="text" name="nome" value="<?php echo "$_SESSION[nome]"; ?>">

se troco o session por post, já era.

maurov

fiquei com a impressão de que o script em php do formulário perde o post por ir até outro arquivo realizar a operação. Não sei se pode ser isso.

fpissarra

Citação de: maurov online 13 de Junho de 2011, 12:49
O sistema tem um arquivo de formulário e outro arquivo de inserção, php.
Com o código:
Citar<input value="<?php echo $_POST[nome]; ?>" type="text" ...>
o dado digitado no formulário não aparece na tela.

Para testar, criei (mesmo não sendo indicado) um $_SESSION[nome]=$_POST[nome]; no início , e com:
Citar<input type="text" name="nome" value="<?php echo "$_SESSION[nome]"; ?>">
e aparece o valor no formulário.

Por orientações recebidas no fórum, prefiro fazer direto o POST. Só não sei porque ele não mostra o dado digitado.

Só por curiosidade... você usou como está ($_POST[nome]) ou tentou $_POST["nome"], com o nome do input field entre aspas?

http://php.net/manual/en/reserved.variables.post.php

maurov

Sem aspas, formato:
value="<?php echo "$_POST[nome]"; ?>"
aparece o campo em branco.

Com aspas dentro dos colchetes, no formato:
"<?php echo "$_POST['nome']"; ?>
não aparece nada, nem o formulário, tipo erro de php.

agente100gelo

Advogado e analista de sistema cearense.
Twitter: @glaydson

maurov

Tem um header no final do login.php. Este login é chamado por um require nas telas de inserção. Parece que isto está sendo problemático. Vou tentar a alterar e volto aqui. Segura.

agente100gelo

Vê se não tem um form anterior sem ser fechado </form>.
Outra, altera para method=GET e veja as variáveis na URL chamada.
Advogado e analista de sistema cearense.
Twitter: @glaydson

maurov

Parece que o problema está na arquitetura do sistema, que está assim:
index.html -> tem form que possui action=login.php
setvar.php -> pega usuario e senha do post e guarda em session (para poder executar de novo nos require seguintes)
login.php -> abre conexão mysql, seleciona banco e redireciona via header:location para cadastro.html
cadastro.html -> tem form que possui action=inserecad.php
inserecad.php -> tem um require login.php

Quando o inserecad.php é executado, faz require do login.php cujo header faz voltar ao cadastro.php, com tela em branco.
A arquitetura melhor a usar parece não ser esta.