brunosk2 0 Denunciar post Postado Outubro 4, 2012 Bom dia, estou começando a estudar PHP orientado a objetos e empaquei nessa parte. Quero listar alguns produtos do banco, fiz uma classe Produtos que tem o metodo PopulaProduto, que trará os produtos, e na classe Conexao está a conexão do banco. Primeiro, está certa fazer desta forma? Segundo, estou tendo esses erros na tela: Notice: Undefined variable: conexao in C:\xampp\htdocs\loja\classes\produto.class.php on line 8 Notice: Undefined variable: con in C:\xampp\htdocs\loja\classes\produto.class.php on line 8 Notice: Trying to get property of non-object in C:\xampp\htdocs\loja\classes\produto.class.php on line 8 Warning: mysql_query() expects parameter 2 to be resource, null given in C:\xampp\htdocs\loja\classes\produto.class.php on line 8 index.php <?php require_once("classes/produto.class.php"); $produto = new Produto(); echo $produto->PopulaProduto(); ?> produto.class.php <?php require_once("conexao.class.php"); $conexao = new Conexao(); class Produto{ function PopulaProduto(){ $SQL = "SELECT nome, valor FROM produtos WHERE destaque = 1"; $resultado = mysql_query($SQL, $conexao->$con); } } ?> conexao.class.php <?php class Conexao{ function ConectaBancoLoja(){ $con = mysql_connect("localhost", "root"); mysql_select_db("loja", $con); } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Tywin 7 Denunciar post Postado Outubro 4, 2012 Na linha: $resultado = mysql_query($SQL, $conexao->$con); Não seria... $resultado = mysql_query($SQL, $conexao->con); # Sem o $ aqui no CON. ? Compartilhar este post Link para o post Compartilhar em outros sites
brunosk2 0 Denunciar post Postado Outubro 4, 2012 Troquei onde voce falou mas deu esses erros: Notice: Undefined variable: conexao in C:\xampp\htdocs\loja\classes\produto.class.php on line 12 Notice: Trying to get property of non-object in C:\xampp\htdocs\loja\classes\produto.class.php on line 12 Warning: mysql_query() expects parameter 2 to be resource, null given in C:\xampp\htdocs\loja\classes\produto.class.php on line 12 Warning: mysql_fetch_object(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\loja\classes\produto.class.php on line 14 Classe Produtos: <?php require_once("conexao.class.php"); $conexao = new Conexao(); class Produto{ function PopulaProduto(){ //$con = mysql_connect("localhost", "root"); //mysql_select_db("loja", $con); $SQL = "SELECT produtos.id, produtos.nome, produtos.valor, categorias.nome_categoria, produto_imagens.img_principal, produto_imagens.id_produto FROM produtos INNER JOIN categorias ON produtos.id_categoria = categorias.id INNER JOIN produto_imagens ON produtos.id = produto_imagens.id_produto WHERE produtos.destaque = 1"; $resultado = mysql_query($SQL, $conexao->con); while($row = mysql_fetch_object($resultado)){ echo "<a href='produto.php?id=$row->id'>$row->nome</a><br />"; } } } ?> OBS: A parte comentada é como eu estou fazendo a conexão enquanto não resolvo esse problema. Compartilhar este post Link para o post Compartilhar em outros sites
Tywin 7 Denunciar post Postado Outubro 4, 2012 Como está a página de conexão ? Poste ela. Compartilhar este post Link para o post Compartilhar em outros sites
brunosk2 0 Denunciar post Postado Outubro 4, 2012 Como assim a página de conexão? Quer dizer a classe? <?php class Conexao{ function ConectaBancoLoja(){ $con = mysql_connect("localhost", "root"); mysql_select_db("loja", $con); } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
espiculo 1 Denunciar post Postado Outubro 4, 2012 Como assim a página de conexão? Quer dizer a classe? <?php class Conexao{ function ConectaBancoLoja(){ $con = mysql_connect("localhost", "root"); mysql_select_db("loja", $con); } } ?> Olá, Dica: Melhor você começar com PDO. No futuro vai ser "mais" útio para você. :D http://www.php.net/manual/en/intro.pdo.php Compartilhar este post Link para o post Compartilhar em outros sites
Tywin 7 Denunciar post Postado Outubro 4, 2012 Ao chamar o arquivo de conexão use Include() ou Require() Require_Once() não. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Jacinto 74 Denunciar post Postado Outubro 4, 2012 Você não executou a function ConectaBancoLoja() no produto.class.php. Conecte com um __construct, assim automaticamente ao chamar a class Conexão, ela se conectará com o banco: <?php class Conexao{ function __construct(){ $con = mysql_connect("localhost", "root"); mysql_select_db("loja", $con); } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
shini 318 Denunciar post Postado Outubro 4, 2012 $con é uma variavel e não uma propriedade... Compartilhar este post Link para o post Compartilhar em outros sites
brunosk2 0 Denunciar post Postado Outubro 6, 2012 Estou usando o construct na classe conexão: <?php class Conexao{ function __construct(){ $con = mysql_connect("localhost", "root"); mysql_select_db("loja", $con); } } ?> Mas agora como eu faço a conexão na classe produtos? <?php require_once("conexao.class.php"); $conexao = new Conexao(); class Produto{ function PopulaProduto(){ $con = mysql_connect("localhost", "root"); mysql_select_db("loja", $con); $SQL = "SELECT produtos.id, produtos.nome, produtos.valor, categorias.nome_categoria, produto_imagens.img_principal, produto_imagens.id_produto FROM produtos INNER JOIN categorias ON produtos.id_categoria = categorias.id INNER JOIN produto_imagens ON produtos.id = produto_imagens.id_produto WHERE produtos.destaque = 1"; $resultado = mysql_query($SQL, $con); while($row = mysql_fetch_object($resultado)){ echo "<a href='produto.php?id=$row->id'>$row->nome</a><br />"; } } } ?> Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Jacinto 74 Denunciar post Postado Outubro 6, 2012 Quado você escreveu isso: $conexao = new Conexao(); automaticamente já conectou ao banco. Compartilhar este post Link para o post Compartilhar em outros sites
brunosk2 0 Denunciar post Postado Outubro 6, 2012 Quado você escreveu isso: $conexao = new Conexao(); automaticamente já conectou ao banco. OK, mas então o que eu ponho nessa parte do código(classe produtos): $resultado = mysql_query($SQL, $con); A variável $con está na classe conexao. Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Jacinto 74 Denunciar post Postado Outubro 6, 2012 Então crie uma variável pública para $con: <?php class Conexao{ public $con; function __construct(){ $this->con = mysql_connect("localhost", "root"); mysql_select_db("loja", $this->con); } } ?> depois pra usar: $conexao = new Conexao(); $con = $conexao->con; Compartilhar este post Link para o post Compartilhar em outros sites
brunosk2 0 Denunciar post Postado Outubro 6, 2012 Vlw cara, agora funcionou, mas eu tive que instanciar a classe e setar a variavel dentro do método PopulaProduto, isso está certo? Ou existe uma maneira mais "correta"? (Como comentei antes estou estudando PHP então não sei se estou fazendo as coisas da maneira mais correta) Na classe produtos haverá vários métodos que fazem requisição ao banco, eu terei que instanciar a classe em cada método? Compartilhar este post Link para o post Compartilhar em outros sites
Gabriel Jacinto 74 Denunciar post Postado Outubro 6, 2012 Você pode estender a classe conexão: class Produtos extends Conexao{ } Quando você quiser utilizar a variável $con, pra classe toda você pode colocar: $this->con Compartilhar este post Link para o post Compartilhar em outros sites