Solucionado (ver solução)
Solucionado
(ver solução)
5
respostas

Não estou conseguindo alterar Produtos

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.

5 respostas

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 = '' ...".

solução!

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!