1
resposta

Erro produto-altera-formulario.php e banco-produto.php

esta dando esse erro no produto-altera-formulario.php e banco-produto.php

( ! ) Notice: Undefined index: id in C:\wamp64\www\loja\loja\produto-altera-formulario.php on line 7
Call Stack
#    Time    Memory    Function    Location
1    0.0010    243752    {main}( )    ...\produto-altera-formulario.php:0

( ! ) Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\wamp64\www\loja\loja\banco-produto.php on line 25
Call Stack
#    Time    Memory    Function    Location
1    0.0010    243752    {main}( )    ...\produto-altera-formulario.php:0
2    0.0030    268464    buscaProduto( )    ...\produto-altera-formulario.php:8
3    0.0030    268880    mysqli_fetch_assoc ( )    ...\banco-produto.php:25

banco-produto.php codigo:

<?php
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 mysqli_query($conexao, $query);
}

function listaProdutos($conexao){
        $produtos = array(); // criei uma array pra colocar todos os produtos la em $produtos
        $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");// resultado da query é os produtos vindos do banco no caso sem o while ele vai imprimir somente o primeiro produto da lista de produtos do banco de dados.
        while($produto = mysqli_fetch_assoc($resultado)){
            array_push($produtos, $produto); // array_push joga todos os produtos do banco $produto => $produtos joga nessa array.
        }
        return $produtos;
    }

function removeProduto($conexao, $id){
    $query = "delete from produtos 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 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);
}

produto-altera-formulario.php codigo:

<html>
<?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); 
$usado = $produto['usado'] ? "checked='checked'" : ""; 
?>
<h1>Alterando Produto</h1>

<form action="altera-produto.php" method="post">
    <input type="hidden" name="id" value="<?=$produto['id']?>">
    <table class="table">
        <tr> <!-- linha de uma tabela HTML  -->
            <td>Nome:</td> 
            <td><input class="form-control" type="text" name="nome" value="<?=$produto['nome']?>"/></td> <br>  <!-- <td> ordena o primeiro campo --> 

        </tr>

        <tr><!--linhas -->    
            <td>Preço:</td><!--Colunas --> 
            <td><input class="form-control" type="number" name="preco" value="<?=$produto['preco']?>"></td> <br> <!-- class form-control deixa o campo com o tamanho inteiro -->

        </tr>

        <tr><!--linhas -->    
            <td>Descrição:</td><!--Colunas --> 
            <td><textarea class="form-control" name="descricao"><?=$produto['descricao']?></textarea> <!-- class form-control deixa o campo com o tamanho inteiro -->
        </tr>

        <tr>
            <td></td>
            <td><input type="checkbox" name="usado" <?=$usado?> value="true">Usado</td>
        </tr>

        <tr><!--linhas -->    
            <td>Categoria:</td><!--Colunas -->
            <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><!-- class form-control deixa o campo com o tamanho inteiro -->
                    <?php endforeach?>
                </select>    

            </td>


        </tr>

        <tr>
            <td>
                <button class="btn btn-primary" type="submit">Alterar</button>
            </td>

        </tr>    
</table>


</form>
<?php include ("cabecalho.php") ?>
</html>

alguém pode me ajudar a concertar o erro e a entender o que aconteceu por favor?

1 resposta

Olá Fábio, Na linha 7 do seu arquivo 'produto-altera-formulario.php' tem o seguinte código:

$id = $_GET['id'];

E o erro apresentado diz que o 'id' não está definido, ou seja, verifique se realmente existe o $_GET['id'].

Enquanto você não enviar o form o $_GET vai estar vazio, isto significa que quando você abrir a página o $_GET['id'] não vai existir enquanto você não submeter o form.

Faz assim, ao invés de:

$id = $_GET['id'];

utilize:

//se existe o $_GET['id']
if(isset($_GET['id'])){
    $id = $_GET['id'];
    //resto do código...
}

Qualquer coisa posta aqui.