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

Dados não aparecem no formulário de alteração.

Os dados não estão aparecendo no formulário de edição, nesta migração de código para OO, posso ter me confundido e esquecido de alguma coisa, alguém poderia me dar um help?

Este é meu formulário de edição, lembrando que eu preferi não juntar os forms como foi feito na aula, porém fiz o exercício em outro doc:

<?php 
require_once("header.php");
require_once("bd.php");
require_once("banco-categoria.php");
require_once("banco-produtos.php");


$id = $_GET['id'];
$produto = buscaProduto($conexao, $id);
$categorias = listarCategorias($conexao);
$produto = new Produto();
$selecao_usado = $produto->usado ? "checked='checked'" : "";
$produto->usado = $selecao_usado;

?>
        <form action="altera-produto.php" method="POST">
            <input type="hidden" name="id" value="<?= $produto->id ?>">
                    <h1 class="text-left">Alteração de Produto</h1><hr/>
                    <div class="form-group">
                        <label class="label-left">Nome do Produto:</label>
                        <input type="text" class="form-control" name="nome" value="<?= $produto->nome ?>">
                    </div>
                    <div class="form-group">
                        <label class="label-left">Valor do produto:</label>
                        <input type="number" class="form-control" name="preco" value="<?= $produto->preco ?>">
                    </div>
                    <div class="form-group">
                        <label class="label-left">Descrição:</label>
                        <textarea class="form-control" name="descricao"><?= $produto->descricao ?></textarea>
                    </div>
                    <div class="form-group">
                        <label>Selecione a Categoria:</label>
                        <select class="form-control" name="categoria_id">
                        <?php foreach ($categorias as $categoria) { 
                        $essaEhAcategoria = $produto->categoria->id == $categoria->id;
                        $selecao = $essaEhAcategoria ? "selected='selected'" : "";
                        ?>
                            <option value="<?= $categoria->id ?>" <?= $produto->usado?>><?= $categoria->nome ?></option>
                        <?php }?>
                        </select>
                    </div>    
                    <div class="form-group">
                    <input type="checkbox" <?=$produto->usado?> name="usado" value="true"> Produto usado.
                    </div>
                    <div class="form-group">
                    <button type="submit" class="col-md-2 btn btn-primary">Salvar Alterações</button>
                    </div>    
        </form>
<?php include("footer.php");?>

Esta é a função buscaProduto:

function buscaProduto($conexao, $id){

            $query = "SELECT * FROM produtos where id = {$id}";
            $resultado = mysqli_query($conexao, $query);
            return mysqli_fetch_assoc($resultado);
            $produto_buscado = mysqli_fetch_assoc($resultado);

            $categoria = new Categoria();
            $categoria->id = $produto_buscado['categoria_id'];

            $produto = new Produto();
            $produto->id = $produto_buscado['id'];
            $produto->nome = $produto_buscado['nome'];
            $produto->descricao = $produto_buscado['descricao'];
            $produto->categoria = $categoria;
            $produto->preco = $produto_buscado['preco'];
            $produto->usado = $produto_buscado['usado'];

                return $produto;

        }
2 respostas

Pelo que eu vi, supondo que você esteja passando o ID do produto pela URL, o problema está nesta parte do código

<?php 
require_once("header.php");
require_once("bd.php");
require_once("banco-categoria.php");
require_once("banco-produtos.php");


$id = $_GET['id'];
$produto = buscaProduto($conexao, $id);
$categorias = listarCategorias($conexao);
$produto = new Produto(); //ESSA LINHA NAO PRECISA!

//Restante do código omitido

A função buscaProduto retorna um objeto da classe produto com os dados do produto (de acordo com o ID).

Depois de fazer a busca, você está criando um novo produto vazio ($produto = new Produto()), por isso que está aparecendo em branco o seu formulário de edição

solução!

Olá Daniel, localizei o erro, o primeiro foi oque você indicou, estava criando a classe novamente sem necessidade, pois ela já estava sendo retornada e o outro problema estava na função buscaProduto, eu estava dando um return antes de armazenar os dados na classe, como você pode ver abaixo:

function buscaProduto($conexao, $id){

            $query = "SELECT * FROM produtos where id = {$id}";
            $resultado = mysqli_query($conexao, $query);
            return mysqli_fetch_assoc($resultado); //Linha que foi removida.
            $produto_buscado = mysqli_fetch_assoc($resultado);

            $categoria = new Categoria();
            $categoria->id = $produto_buscado['categoria_id'];

            $produto = new Produto();
            $produto->id = $produto_buscado['id'];
            $produto->nome = $produto_buscado['nome'];
            $produto->descricao = $produto_buscado['descricao'];
            $produto->categoria = $categoria;
            $produto->preco = $produto_buscado['preco'];
            $produto->usado = $produto_buscado['usado'];

                return $produto;

        }