4
respostas

Busca Produto

Estou com esse erro quando vou alterar o produto:

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\Curso\banco-produto.php on line 58 O Produto , não foi alterado!: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' descricao = '', categoria_id= , u' at line 2


A minha função da linha 58 é a buscaProduto. Nessa função não fiz nenhuma alteração quanto a orientação por objetos. Segue minha função

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


Segue meu código da página altera-produto.php, todas as outras estão iguais.

<?php require_once 'cabecalho.php';?> <?php require_once 'conecta.php';?> <?php require_once 'banco-produto.php'; ?> <?php require_once 'logica-usuario.php'; ?> <?php require_once 'class\categoria.php'; ?> <?php

verificaLogin(); $id = $_GET['id']; $produto_buscado = buscaProduto($conexao, $id); $produto = new Produto(); $categoria = new Categoria();

$categoria->id = $produto_buscado['categoria_id']; $produto->id = $produto_buscado['id']; $produto->nome = $produto_buscado["nome"]; $produto->preco = $produto_buscado["preco"]; $produto->descricao = $produto_buscado["descricao"]; $produto->categoria;

if(array_key_exists('usado', $_POST)){ $usado = 'true';} else { $usado = 'false';

} $produto->usado = $usado;

if(alteraProduto($conexao, $produto)) { ?>

O Produto <?= $produto->nome; ?>, <?= $produto->preco; ?> alterado com sucesso!

<?php } else { ?> <?php $msg = mysqli_error($conexao); ?>

O Produto <?= $produto->nome; ?>, <?= $produto->preco; ?> não foi alterado!: <?= $msg?>

<?php

}

mysqli_close($conexao);

?>

<?php require_once 'rodape.php';?>

4 respostas

E aí, Vinicius! Blz!?

Você enviou o código da página altera-produto.php. Porém o erro está acontecendo no arquivo banco-produto.php.

Você pode mandar a parte do código que tem o SQL citado no erro?

descricao = '', categoria_id= , u

Att. Renato.

Essa é a função que está dando o erro:

function buscaProduto($conexao, $id) { $query = "SELECT * FROM 'produtos' WHERE id = {$id}"; $resultado = mysqli_query($conexao, $query); return mysqli_fetch_assoc($resultado); }


Segue o resto do código:

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

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

function removeProduto($conexao, $id){

$query = "DELETE FROM 'produtos' WHERE id = {$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); }

Segue o link do projeto completo.

https://drive.google.com/file/d/0ByUeNO7Id8ZENnJDYXVFMGZEblk/view?usp=sharing

E aí!

No arquivo Curso\banco-produto.php, dentro da função alteraProduto, a query está tentando pegar o id da categoria assim:

{$produto->categoria->getId($produto)}

Porém a classe categoria não possui um método getId($produto), apenas o getId().

Então, acredito que o correto seja:

{$produto->categoria->getId()}

Caso não seja esse o problema, você ainda pode colocar um var_dump($produto), na função alteraProduto para tentar ver quais valores estão sendo passados incorretamente.

Até mais!