Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Aula 8 - DAO

Ao adicionar um produto, aparece esse erro :

Warning: Creating default object from empty value in D:\xampp\htdocs\Loja\adiciona-produto.php on line 16

Fatal error: Call to undefined function insereProduto() in D:\xampp\htdocs\Loja\adiciona-produto.php on line 22

E ao listar produtos aparece este erro:

Fatal error: Call to undefined function listaProdutos() in D:\xampp\htdocs\Loja\produto-lista.php on line 8

Segue o adiciona-produto.php:

<?php 
require_once("cabecalho.php");         
require_once("banco-produto.php"); 
require_once("logica-usuario.php");
verificaUsuario();

$categoria = new Categoria;
$categoria->id = $_POST['categoria_id'];


if(array_key_exists('usado', $_POST)) {
    $usado = "true";
} else {
    $usado = "false";
}
$produto->usado = $usado;
$produto = new Produto($_POST['nome'],$_POST['preco'],$_POST['descricao'],$categoria,$usado);
if(insereProduto($conexao, $produto)) { ?>
    <p class="text-success">O produto <?= $produto->nome ?>, <?= $produto->getPreco()?>R$ foi adicionado.</p>
<?php } else {
    $msg = mysqli_error($conexao);
?>
    <p class="text-danger">O produto <?= $produto->nome ?> não foi adicionado: <?= $msg?></p>
<?php
}
?>

<?php include("rodape.php"); ?>

Segue o produtoDAO.php:

<?php
class ProdutoDAO {

    private $conexao;

    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->nome = $produto_atual['categoria_nome'];
        $produto = new Produto($produto_atual['nome'],$produto_atual['preco'],$produto_atual['descricao'],$categoria,$produto_atual['usado'] );
        $produto->id = $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->nome}', {$produto->getPreco()}, '{$produto->descricao}', {$produto->categoria->id}, {$produto->usado})";
        return mysqli_query($this->conexao, $query);
    }
    function alteraProduto(Produto $produto) {
         if(array_key_exists('usado', $_POST)) {
            $produto->usado = "true";
        } else {
            $produto->usado = "false";
        }
        $query = "update produtos set nome = '{$produto->nome}', preco = {$produto->getPreco()}, descricao = '{$produto->descricao}', categoria_id= {$produto->categoria_id}, usado = {$produto->usado} where id = '{$produto->id}'";
        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);
    }
}

Segue o produto-lista.php

<?php require_once("conecta.php");
require_once("cabecalho.php"); 
require_once("banco-produto.php");
  ?>

<table class="table table-striped table-bordered">
    <?php
        $produtos = listaProdutos();
        foreach($produtos as $produto) :
    ?>
    <tr>
        <td><?= $produto->nome ?></td>
        <td><?= $produto->getPreco() ?></td>
        <td><?= $produto->valorComDesconto(0.1) ?></td>
        <td><?= substr($produto->descricao, 0, 40) ?></td>
        <td><?= $produto->categoria->nome?></td>
        <td><a class="btn btn-primary" href="produto-altera-formulario.php?id=<?=$produto->id?>">alterar</a></td>
        <td>
            <form action="remove-produto.php" method="post">
                <input type="hidden" name="id" value="<?=$produto->id?>">
                <button class="btn btn-danger">remover</button>
            </form>
        </td>
    </tr>
    <?php
        endforeach
    ?>    
</table>        

<?php include("rodape.php"); ?>
1 resposta
solução!

1 - No arquivo adiciona-produto.php você chama as funções porém não faz a inclusão do mesmo a não sei que as mesmas estejam no arquivo banco-produto.php

2 - Na função insereProduto, você está enviando uma conexão e um produto porém a função só recebe um produto como parâmetro então tem que adicionar mais um parâmetro na função.