Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

omm62

Script de login não funfa

Recommended Posts

Bom dia a todos. Estou iniciando em php oo e fazendo um script de login, mas o bicho num funfa. Da msg de erro "no database selected". Segue o código para análise. Sou grato por qq ajuda.

Classe Usuario

<?php
class Usuario {

// Dados do usuario

var $login;
var $senha;

// Dados do servidor mysql
var $servidor = 'localhost';
var $administrador = 'root';
var $passe = 'klz3t8j1';
var $banco = 'pessoal';

function conecta_banco() {
$this->servidor = $servidor;
$this->administrador = $administrador;
$this->passe = $passe;
$this->banco = $banco;
$conexao = mysql_connect($this->servidor, $this->administrador, $this->passe);
mysql_select_db($this->banco, $conexao);
}

function getNome() {
return $this->login;
}

function autentica() {
//Aqui estara o metodo de acesso ao banco.

$this->conecta_banco();
$login = $this->login;
$senha = $this->senha;

$query = "SELECT usuario, senha, idpessoa FROM pessoa WHERE usuario = $login AND senha = $senha";
$resultados = mysql_query($query) or die (mysql_error());
if (mysql_num_rows($resultados)==1) {
$this->geraSessao($this);
return true;
}
else
{
return false;
}
}
function geraSessao($login) {
session_start();
$_SESSION['usuario'] = $login;
}
}
?>

[i]Página autenticar.php[/i]
<?php
include("usuario.php");

$login = $_POST["txtUsuario"];
$senha = $_POST["txtsenha"];
$usuario = new Usuario($login,$senha);
if ($usuario->autentica()) {
header("location:listar.php");
}
?> 

Compartilhar este post


Link para o post
Compartilhar em outros sites

var $banco = 'pessoal';

Coloque aqui, o nome do seu banco de dados. Você já o criou?

 

O nome do banco é pessoal

 

Tu ta em qual versão do php pra usar var? E o banco de dados existe ?

 

A versão do php é PHP 5.3.10. O banco foi criado com o nome "pessoal"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Está online ou localmente?

Estou trabalhando localmente com o php 5.3.10 configurado em ambiente linux ubuntu 12.04 apache2handler.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Por padrão a senha do MySql, é um valor de nulo, e você declarou: klz3t8j1, você mudou a senha padrão do MySql, ou não? Se não, declare a senha com nulo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicione uma variável para conexão:

private $_conexao;

 

Não é necessário usar 'var' para declarar uma variável e os manuais de estilo recomendam não usar, portanto, há uma convenção de não usar 'var'.

 

As variáveis a seguir devem ser privadas, para que não sejam acessadas de fora da classe.

private $_servidor       = 'localhost';
private $_administrador  = 'root';
private $_passe          = 'klz3t8j1';
private $_banco          = 'pessoal';

 

Observe que eu escrevi o nome de todas com o prefixo '_'. Isso é outra convenção, para que fique mais fácil identificar que essa variável é privada e só podo ser acessada de dentro da classe.

 

Leia isso:

OOP5 Visibility

 

 

Remova isso, não faz sentido...

$this->servidor = $servidor;
$this->administrador = $administrador;
$this->passe = $passe;
$this->banco = $banco;

De onde estão vindo as variáveis $servidor, $administrador, $passe e $banco (você não está passando pela função). Parece que você está usando valores nulos para sobrescrever suas variáveis com dados para conexão com o banco. O porquê de seu script não está funcionando provavelmente é este.

 

 

Crie a sua conexao da seguinte forma

// Faz a conexao...
$this->_conexao = mysql_connect($this->_servidor, $this->_administrador, $this->_passe);

// ...e verifica se não houve nenhum erro ao fazer a conexão
if (!$this->_conexao) {
   die('Não está conectado ao servidor: ' . mysql_error());
}

// Seleciona o banco de dados
$bd_selecionado = mysql_select_db($this->_banco, $this->_conexao);

// ...e verifica...
if (!$bd_selecionado) {
   die ('Não foi possível selecionar o banco de dados: ' . mysql_error());
}

 

O correto é chamar o método 'conecta_banco' já no construtor

function __construct() {
  $this->conecta_banco();
}

 

