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

Erro ao alterar produto

Na segunda aula do primeiro módulo de php orientado a objetos, tive um problema quando vou alterar o produto na lista de produtos. Diz que o erro vem da página produtos, segue o erro..


( ! ) Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\wamp\www\cursoAluraPHP\bancoProdutos.php on line 43 Call Stack

Time Memory Function Location

1 0.0022 137088 {main}( ) ..\alterarProduto.php:0 2 0.0161 160832 buscaProduto( ) ..\alterarProduto.php:8 3 0.0167 161016 mysqli_fetch_assoc ( ) ..\bancoProdutos.php:43


Vi e revi a aula e não consegui solucionar, alguém pode me ajudar? Segue o código da minha página Bancoprodutos.php...

<?php

require_once("conecta.php"); require_once("classes/produto.php"); require_once("classes/categoria.php");

function listaProdutos($conexao){ $produtos = array(); $resultado = mysqli_query($conexao, "select p.*,c.nome as categoria_nome from produtos as p join categorias as c on c.id=p.categoria_id");

while($produto_array = mysqli_fetch_assoc($resultado)){

$produto = new Produto(); $categoria = new Categoria(); $categoria->nome = $produto_array['categoria_nome'];

$produto->nome = $produto_array['nome']; $produto->preco = $produto_array['preco']; $produto->descricao = $produto_array['descricao']; $produto->categoria = $categoria; $produto->usado = $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->nome}', {$produto->preco}, '{$produto->descricao}', {$produto->categoria->id}, {$produto->usado})"; return mysqli_query($conexao, $query); }

function alteraProduto($conexao, Produto $produto) { $query = "update produtos set nome= '{$produto->nome}', preco = {$produto->preco}, descricao= '{$produto->descricao}', categoria_id= {$produto->categoria->id}, usado = {$produto->usado} where id = '{$produto->id}'"; return mysqli_query($conexao, $query); }

function buscaProduto($conexao, $id) { $query = "select * from produtos where id = {$id}"; $resultado = mysqli_query($conexao, $query); $produto = mysqli_fetch_assoc($resultado); (ESTA É A LINHA 43)

return $produto; }

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


Antes desta aula, a linha 43 tinha uma sintaxe diferente, que era essa...

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

Após a aula, baixei o arquivo pronto e atualizei, não entendi porque estava diferente no arquivo de download disponibilizado, pois até então não havíamos feito essa alteração na aula, decidi deixar como o arquivo de que baixei, porém não resolveu também. Agradeço a quem puder me ajudar.

5 respostas

Oi Francis, eu estou tentando entender o código mas a formatação não está ajudando, você poderia editar e colocar o código dentro do espaço abaixo

código aqui

facilita muito a leitura.

Antes do while adiciona o seguinte trecho para ver o que é impresso no caso de erro.

if($resultado === FALSE) {
    // Consulta falhou, parar aqui 
    die(mysqli_error());
}

Espero que esse trecho de uma pista.

Olá Joel, obrigado pela ajuda.... segue o código

<?php

require_once("conecta.php"); require_once("classes/produto.php"); require_once("classes/categoria.php");

function listaProdutos($conexao){ $produtos = array(); $resultado = mysqli_query($conexao, "select p.*,c.nome as categoria_nome from produtos as p join categorias as c on c.id=p.categoria_id");

while($produto_array = mysqli_fetch_assoc($resultado)){

$produto = new Produto(); $categoria = new Categoria(); $categoria->nome = $produto_array['categoria_nome'];

$produto->nome = $produto_array['nome']; $produto->preco = $produto_array['preco']; $produto->descricao = $produto_array['descricao']; $produto->categoria = $categoria; $produto->usado = $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->nome}', {$produto->preco}, '{$produto->descricao}', {$produto->categoria->id}, {$produto->usado})"; return mysqli_query($conexao, $query); }

function alteraProduto($conexao, Produto $produto) { $query = "update produtos set nome= '{$produto->nome}', preco = {$produto->preco}, descricao= '{$produto->descricao}', categoria_id= {$produto->categoria->id}, usado = {$produto->usado} where id = '{$produto->id}'"; return mysqli_query($conexao, $query); }

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

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

solução!

Oi Francis, coloca o trecho que eu falei mais acima, talvez ele de uma dica do problema.

Uma outra dica é imprimir a query depois que entrar as variáveis, assim você pode copiar e colar no seu mysql para ver se a quero tem algum problema

echo $query

Consegui, obrigado Joel

:)

Qualquer problema só colocar aqui no fórum que sempre alguém vai tentar ajudar

bons estudos

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