Ir para conteúdo

POWERED BY:

Arquivado

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

brunosk2

classe de conexão

Recommended Posts

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

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

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

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

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

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

$con é uma variavel e não uma propriedade...

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

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

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

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

×

Informação importante

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