Autor Tópico: mantendo dados no formulário depois do submit  (Lida 13634 vezes)

Offline maurov

  • Usuário Ubuntu
  • *
  • Mensagens: 446
    • Ver perfil
Re: mantendo dados no formulário depois do submit
« Resposta #15 Online: 14 de Junho de 2011, 17:08 »
corrigindo:
Parece que o problema está na arquitetura do sistema, que está assim:
index.html -> tem form que possui action=setvar.php
setvar.php -> pega usuario e senha do post e guarda em session (para executar de novo nos require) header para login
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

Offline maurov

  • Usuário Ubuntu
  • *
  • Mensagens: 446
    • Ver perfil
Re: mantendo dados no formulário depois do submit
« Resposta #16 Online: 15 de Junho de 2011, 09:49 »
Se alguém achar que está tudo errado, não se intimide em falar.
É exatamente para troca de experiências que usamos o fórum.

Offline agente100gelo

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.369
  • @Ceará
    • Ver perfil
Re: mantendo dados no formulário depois do submit
« Resposta #17 Online: 15 de Junho de 2011, 10:08 »
Se alguém achar que está tudo errado, não se intimide em falar.

Tudo errado :)
Você tá complicando.

Pra ficar mais elegante, faça o seguinte.

1. Crie um index.php onde ficará o formulário.
2. O action do form é o próprio index.php.
3. Crie uma pasta chamada includes.
4. Crie um arquivo inc_conexao.php. Com as informações de conexão.
5. Crie um arquivo inc_login.php. Onde estarão as funções de login.


O seu index.php seria isso:
Código: [Selecionar]
<?
session_start();
require("includes/inc_conexao.php");
require("includes/inc_login.php");

if ( isset($_POST["login"]) ) {
    if Login() {
        header("location: home.php");
        # aqui você seta uma variável de sessão pra dizer que o usuário se logou. Ex: $_SESSION["logado"] = 1;
    }
}

// Aqui fica o formulário.

?>

No inc_login.php você teria uma função pra testar se usuário está correto.

Código: [Selecionar]
function Login() {
    # SQL de login
    return mysql_num_rows($result); // retorna 1 (true) se correto, e 0 (false)
}

Basicamente é isso. O ideal seria usar classes e fazer uma checagem nas variáveis passadas mas isto fica pra você aprender depois.
Advogado e analista de sistema cearense.
Twitter: @glaydson

Offline maurov

  • Usuário Ubuntu
  • *
  • Mensagens: 446
    • Ver perfil
Re: mantendo dados no formulário depois do submit
« Resposta #18 Online: 15 de Junho de 2011, 10:48 »
Isso aí!
Recomeçando então.
 ;)

Offline maurov

  • Usuário Ubuntu
  • *
  • Mensagens: 446
    • Ver perfil
Re: mantendo dados no formulário depois do submit
« Resposta #19 Online: 16 de Junho de 2011, 14:44 »
Seguindo a orientação.
Citar
1. Crie um index.php onde ficará o formulário.
Como este index inicia com dois requires de conexão que ainda não forma alimentados com dados de usuario e senha, devo supor que precisa outra rotina antes com form para login?
Citar
2. O action do form é o próprio index.php.
O form referido é de entrada de dados mesmo, não de dados de login, né?
3. Crie uma pasta chamada includes.
Citar
4. Crie um arquivo inc_conexao.php. Com as informações de conexão.
usuario, senha e db_selected? Ou o insert into meudb value() ?
Citar
5. Crie um arquivo inc_login.php. Onde estarão as funções de login.

Offline agente100gelo

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.369
  • @Ceará
    • Ver perfil
Re: mantendo dados no formulário depois do submit
« Resposta #20 Online: 16 de Junho de 2011, 15:55 »
Um inc_conexao.php pra você.

Código: [Selecionar]
<?
$conexao = mysql_pconnect("localhost","***usuario***","***senha***") or die($msg[0]);
mysql_select_db("banco_de_dados",$conexao) or die($msg[1]);
?>
Advogado e analista de sistema cearense.
Twitter: @glaydson

Offline maurov

  • Usuário Ubuntu
  • *
  • Mensagens: 446
    • Ver perfil
Re: mantendo dados no formulário depois do submit
« Resposta #21 Online: 16 de Junho de 2011, 16:19 »
Fiz e funcionou. Mas corrija-me.
Se fizer esta inc_conexao assim num script só, os require() das páginas seguintes que fazem "insert into tabela value()" poderão usá-la. Mas se os dados desta inc_conexao entrarem por $_post, ela vai executar apenas na primeira vez, pois quando for chamada de novo pelos requires as variáveis $_post estarão vazias.

Offline agente100gelo

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.369
  • @Ceará
    • Ver perfil
Re: mantendo dados no formulário depois do submit
« Resposta #22 Online: 16 de Junho de 2011, 18:09 »
A variável POST só zera no fim do script principal não quando é usado.
Advogado e analista de sistema cearense.
Twitter: @glaydson

Offline maurov

  • Usuário Ubuntu
  • *
  • Mensagens: 446
    • Ver perfil
Re: mantendo dados no formulário depois do submit
« Resposta #23 Online: 17 de Junho de 2011, 11:37 »
O erro (meu) no teste abaixo é ter que navegar entre páginas que abrem formulários e outras que fazem inserções perdendo o $_post.
Possibilidades:
1 - Não saberia como colocar o action para a própria página para não sair do script.
2 - O uso de pconnect talvez mude alguma coisa.

index.php
Citar
<?php
session_start();
?>
<form method="post" action="inc_login.php">
<input name="usuario" type="text">
<input name="senha" type="text">
<input name="Submit" value="entrar" type="submit">
</form>

inc_login.php
Citar
<?php
session_start();
$hostname = 'localhost';
$mysqlcon = mysql_connect($hostname, $_POST[usuario], $_POST[senha]) or die ('Nao fez a conexao com o mysql: ' . mysql_error());
$banco = 'meudb';
$selectdb = mysql_select_db($banco, $mysqlcon) or die ("Nao pode acessar meudb : " . mysql_error());   
header("location:home1.php");
?>

home1.php
Citar
<?php
session_start();
//require ("inc_login.php")
// aqui um form de  cadastro com action para outro arquivo de inserção
echo "se o post estiver ok, vai aparecer abaixo: <br>";
echo "$_POST[usuario]";
?>
a tela não responde o echo do post. Da mesma forma, se descomentar o require, este não executa.

Offline agente100gelo

  • Administrador
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.369
  • @Ceará
    • Ver perfil
Re: mantendo dados no formulário depois do submit
« Resposta #24 Online: 17 de Junho de 2011, 11:48 »
Tá errado sua ideia.

Código: [Selecionar]
<form method="post" action="index.php">
É index.php mesmo. Você não chama o includes. Aprenda a dividir as tarefas em pequenos arquivos.
Deixe de dar header desnecessários.

O inc_login é pra ter a busca do usuário no MySQL. As configurações e conexões do MySQL ficam no inc_conexao.php.
No inc_login se o usuário for encontrado você primeiro alimenta as variáveis de sessão
ex:
Código: [Selecionar]
$sql = "select * from tb_usuario where ....";
$result = mysql_query();
$registro = mysql_fetch_arrow($result);
$_SESSION["usuario"] = $registro["nm_usuario"];

Aí, depois, faz o header pro home.php
Advogado e analista de sistema cearense.
Twitter: @glaydson