omm62 1 Denunciar post Postado Agosto 16, 2012 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
Wanderson Valerio 102 Denunciar post Postado Agosto 16, 2012 var $banco = 'pessoal'; Coloque aqui, o nome do seu banco de dados. Você já o criou? Compartilhar este post Link para o post Compartilhar em outros sites
Daniel_Moraes 11 Denunciar post Postado Agosto 16, 2012 Tu ta em qual versão do php pra usar var? E o banco de dados existe ? Compartilhar este post Link para o post Compartilhar em outros sites
omm62 1 Denunciar post Postado Agosto 16, 2012 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
Wanderson Valerio 102 Denunciar post Postado Agosto 16, 2012 Está online ou localmente? Compartilhar este post Link para o post Compartilhar em outros sites
omm62 1 Denunciar post Postado Agosto 16, 2012 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
Wanderson Valerio 102 Denunciar post Postado Agosto 16, 2012 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
mangakah 217 Denunciar post Postado Agosto 16, 2012 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
Beraldo 864 Denunciar post Postado Agosto 16, 2012 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
omm62 1 Denunciar post Postado Agosto 17, 2012 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
mangakah 217 Denunciar post Postado Agosto 17, 2012 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
omm62 1 Denunciar post Postado Agosto 17, 2012 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
Alaerte Gabriel 662 Denunciar post Postado Agosto 17, 2012 Você recebe alguma mensagem de erro, ou simplesmente tenta logar e nada acontece ? Compartilhar este post Link para o post Compartilhar em outros sites
mangakah 217 Denunciar post Postado Agosto 17, 2012 #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
Alaerte Gabriel 662 Denunciar post Postado Agosto 17, 2012 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
omm62 1 Denunciar post Postado Agosto 20, 2012 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
Alaerte Gabriel 662 Denunciar post Postado Agosto 20, 2012 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