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

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

maurov

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.

agente100gelo

Citação de: maurov online 15 de Junho de 2011, 09:49
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:

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


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

maurov


maurov

Seguindo a orientação.
Citar1. 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?
Citar2. 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.
Citar4. Crie um arquivo inc_conexao.php. Com as informações de conexão.
usuario, senha e db_selected? Ou o insert into meudb value() ?
Citar5. Crie um arquivo inc_login.php. Onde estarão as funções de login.

agente100gelo

Um inc_conexao.php pra você.

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

maurov

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.

agente100gelo

A variável POST só zera no fim do script principal não quando é usado.
Advogado e analista de sistema cearense.
Twitter: @glaydson

maurov

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.

agente100gelo

Tá errado sua ideia.

<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:
$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