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

Comportamento estranho do bando de dados

Olá a todos.

Eu subi a minha aplicação para o servidor, como indicado na explicação. Até tudo sem problemas.

Todas as funções estão funcionais tudo funciona... que dizer tudo funciona com exceção da lista de produtos que ficou com um comportamento peculiar...

Em primeiro lugar, a formatação da tabela ficou diferente do original do localhost, e em segundo lugar, por algum motivo, o primeiro item não aparece na lista, só aparece a partir do segundo em diante. O item até consta na tabela sql no phpAdmin, mas não aparece na lista.

No meu localhost não teve esse problema e no código está tudo certo, alguém poderia dar um insight sobre o que poderia está causando esse problema?

Valeu a todos!

6 respostas

Oi Bruno, só pela descrição não consigo enxergar nenhum motivo.. já que vc ta rodando o mesmo código que tinha na sua máquina local. Acho que o melhor é vc postar o código para a gente analisar...

Opa, desculpa a demora para responder, estava entretido com as festas natalinas. Bora lá.

esse é o meu listar-produtos.php:

<?php include('cabecalho.php');
 include('conecta.php');
 include('banco-produtos.php');

if(array_key_exists('deletado', $_GET) && $_GET['deletado'] == true){ ?>
  <p class="alert-success">
    Produto apagado com sucesso.
  </p>

<?php
  }
 ?>

<table class="table table-striped table-bordered ">

<?php

$produtos = listarProdutos($conexao);
mysqli_close($conexao);
foreach ($produtos as $produto) :
?>
  <tr>
    <td><?= $produto['nome'] ?></td>
    <td><?= $produto['preco'] ?></td>
    <td><?= substr($produto['descricao'], 0, 40)?></td>
    <td><?= $produto['categoria_nome']?></td>
    <td>
      <form action="produto-altera-pormulario.php" method="post">
        <input type="hidden" name="id" value="<?=$produto['id']?>" />
        <button class="btn btn-primary">Alterar</button>
      </form>
    </td>
    <td>
      <form action="apaga-produto.php" method="post">
        <input type="hidden" name="id" value="<?=$produto['id']?>" />
        <button class="btn btn-danger">Apagar</button>
      </form>
    </td>

  </tr>
<?php
  endforeach
?>
</table>
<?php include('rodape.php') ?>

e minha função listarProdutos($conexao):

function listarProdutos($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");
  $produto = mysqli_fetch_assoc($resultado);

  while($produto = mysqli_fetch_assoc($resultado)){
    array_push($produtos, $produto);
  };

  return $produtos;
}

Até ai a unica diferença é que eu utilizei o método post no lugar do get para passar alterar o produto. Eu farei uma mudanças para utilizar o método get, assim será possível visualizar melhor o erro no site.

Okay, no site Minha Loja da pra visualizar o erro, na lista não da pra ver, mas se acessarem o http://minhalojabnm.esy.es/produto-altera-pormulario.php?id=1, será possível ver o item que não está aparecendo.

Eu percebi que esse é um comportamento que está acontecendo na minha base também.

Executa esse select direto no phpmyadmin, pra ver se aparece sem o primeiro também:

select p.*, c.nome as categoria_nome from produtos as p join categorias as c on c.id=p.categoria_id

Opa Tullio.

Então, eu executei a query acima e sim, todos os item que compões o banco de dados aparecem na query, inclusive o primeiro item, que continua não aparecendo na lista de produtos da página.

A query, em teoria, está correta.

solução!

Bruno, demorou um tempo pra mim enxergar isso, mas acredito que descobri o seu erro. rsrsrs.

$produto = mysqli_fetch_assoc($resultado);

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

Preste atenção nessas duas linhas na sua função "listarProdutos". Acredito que esteja acontecendo o seguinte, nessa primeira linha vc pega o primeiro resultado, e no While vc já substitui pegando a partir do segundo, já que o primeiro já foi "pego", remova essa linha de cima, e deixe só o while e teste novamente.

Ih Tullio, você tem razão.

como eu tava fazendo o $produto = mysqli_fetch_assoc($resultado); logo de cara e depois repetindo o código, a primeira posição da busca ficava para trás.

Depois que eu removi a primeira linha funcionou que é uma beleza.

Valeu ai.