Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

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 =)