Adicione também um método destrutor, e feche a conexão quando você destruir o objeto:

function __destruct() {
  mysql_close($this->_conexao);
}

o método 'autentica' fará então apenas o query e a comparação do resultado.

 

Saiba mais sobre Construtores e Destrutores.

 

Quando for fazer o query, use o identificador da conexão:

mysql_query($query, $this->_conexao);

 

 

 

Observações:

- Não testei o código acima, portanto pode conter algum erro de sintaxe. Caso apareça, verifique a linha onde ocorreu o erro e corrija.

- Ao postar um código no fórum, coloque entre as tags 'php' para que fique mais fácil a leitura:

[php] ... código [/php]

Compartilhar este post


Link para o post
Compartilhar em outros sites

troque esta linha:


mysql_select_db($this->banco, $conexao);

 

por esta:

mysql_select_db($this->banco, $conexao) or exit( mysql_error() );

isso mostrará a mensagem de erro, caso haja falha na seleção do banco

 

você também pode usar var_dump() para testar o retorno dessa função

 

e leia isto:

http://br2.php.net/mysql_select_db

 

no topo já há o aviso pra evitar mysql_*(). Prefira MySQLi ou PDO

Compartilhar este post


Link para o post
Compartilhar em outros sites

Adicione uma variável para conexão:

private $_conexao;

 

Não é necessário usar 'var' para declarar uma variável e os manuais de estilo recomendam não usar, portanto, há uma convenção de não usar 'var'.

 

As variáveis a seguir devem ser privadas, para que não sejam acessadas de fora da classe.

private $_servidor       = 'localhost';
private $_administrador  = 'root';
private $_passe          = 'klz3t8j1';
private $_banco          = 'pessoal';

 

Observe que eu escrevi o nome de todas com o prefixo '_'. Isso é outra convenção, para que fique mais fácil identificar que essa variável é privada e só podo ser acessada de dentro da classe.

 

Leia isso:

OOP5 Visibility

 

 

Remova isso, não faz sentido...

$this->servidor = $servidor;
$this->administrador = $administrador;
$this->passe = $passe;
$this->banco = $banco;

De onde estão vindo as variáveis $servidor, $administrador, $passe e $banco (você não está passando pela função). Parece que você está usando valores nulos para sobrescrever suas variáveis com dados para conexão com o banco. O porquê de seu script não está funcionando provavelmente é este.

 

 

Crie a sua conexao da seguinte forma

// Faz a conexao...
$this->_conexao = mysql_connect($this->_servidor, $this->_administrador, $this->_passe);

// ...e verifica se não houve nenhum erro ao fazer a conexão
if (!$this->_conexao) {
   die('Não está conectado ao servidor: ' . mysql_error());
}

// Seleciona o banco de dados
$bd_selecionado = mysql_select_db($this->_banco, $this->_conexao);

// ...e verifica...
if (!$bd_selecionado) {
   die ('Não foi possível selecionar o banco de dados: ' . mysql_error());
}

 

O correto é chamar o método 'conecta_banco' já no construtor

function __construct() {
  $this->conecta_banco();
}

 

Adicione também um método destrutor, e feche a conexão quando você destruir o objeto:

function __destruct() {
  mysql_close($this->_conexao);
}

o método 'autentica' fará então apenas o query e a comparação do resultado.

 

Saiba mais sobre Construtores e Destrutores.

 

Quando for fazer o query, use o identificador da conexão:

mysql_query($query, $this->_conexao);

 

 

 

Observações:

- Não testei o código acima, portanto pode conter algum erro de sintaxe. Caso apareça, verifique a linha onde ocorreu o erro e corrija.

- Ao postar um código no fórum, coloque entre as tags 'php' para que fique mais fácil a leitura:

[php] ... código [/php]

Quando eu declaro
[php]
private $_servidor       = 'localhost';
private $_administrador  = 'root';
private $_passe          = 'klz3t8j1';
private $_banco          = 'pessoal';
[/php]

não estou atribuindo valores a estas variáveis?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, aí você está. Mas o que você está fazendo na função conecta_banco com as essas variáveis?

 

Na linha 15 você colocou:

