Jump to content


Photo

Problema Com Sessions E Classes


  • Faça o login para participar
19 replies to this topic

#1 djoser

djoser

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 25/11/2009, 18:15

Tinha achado que o problema era em chamar a classe. Mas depois de perguntar aqui no fórum mesmo como chamar classes o problema continuou e não parece mais ser em como chamo-as.

Esse código usa uma classe para armazenar session das informações pessoais do usuário, para se ele quiser alterá-la etc. Mas não está funcionando e não vi logicamente, onde está o erro.Vocês sbaem qual o problema?
Obrigado


Arquivo informaçõesUser.php:


<?php
class informacoesUser{
public $username;
public $email;public $senha; 

function usuario($user){  $
resultado = mysql_query("SELECT * FROM usuarios WHERE username = '$user'");  
$inf = mysql_fetch_array($resultado);  global $username = inf["user"];  
global $email = inf["email"];  global $senha = $_COOKIE["senha"]; }  
}
?>

Setar as informações e acessá-las:

...(resto do programa)

include "informacoesUser.php";                        
$infoUser = new informacoesUser;                        
$infoUser->usuario($username);                         
$_SESSION['usuario'] = infoUser;                                                
header ("Location: index2.php");


#2 boirock

boirock

    Tecnologia para todos (agora hexa campeão)

  • Usuários
  • 1559 posts
  • Sexo:Masculino
  • Localidade:Curitiba - PR
  • Interesses:PostgreSQL - PHP

Posted 25/11/2009, 19:12

Cara... vê se esse formato serve pra você...

<?php
class informacoesUser{

 public $username;
	public $email;
	public $senha; 

function usuario($user){ 

 $resultado = mysql_query("SELECT * FROM usuarios WHERE username = '$user'"); 
 $inf = mysql_fetch_array($resultado); 

 $this->username = $inf["user"]; 
 $this->email = $inf["email"]; 
 $this->senha = $_COOKIE["senha"]; } 

}

// [...]

$infoUser = new informacoesUser; 
$infoUser->usuario($username); 

$_SESSION['usuario'] = $infoUser->username; 

header ("Location: index2.php");

Edição feita por: boirock, 25/11/2009, 19:13.


#3 S4ur0N

S4ur0N

    Ainda Normal

  • Usuários
  • 274 posts
  • Sexo:Não informado
  • Localidade:Blumenau - SC

Posted 25/11/2009, 19:18

Cara, essa classe é usada pra armazenar informações do usuário na session? O que exatamente deveria acontecer e não está acontecendo?

Uma coisa, não testei, mas a forma correta de instanciar uma classe é assim: new informacoesUser(); << com os parênteses. E você precisa dar o session_start() pra iniciar a session.
©2009 - Todos os direitos reservados.

#4 djoser

djoser

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 25/11/2009, 21:30

Não coloquei juto porque são dois arquivos diferentes. Preciso colocar em 2 arquivos porque esta classe é acessada por vários arquivos.

Tinha colocado new informacoesUser() com parenteses antes, mas de tanto modificar para testar acabou sumindo o session_start().

Mas continua dando erro. Por exemplo nesta página (de login), o header dá erro e não acessa página nenhuma, quando estou com este arquivo. Nos outros programa que acesso estas informações para o usuário pode mudar suas configurações ou para carregar estas informações para postar algo, não grava no MYSQL. Testando sem isso tudo funciona normalmente.

Acesso por $username = $_SESSION['usuario']; etc.

#5 S4ur0N

S4ur0N

    Ainda Normal

  • Usuários
  • 274 posts
  • Sexo:Não informado
  • Localidade:Blumenau - SC

Posted 26/11/2009, 14:02

Vê se esse exemplo ajuda:

<?php
//index.php
include("Usuario.php");
session_start();

if (!isset($_SESSION["usuario"]))
    header("location: entrar.php");

echo "Olá {$_SESSION["usuario"]->getNome()}!";

?>

<?php
//entrar.php
include("Usuario.php");
session_start();

$_SESSION["usuario"] = new Usuario("João da Silva");

header("location: ./");

?>

<?php
//Usuario.php
class Usuario{
    
    private $nome;
    
    public function Usuario($nome) {
    	$this->nome = $nome;
    }
    
    public function getNome() {
    	return $this->nome;
    }

}
?>

©2009 - Todos os direitos reservados.

#6 djoser

djoser

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 28/11/2009, 00:52

Testei sem o primeiro programa, já que terei a session e deu certo. Não vi se no MySQL agora tá carregando direito, porque não entendi umas coisas do programa.

Mas não entendi a sintaxe muito. Fiquei com 2 duvidas:

1-
Preciso carregar todas as informações pessoais do usuario. Neste programa como faço? Pensei em criar um getNome, outro getEmail que acesso o MySQL tendo o usuario do getNome etc.
e acesso as informações por
$_SESSION["usuario"]->getNome();
$_SESSION["usuario"]->getEmail();

etc.

É assim mesmo?

2-
Quando coloco include("Usuario.php");
$_SESSION["usuario"] = new Usuario("João da Silva");

