Boa tarde! Criei a classe "ProdutoDAO" conforme instruído, mas a alteração de Produto não está funcionando corretamente. Aparece a mensagem dizendo que o produto foi alterado, mas quando é feita a listagem, aparecem os dados anteriores.
Boa tarde! Criei a classe "ProdutoDAO" conforme instruído, mas a alteração de Produto não está funcionando corretamente. Aparece a mensagem dizendo que o produto foi alterado, mas quando é feita a listagem, aparecem os dados anteriores.
Segue o código:
<?php
require_once("conecta.php");
class ProdutoDAO
{
function __construct($conexao)
{
$this->conexao = $conexao;
}
function listaProdutos()
{
$produtos = array();
$resultado = mysqli_query($this->conexao,
"select p.*, c.nome as categoria_nome from produtos as p join categorias as c on c.id = p.categoria_id");
while($produto_atual = mysqli_fetch_assoc($resultado))
{
$categoria = new Categoria();
$categoria->setNome($produto_atual['categoria_nome']);
$produto = new Produto(
$produto_atual['nome'],
$produto_atual['preco'],
$produto_atual['descricao'],
$categoria,
$produto_atual['usado']
);
$produto->setId($produto_atual['id']);
array_push($produtos, $produto);
}
return $produtos;
}
function insereProduto(Produto $produto)
{
$query = "insert into produtos (nome, preco, descricao, categoria_id, usado)
values (
'{$produto->getNome()}',
'{$produto->getPreco()}',
'{$produto->getDescricao()}',
'{$produto->getCategoria()->getId()}',
'{$produto->getUsado()}'
)";
return mysqli_query($this->conexao, $query);
}
function alteraProduto(Produto $produto)
{
$query = "update produtos set
nome = '{$produto->getNome()}',
preco = {$produto->getPreco()},
descricao = '{$produto->getDescricao()}',
categoria_id= {$produto->getCategoria()->getId()},
usado = '{$produto->getUsado()}'
where id = '{$produto->getId()}'";
return mysqli_query($this->conexao, $query);
}
function buscaProduto($id)
{
$query = "select * from produtos where id = {$id}";
$resultado = mysqli_query($this->conexao, $query);
return mysqli_fetch_assoc($resultado);
}
function removeProduto($id)
{
$query = "delete from produtos where id = {$id}";
return mysqli_query($this->conexao, $query);
}
}
Oi Jonas, tudo bom?
Verifica pra mim o que está sendo retornado pela função mysqli_query que é executada no seu método alteraProduto. Algo como:
function alteraProduto(Produto $produto)
{
$query = "update produtos set
nome = '{$produto->getNome()}',
preco = {$produto->getPreco()},
descricao = '{$produto->getDescricao()}',
categoria_id= {$produto->getCategoria()->getId()},
usado = '{$produto->getUsado()}'
where id = '{$produto->getId()}'";
// verifica a query que estamos executando
var_dump($query);
// verfica o que está sendo retornado pela função mysqli_query
var_dump(mysqli_query($this->conexao, $query));
// verifica se o mysqli aponta algum erro
var_dump(mysqli_error($this->conexao));
die();
return mysqli_query($this->conexao, $query);
}
Compartilha aqui com a gente =)
Aguardo retorno.
Abraço!
Obrigado pela resposta André!
Segue conforme solicitado:
string(157) "update produtos set nome = 'usado', preco = 100, descricao = ' usado ', categoria_id= 3, usado = 'false' where id = ''"
bool(true)
string(0) ""
O problema está aqui: " ... where id = '' ...".
Parece que nossso produto está sem id.
Verifica no formulario de alteração de produto se a gente ta passando esse id pro valor do input hidden. Algo como:
<input type="hidden" name="id' value="<?= $produto->getId()"/>
Se quiser, compartilha com a gente o código do formulario, assim a gente consegue discutir melhor o problema =)
Abraço
Verifiquei! Estavam faltando os parênteses no "getId". Obrigado!