function conecta_banco() {
$this->servidor = $servidor;
$this->administrador = $administrador;
$this->passe = $passe;
$this->banco = $banco;
$conexao = mysql_connect($this->servidor, $this->administrador, $this->passe);
mysql_select_db($this->banco, $conexao);
}

Porque você está sobrescrevendo a propriedades do objeto e onde foi que você declarou as variáveis $servidor, $administrador, $passe e $banco?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim, aí você está. Mas o que você está fazendo na função conecta_banco com as essas variáveis?

 

Na linha 15 você colocou:

function conecta_banco() {
$this->servidor = $servidor;
$this->administrador = $administrador;
$this->passe = $passe;
$this->banco = $banco;
$conexao = mysql_connect($this->servidor, $this->administrador, $this->passe);
mysql_select_db($this->banco, $conexao);
}

Porque você está sobrescrevendo a propriedades do objeto e onde foi que você declarou as variáveis $servidor, $administrador, $passe e $banco?

Já suprime isso

$this->servidor = $servidor;
$this->administrador = $administrador;
$this->passe = $passe;
$this->banco = $banco;

Devo fazer então

$conexao = mysql_connect($this->_servidor, $this->_administrador, $this->_passe);
mysql_select_db($this->banco, $_conexao);

certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

#12

 

Não se esqueça do "this->" em _conexao (essa variável precisa ser acessível a todos os métodos da classe) e das verificações. Você deve verificar se a conexão foi feita com sucesso antes de selecionar o DB, e deve verificar se o banco de dados foi selecionado com sucesso antes de executar um comando SQL (veja como eu coloquei no post #8).

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu amigo, não era mais simples você fazer isso aqui ? :huh:

 

irá funcionar normalmente...

 

<?php
class Usuario {

// Dados do usuario

public $login;
public $senha;

// Dados do servidor mysql
private $servidor = 'localhost';
private $administrador = '';
private $passe = '';
private $banco = '';

public function geraSessao()
{
session_start();

}

public function conecta_banco() {


$conexao = mysql_connect($this->servidor,$this->administrador,$this->passe);
mysql_select_db($this->banco, $conexao)or die(mysql_error());

}

public function __construct($login,$senha)
{
$this->conecta_banco();

   $this->login = $login;
$this->senha = $senha;

$query =mysql_query("SELECT usuario, senha, idpessoa FROM pessoa WHERE usuario = '".$this->login."' AND senha = '".$this->senha."'")or die(mysql_error());

if (mysql_num_rows($query)==1)
{

	$this->geraSessao();
	$_SESSION['usuario'] = $this->login;
	header("Location: lista.php");

}

}

}
$login = $_POST["txtUsuario"];
$senha = $_POST["txtsenha"];
$usuario = new Usuario($login,$senha);
?>

 

Não esqueça de colocar os dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu amigo, não era mais simples você fazer isso aqui ? :huh:

 

irá funcionar normalmente...

 

<?php
class Usuario {

// Dados do usuario

public $login;
public $senha;

// Dados do servidor mysql
private $servidor = 'localhost';
private $administrador = '';
private $passe = '';
private $banco = '';

public function geraSessao()
{
session_start();

}

public function conecta_banco() {


$conexao = mysql_connect($this->servidor,$this->administrador,$this->passe);
mysql_select_db($this->banco, $conexao)or die(mysql_error());

}

public function __construct($login,$senha)
{
$this->conecta_banco();

   $this->login = $login;
$this->senha = $senha;

$query =mysql_query("SELECT usuario, senha, idpessoa FROM pessoa WHERE usuario = '".$this->login."' AND senha = '".$this->senha."'")or die(mysql_error());

if (mysql_num_rows($query)==1)
{

	$this->geraSessao();
	$_SESSION['usuario'] = $this->login;
	header("Location: lista.php");

}

}

}
$login = $_POST["txtUsuario"];
$senha = $_POST["txtsenha"];
$usuario = new Usuario($login,$senha);
?>

 

Não esqueça de colocar os dados.

Não funfou... fiz exatamente como descrito e nada. Nada é executado. Não exibe nenhuma msg.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então você está com problemas em seu servidor, pois teste o script e funciona corretamente. Como você fez ? como está o formlário ? preencheu os dados: nome do banco login e senha ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.