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

Erro : Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in

Esta é a função, exatamente como no vídeo, não sei o que pode estar errado

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

Oi Nikolai, tudo bem? O que pode estar acontecendo é que o ID não existe ou está sendo convertido para um id que não existe (no caso 0 ou null) se o valor da variavel id vier vazio.

Verifique se o valor passado para a variavel id está indo corretamente.

Abraço =)

Oi Nikolaie, tudo bom? Você pode verificar qual id está sendo passado para sua query, o que sua query está retornando e também a conexão só para garantir:

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

Assim podemos analisar melhor o problema para te ajudar =)

Opa, eai pessoal tudo tranquilo, Aqui vai o resultado da função André

object(mysqli)#1 (19) {
  ["affected_rows"]=>
  int(0)
  ["client_info"]=>
  string(79) "mysqlnd 5.0.12-dev - 20150407 - $Id: 241ae00989d1995ffcbbf63d579943635faf9972 $"
  ["client_version"]=>
  int(50012)
  ["connect_errno"]=>
  int(0)
  ["connect_error"]=>
  NULL
  ["errno"]=>
  int(0)
  ["error"]=>
  string(0) ""
  ["error_list"]=>
  array(0) {
  }
  ["field_count"]=>
  int(0)
  ["host_info"]=>
  string(20) "localhost via TCP/IP"
  ["info"]=>
  NULL
  ["insert_id"]=>
  int(0)
  ["server_info"]=>
  string(21) "5.5.5-10.1.13-MariaDB"
  ["server_version"]=>
  int(50505)
  ["stat"]=>
  string(130) "Uptime: 107  Threads: 1  Questions: 12  Slow queries: 0  Opens: 2  Flush tables: 1  Open tables: 13  Queries per second avg: 0.112"
  ["sqlstate"]=>
  string(5) "00000"
  ["protocol_version"]=>
  int(10)
  ["thread_id"]=>
  int(7)
  ["warning_count"]=>
  int(0)
}
string(52) "select * from produtos where id = "
bool(false)

Não faço a minima ideia do que pode estar acontecendo, por que eu revi os vídeos e meu código está igualzinho ao que foi passado nos vídeos xD

Está vendo ali Nikolai, a string da consulta está sendo gerada sem o id. verifica se o id está sendo passado corretamente.

string(52) "select * from produtos where id = "

O que eu devo fazer?xD

Essas são minhas funções...Se ajudar de algo

<?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 $resultadoDaInsercao = 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);
}

Como os colegas já pediram, verifique se o Id foi passado. Até agora você não deu esse retorno. Da um dump em $id veja se tem valor.

Dê um dump em $conexao. Se ela não existe nada vai funcionar.

a $conexao é essa

<?php 
    $conexao = mysqli_connect("localhost", "root", "", "loja");

Poderiam me dizer passo a passo o que e onde devo fazer essas verificações? Estou perdido kk

Esse é um print da área de produtos : https://snag.gy/5ejVPE.jpg

Nikolai, o resultado da função que o André escreveu acima, deveria te dar três saídas e você só postou a primeira delas aqui. Poste as outras duas saídas pra gente ver o que pode estar acontecendo.

Mas já posso chutar que pela saída que você já postou, o id do produto são está sendo passado para a função buscaProduto.

Dessa forma, você precisa ver onde está usando a função buscaProduto e ver se você está fornecendo o id do produto. O nome da variavel pode estar errado ou qualquer outro detalhe pode fazer com que a aplicação pare de funcionar.

Eu ja havia postado as funções logo acima, mas vou postar este de novo aqui:

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

Inseri exatamente como esta no vídeo.

As saidas que eu postei, foi tudo o que apareceu na tela para mim, https://snag.gy/cDv3rt.jpg ( print)

solução!

Opa, pelo o que eu percebi no seu ultimo print, sua conexão está ok. Verifica no seu produto-altera-formulario.php o que você está recebendo em:

$id = $_GET['id'];

Se estiver vazio, verifique no seu produto-lista.php se o link para alterar está corret:

<td>
<a class="btn btn-primary" href="produto-altera-formulario.php?id=<?=$produto['id']?>">alterar</a>
</td>

Certifique-se que a tag <?= está sendo utilizada para passar o $produto['id'] ou então utilize a tag <?php com um echo:

<?php echo $produto['id'];?>

Qualquer dificuldade, compartilhe com a gente seu produto-lista.php e seu produto-altera-formulario.php pra gente poder analisar melhor =)

Funcionou André :D kakak, estava faltando um "=" ali no <?=$produto['id']?>

O "=" é abreviação pra echo?, não entendi muito bem esses shortcutes.

Isso mesmo Nikolai!

o <?= é a mesma coisa que o <?php echo, apenas forma uma de escrever menos =)