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

Erro no formulário - Warning: mysqli_fetch_assoc()

Quando tento alterar as informações do formulário apresenta o seguinte erro

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\xampp\htdocs\loja\banco-produto.php on line 27

não estou identificando o que está errado no código. Segue abaixo :

produto-altera-formulario.php

<?php include("cabecalho.php");
include("conecta.php");
include("banco-categoria.php");
include("banco-produto.php");

$id = $_GET['id'];
$produto = buscaProduto($conexao, $id);
$categorias = listaCategorias($conexao);
?>

<h1>Alterando produto</h1>

<form action="altera-produto.php" method="post">
    <table class="table">
        <tr>
            <td>
                Nome: 
            </td>    
            <td>
                <input class="form-control" type="text" name="nome" value="<?=$produto['nome']?>">
            </td>

        </tr>

        <tr>
            <td>
                Preco: 
            </td>
            <td>
                <input class="form-control" type="number" name="preco">
            </td>
        </tr>

        <tr>
            <td>
                Descrição: 
            </td>
            <td>
                <textarea class="form-control" name="descricao"></textarea>
            </td>
        </tr>

        <tr>
            <td><input type="checkbox" name="usado" value="true"> Usado </td>

        </tr>

        <tr>
            <td>Categoria</td>
            <td>
                <select name="categoria_id" class="form-control">
                <?php foreach($categorias as $categorias): ?>
        <option value="<?=$categorias['id']?>">
                <?=$categorias['nome']?>
            </option>
                <?php endforeach?>
                </select>
            </td>

        </tr>

        <tr>
            <td>
                <button class="btn btn-primary" type="submit">Alterar</button>
            </td>

        </tr>
    </table>
</form>

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

banco-produto.php

<?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 = mysqli_fetch_assoc($resultado)) {
            array_push($produtos, $produto);
    }
    return $produtos;
}


 function insereProduto($conexao, $nome, $preco, $descricao, $categoria_id, $usado){
    $query = "insert into produtos (nome, preco, descricao, categoria_id, usado) values ('{$nome}', '{$preco}', '{$descricao}', '{$categoria_id}','{usado}')";
    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);
}
3 respostas

Jean, bom dia!

Esse erro está ocorrendo pois na sua consulta sql está retornando um erro

$resultado = mysqli_query($conexao, $query);

Faça o seguinte teste, verifique se o retorno da consulta é igual a falso, ou seja, não houve retorno, aplicando o código abaixo:

if ($resultado === FALSE) {
    //Código retornou um erro
    die(mysqli_error($conexao));
}else {
    return mysqli_fetch_assoc($resultado)
}

Caso o código não retornar os resultados esperados, verifique se o nome da tabela e dos campos estão corretos na query

Bom dia Jean!

No arquivo produto-altera-formulario.php, altere a linha 6:

$id = $_GET['id'];

Troque para $_POST:

$id = $_POST['id'];

O que está acontecendo é que não está sendo atribuído valor à variável $id, pois a superglobal $_GET está vazia, já que o formulário está utilizando o método post.

solução!

Consegui resolver, meu $id = $_GET['id'] estava pegando o numero do id mais um sinal de aspas por um erro de digitação minha na pagina do formulário, depois que corrigi funcionou.

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