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

Dúvida no Ex. 2 da Aula 10 - Alterando produtos

Me ajudem com isso aqui. Não estava conseguindo resolver o erro. Então apaguei tudo e estou usando exatamente o mesmo código da Explicação . Aparece o seguinte e erro e o formulário para alterar o produto não é preenchido (a pagina aparece porém os campos estão em branco).

Warning: mysql_fetch_assoc() expects parameter 1 to be resource, object given in C:\xampp\htdocs\loja\banco-produto.php on line 24

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 p.categoria_id = c.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})";
    $resultadoDaInsercao = mysqli_query($conexao, $query);
    return $resultadoDaInsercao;
}

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

function alteraProduto($conexao, $id, $nome, $preco, $descricao, $categoria_id, $usado) {
    $query = "update produtos set nome = '{$nome}', preco = {$preco}, descricao = '{$descricao}', 
        categoria_id= {$categoria_id}, usado = {$usado} where id = '{$id}'";
    $resultadoAlteracao = mysqli_query($conexao, $query);
    return $resultadoAlteracao;
}

function removeProduto($conexao, $id) {
    $query = "delete from produtos where id = {$id}";
    $resultadoRemove = mysqli_query($conexao, $query);
    return $resultadoRemove;
}

produto-lista.php

<?php include 'cabecalho.php'; ?>
<?php include 'conecta.php'; ?>

<?php
include 'cabecalho.php';
include 'conecta.php';
include 'banco-produto.php';
?>

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

<table class="table table-striped table-bordered">
    <?php
    $produtos = listaProdutos($conexao);
    foreach ($produtos as $produto) :
        ?>
        <tr>
            <td><?= $produto['nome'] ?></td>
            <td><?= $produto['preco'] ?></td>
            <td><?= substr($produto['descricao'], 0, 30) ?></td>
            <td><?= $produto['categoria_nome'] ?></td>
            <td><a class="btn btn-primary" href="produto-altera-formulario.php?id=<?=$produto['id']?>">Alterar</a> //pegando a id para fazer a busca e preencher o formulario para alterar o produto
            <td>
                <form action="remove-produto.php" method="post">
                    <input type="hidden" name="id" value="<?= $produto['id'] ?>" />
                    <button class="btn btn-danger">Remover</button>
                </form>
            </td>
        </tr>
    <?php endforeach; ?>
</table>
<?php include 'rodape.php'; ?>

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>Alterar produto</h1>
<form action="altera-produto.php" method="post">
    <input type="hidden" name="id" value="<?=$produto['id']?>" />
    <table class="table">
        <tr>
            <td>Nome</td>
            <td> <input class="form-control" type="text" name="nome" value="<?= $produto['nome'] ?>"></td>
        </tr>
        <tr>
            <td>Preço</td>
            <td><input  class="form-control" type="number" name="preco" value="<?= $produto['preco'] ?>"></td>
        </tr>
        <tr>
            <td>Descrição</td>
            <td><textarea class="form-control" name="descricao">value="<?= $produto['descricao'] ?>"</textarea></td>
        </tr>
        <?php
        $usado = $produto['usado'] ? "checked='checked'" : "";
        ?>
        <tr>
            <td></td>
            <td><input type="checkbox" name="usado" <?= $usado ?> value="true"> Usado
        </tr>
        <tr>
            <td>Categoria</td>
            <td>
                <select name="categoria_id" class="form-control">
                    <?php
                    foreach ($categorias as $categoria) :
                        $essaEhACategoria = $produto['categoria_id'] == $categoria['id'];
                        $selecao = $essaEhACategoria ? "selected='selected'" : "";
                        ?>
                        <option value="<?= $categoria['id'] ?>" <?= $selecao ?>>
                        <?= $categoria['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"); ?>
3 respostas
solução!

Por que não usar mysqli_fetch_assoc em vez de mysql? Essa versão foi descontinuada. A partir do PHP 5 só deve ser utilizado mysqli

Estou seguindo as explicações do curso. Vou mudar pra ver se da certo.

Deu certo? Ou era outra coisa?

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