3
respostas

Nao consigo puxar o combo de Categoria

A categoria nao vem mais com os dados no banco Alguem pode me ajudar?

Segue os codigos:

Altera Produto

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

//importando a classe produto
 require_once("class/Produto.php");
 require_once("class/Categoria.php");

//instanciando um Produto
$produto =  new Produto();
$categoria = new Categoria();

$categoria->setId($_POST['categoria_id']);

$produto->setId($_POST['id']);
$produto->setNome($_POST['nome']);
$produto->setPreco($_POST['preco']);
$produto->setDescricao($_POST['descricao']);

$produto->setCategoria($categoria);

if(array_key_exists('usado', $_POST)) {
    $produto->setUsado("true");
} else {
    $produto->setUsado("false");
}

if(alteraProduto($conexao, $produto)) { ?>
    <p class="text-success">O produto <?= $produto->getNome() ?>,
        <?= $produto->getPreco() ?> foi alterado.</p>
<?php } else {
    $msg = mysqli_error($conexao);
?>
    <p class="text-danger">O produto <?= $produto->getNome() ?>
    não foi alterado: <?= $msg?></p>
<?php
}
?>

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

Banco Categoria

<?php
require_once("conecta.php");
 require_once("class/Categoria.php");            

function listaCategorias($conexao) {

    $categorias = array();
    $query = "select * from categoria";
    $resultado = mysqli_query($conexao, $query);
    while($categoria_array = mysqli_fetch_assoc($resultado)) {

        $categoria = new Categoria();
        $categoria->setId($categoria_array['id']);
        $categoria->setNome($categoria_array['nome']);


        array_push($categorias, $categoria);
    }
    return $categorias;
}

Banco Produto

<?php
require_once("conecta.php");
 require_once("class/Produto.php");
  require_once("class/Categoria.php");

function listaProdutos($conexao) {
    $produtos = array();
    $resultado = mysqli_query($conexao, "select p.*,c.nome as categoria_nome from produtos as p join categoria as c on c.id=p.categoria_id");
    // essa vaiavel percorre no banco e paga os valores do produto
    while($produto_array = mysqli_fetch_assoc($resultado)) {

        $categoria = new Categoria();
        $categoria->setNome($produto_array['categoria_nome']);

        // instancia um produto
        // depois produto recebe os valores que percorreu no array
        $produto = new Produto();
        $produto->setId($produto_array['id']);

        $produto ->setNome($produto_array['nome']);
        $produto ->setPreco($produto_array['preco']);
        $produto ->setDescricao($produto_array['descricao']);
        $produto ->setCategoria($categoria);
        $produto ->setUsado($produto_array['usado']);


        array_push($produtos, $produto);
    }
    return $produtos;
}

function insereProduto($conexao, 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($conexao, $query);
}
function alteraProduto($conexao, 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($conexao, $query);
}


function buscaProduto($conexao, $id) {
    $query = "select * from produtos where id = {$id}";
    $resultado = mysqli_query($conexao, $query);

    $produto_buscado = mysqli_fetch_assoc($resultado);


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

    $produto = new Produto();
    $produto->setId($produto_buscado['id']);
    $produto->setNome($produto_buscado['nome']);
    $produto->setDescricao($produto_buscado['descricao']);
    $produto->setCategoria($categoria);
    $produto->setPreco($produto_buscado['preco']);
    $produto->setUsado($produto_buscado['usado']);

    return $produto;
}

function removeProduto($conexao, $id) {
    $query = "delete from produtos where id = {$id}";
    return
3 respostas

Oi Daniel, tudo bom?

Acho que ta faltando o JOIN no seu select:

function buscaProduto($conexao, $id) {
    $query = "select * from produtos where id = {$id}";
    $resultado = mysqli_query($conexao, $query);

    $produto_buscado = mysqli_fetch_assoc($resultado);


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

    $produto = new Produto();
    $produto->setId($produto_buscado['id']);
    $produto->setNome($produto_buscado['nome']);
    $produto->setDescricao($produto_buscado['descricao']);
    $produto->setCategoria($categoria);
    $produto->setPreco($produto_buscado['preco']);
    $produto->setUsado($produto_buscado['usado']);

    return $produto;
}

Tenta algo como:

"select p.*, c.nome as categoria_nome, c.id as categoria_id 
        from produtos as p join categorias as c on c.id = p.categoria_id  where id = {$id}";

Abraço

Em busca Produto?

No modelo do professor a busca da query esta desse jeito mesmo

Opa, realmente no modelo do banco o produto tem o id da categoria como coluna sua base possui essa coluna? Compartilha com a gente o retorno do banco de dados, com um var_dump?Algo como:


function buscaProduto($conexao, $id) {
    $query = "select * from produtos where id = {$id}";
    $resultado = mysqli_query($conexao, $query);

    $produto_buscado = mysqli_fetch_assoc($resultado);

var_dump($produto_buscado);
die();

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

    $produto = new Produto();
    $produto->setId($produto_buscado['id']);
    $produto->setNome($produto_buscado['nome']);
    $produto->setDescricao($produto_buscado['descricao']);
    $produto->setCategoria($categoria);
    $produto->setPreco($produto_buscado['preco']);
    $produto->setUsado($produto_buscado['usado']);

    return $produto;
}

Assim, a gente consegue ver certinho o que está vindo do banco =)

Aguardo retorno.

Abraço

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software