ele já "carrega" a função Usuario? Porque pelo que aprendi primeiro faria
a= new Usuario();
$_SESSION["usuario"]-> Usuario(João da Silva");

É como se fosse um construtor?

Obrigado

Fui testar todo o programa mas no primeiro, quem tem o echo tá dando erro e não consegue carregar a página. Fiz o programa inclusive um pouco mais simples, pois ele imprime direto com o echo sem testar e possivelmente transferir para o entrar.php, pois ele só é chamado se passar pelo login (e assim já foi testado).

Sabe porque está dando erro no echo???

#7 S4ur0N

S4ur0N

    Ainda Normal

  • Usuários
  • 274 posts
  • Sexo:Não informado
  • Localidade:Blumenau - SC

Posted 28/11/2009, 11:32

Fui testar todo o programa mas no primeiro, quem tem o echo tá dando erro e não consegue carregar a página. Fiz o programa inclusive um pouco mais simples, pois ele imprime direto com o echo sem testar e possivelmente transferir para o entrar.php, pois ele só é chamado se passar pelo login (e assim já foi testado).

Sabe porque está dando erro no echo???

Se você tirou a verificação, provavelmente tá dando erro porque a $_SESSION['usuario'] não existe.

2-
Quando coloco include("Usuario.php");
$_SESSION["usuario"] = new Usuario("João da Silva");

ele já "carrega" a função Usuario? Porque pelo que aprendi primeiro faria
a= new Usuario();
$_SESSION["usuario"]-> Usuario(João da Silva");

É como se fosse um construtor?

Usuário é uma classe, não uma função.

O include é pra carregar os arquivos.
$a= new Usuario(); << você tá instanciando um objeto Usuario na variável $a.
$_SESSION["usuario"]-> Usuario(João da Silva"); << você está chamando o método Usuario() do objeto que tá instanciado na variavel 'usuario' da session.

Você poderia fazer assim:
$a = new Usuario("João da Silva"); << instancia o objeto na variável
$_SESSION['usuario'] = $a; << joga a variável na session

1-
Preciso carregar todas as informações pessoais do usuario. Neste programa como faço? Pensei em criar um getNome, outro getEmail que acesso o MySQL tendo o usuario do getNome etc.
e acesso as informações por
$_SESSION["usuario"]->getNome();
$_SESSION["usuario"]->getEmail();

etc.

É assim mesmo?

Eu faria assim: depois de submetido o formulário de login, pega todos os dados do usuario e joga numa classe Usuario na session. Eu não faria os selects dentro da classe.
©2009 - Todos os direitos reservados.

#8 djoser

djoser

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 28/11/2009, 21:48

Mesmo fazendo o teste com o isset continua dando o mesmo problema. Não sei porque mas dá erro ao carregar a página.

#9 djoser

djoser

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 01/12/2009, 12:50

Sabe qual o problema?

#10 offspring

offspring

    O_o

  • Ex-Admins
  • 946 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 01/12/2009, 13:27

Posta o trecho do código de como ficou essa página que está dando erro...

#11 djoser

djoser

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 01/12/2009, 13:57

Aqui:

<body>
<?php
include("informacoesUser.php");
session_start();
if (!isset($_SESSION["usuario"]))
header("location: entrar.php");
echo "Olá {$_SESSION["usuario"]->getNome()}!";
?>
</body>
</html>


#12 offspring

offspring

    O_o

  • Ex-Admins
  • 946 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 01/12/2009, 14:07

o header() deve vir antes de qualquer saída HTML... o <body> está sendo exibido antes dele...

#13 djoser

djoser

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 01/12/2009, 15:48

Entendi.
Tentei arrumar isso mas continua dando o mesmo erro.
No arquivo de login que é responsável por efetivar o login deixei assim:

include "informacoesUser.php";
			session_start();
			$_SESSION["usuario"]=new informacoesUser("João da Silva");
			
			header ("Location: index2.php");
E no index2 mudei para

<body>
<?php
include("informacoesUser.php");
session_start();
echo "$_SESSION["usuario"]->getNome()";
?>
</body>
</html>

Assim não tenho que chamar o header porque crio automaticamente a sesseion assim que o usuario loga. Mas o mesmo problema continua.

#14 offspring

offspring

    O_o

  • Ex-Admins
  • 946 posts
  • Sexo:Masculino
  • Localidade:São Paulo - SP

Posted 01/12/2009, 15:51

session_start();

também precisa vir antes de qualquer saída html ^_^

#15 djoser

djoser

    Novato no fórum

  • Usuários
  • 23 posts
  • Sexo:Não informado

Posted 05/12/2009, 12:12

Então parea imprimir os valores de uma sesseion tem que criar um arquivo que acesse externamente e/ou copiar para outra variavel, ou tem outro jeito?

E cookies também precisam vir antes de qualquer saida?

Testei sem nenhuma saida html. Se der certo aí é só aprimorar o programa para colocar essa estrutura.

Não deu erro ao carregar a página, mas apareceu toda em branca, como se o echo ( e a sesseion) estivessem vazias.
Sabe por quê?

Testei de criar uma sessionque armazena só a palavra teste, e funcionou corretamente. Então o problema está no código informacoesUser/Usuario .php que permite acesso às informações do usuário?
Tentei ver onde está o erro aí, mas não descobri.

----------




Estou tentando de tudo e até agora nada. Como não tenho experiência, algum erro deve estar passando. Vocês sabem o que é???

Edição feita por: djoser, 03/12/2009, 16:52.





0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq