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

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

Olá pessoal, tudo bem?

Estou com dificuldade, pois não consegui identificar o seguintes erros no meu código:

Notice: Undefined index: id in C:\xampp\htdocs\php1\produto-formulario.php on line 12

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

Segue os códigos:

produto-formulario.php

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

if(!isset($_COOKIE["usuario_logado"])) {
    header("Location: index.php?falhaDeSeguranca=true");
    die();
}

$id = $_GET['id'];
$produto = buscaProduto($conexao, $id);
$categorias = listaCategorias($conexao);
?>
        <h1>Formulário de cadastro</h1>
        <form action="adiciona-produto.php" method="post">
            <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" /></td>
                </tr>

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

                <tr>
                    <td></td>
                    <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 $categoria) : ?>
                            <option value="<?=$categoria['id']?>">
                                    <?=$categoria['nome']?><br/>
                            </option>
                        <?php endforeach ?>
                        </select>
                    </td>
                </tr>

                <tr>
                    <td><input class="btn btn-primary" type="submit" value="Cadastrar" /></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})";
           $resultadoDaInsercao = mysqli_query($conexao, $query);
           return $resultadoDaInsercao;
       }
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}'";
    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);
}
function removeProduto($conexao, $id) {
    $query = "delete from produtos where id = {$id}";
    return mysqli_query($conexao, $query);
}
4 respostas

Oi Andre!

A mensagem de erro está dizendo: Notice: Undefined index: id in C:\xampp\htdocs\php1\produto-formulario.php on line 12

Ou seja você está tentando acessar um índice que não existe no array $_GET em seu arquivo produto-formulario.php

Esse array é populado com os parâmetros que você passa na url pelo navegador por exemplo: localhost:8080?id=12

Phillipe,

Muito obrigado pela ajuda, mas ainda não consegui entender como posso solucionar o problema.

E o outro erro? Como posso revolvê-lo?

Desde já, obrigado!

solução!

Esses erros do tipo "Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result," são causas por problema no SQL que se tentou executar.

No caso desta linha 23, o problema deve estar no trecho abaixo

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

Esses dois erros que você postou são relacionados. Se você não receber o ID em sua pagina e passar ele vazio para a função, vai dar problema.

Para resolver, você precisa verificar se está passando o "id" como parâmetro no endereço da página

http://localhosts/meusite/pagina.php?id=1

Neste caso, você recupera o valor com $_GET. Para validar se existe, você pode usar a função isset(). Exemplo:

$id = 0;
if (isset($_GET["id"])){
    $id = $_GET["id"];
}
$produto = buscaProduto($conexao, $id);

Pô Daniel, muito obrigado!

Funcionou e eu conseguir entender um pouco melhor.

Agradeço mais uma vez à todos participantes do fórum!