Ir para conteúdo

POWERED BY:

Arquivado

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

Lucas Gonçalves

[Resolvido] Erro passando valores para uma classe

Recommended Posts

[Ajuda]Erro passando valores para uma classe

Olá, galera.

 

 

Eu sou iniciante em php e estou tentando fazer minha primeira classe.

 

 

O problema é o seguinte, eu tenho uma classe que faz conexão com o banco de dados, seleciona a tabela e execulta uma query. Quando eu vou testa-lá online, ela da o seguinte erro;

 

 

Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'theinf'@'localhost' (using password: NO) in /home/theinf/public_html/novositefunny/classe/a/conexaoclasse.php on line 33

Access denied for user 'theinf'@'localhost' (using password: NO)

 

 

Eu já tentei mudar o usuário e a senha e continua a mesma coisa.

 

 

Eu notei que estava mostrando só theinf@localhost, este não é o usuário que eu estou passando para a classe.

 

 

O usuário é theinf_teste e ele tem senha sim.

 

 

Estou seguindo este tutorial para desenvolver a classe;

 

 

http://phpbrasil.com...-esta-comecando

 

 

Segue meus códigos no pastebin;

 

 

classe de conexão;

 

 

http://pastebin.com/hAckiJDb

 

 

arquivo php que passa os valores para a classe;

 

 

http://pastebin.com/2R85JAt0

 

 

Pagina de teste online;

 

http://www.funnypira...sse/a/teste.php

 

 

Agradeço desde já.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só algumas dicas pra começar:

 

Onde você tem:

 

function query() {	$qry = mysql_query($this->sql) or die ($this->erro(mysql_error())); 
	return $qry;
}

Você tem o getter para o $this->sql e não o utiliza. Faça da seguinte maneira:

 

 

function query() { 	$qry = mysql_query($this->getSQL) or die ($this->erro(mysql_error())); 
	return $qry;
}

E outra coisa: seu site está hospedado em algum lugar? Geralmente existem prefixos (no caso, seu login no site da empresa de hospedagem) que compõem os usuários e tabelas do banco.

 

Exemplo:

 

O usuário seria: daniel123

 

Passa a ser:

 

c3456_daniel123

 

Onde c3456 é meu login no cpanel.

 

Tente consultar as configurações do MySQL do cpanel.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela dica.

 

O site está hospedado em uma empresa sim, porém, as informações estão corretas.

 

eu criei um usuário com o nome teste, mas ele passa a ter o nome theinf_teste, eu tentei usar dos dois modos e não deu certo.

 

eu uso um outro usuário normalmente em paginas estruturadas sem classe e passagem de valores...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Percebi que o problema foi ao encontrar o '_' (underline).

 

Muitas vezes esse tipo de situação acontece, não sei porquê.

 

Tente, ao invés de setar o usuário com underline, setar com outro caractere, por exemplo uma vírgula.

 

E depois usar o str_replace() e substituir a vírgula pelo underline.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Como eu posso concatenar duas variáveis na hora de fazer a conexão?

 

com base na sua resposta, eu decidi colocar uma variável $deliminador na classe, ficou assim;

 

 

private $deliminador = "theinf_";

   function conectar()
   {
      $con = mysql_connect($this->host, $this->deliminador.$this->user, $this->pass) or die($this->erro(mysql_error()));
      return $con;
   }

porém, não deu certo... ele só pega a variável do deliminador, no caso, ele só pega "theinf_"

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, agora que você conseguiu, deixa eu te explicar.

 

Você estava, de forma indireta, tentando acessar atributos privados de fora da classe, e isso é impossível devido ao encapsulamento.

 

Eu recomendo que você continue a utilizar o encapsulamento, principalmente para os atributos de conexão com a base de dados, e utilize os getters e setters pra manipulá-los, mesmo de dentro do escopo da classe.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado pela explicação, Daniel.

 

Pelo o que estou vendo, usando classe o código fica muito mais limpo e fácil de entender.

 

Abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Lucas Gonçalves

 

Já que você está começando com OO, sugiro que acompanhe o Curso de PHP OOP. Vai te ajudar bastante. Para trabalhar com banco de dados, sugiro PDO ou MySQLi.

 

Carlos Eduardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não faz muito sentido da maneira como está. Assim talvez fique melhor.

 

$exec->set('db','theinf_site09');
//$exec->set('servidor','localhost');
$exec->set('host','localhost');
//$exec->set('usuario','theinf_teste');
$exec->set('user','theinf_teste');
//$exec->set('senha','teste');
$exec->set('pass','teste');

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.