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

ERROR no Ex. 3 da Aula 6 - Deletando produtos

Por favor me ajudem, não encontro o erro em local nenhum. Estou tentando identificar o erro ao tentar remover um produto da lista, cuja mensagem é: Notice: Undefined index: id in C:\xampp\htdocs\ALURA\CURSOS\remove-produto.php on line 5 O código da página remove-produto segue abaixo:

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

$id = $_GET['id'];
removeProduto($conexao, $id);
?>

<p class="text-success">Produto <?=$id?> removido!</p>

<?php
include("rodape.php");
?>

Mas não tinha nada errado na linha. Quando atualizei a pagina o erro apareceu diferente apareceu esse.

Fatal error: Cannot redeclare listaProdutos() (previously declared in C:\xampp\htdocs\ALURA\CURSOS\PHP mysql 1\banco-produto.php:2) in C:\xampp\htdocs\ALURA\CURSOS\PHP mysql 1\banco-produto.php on line 9

<?php
function listaProdutos($conexao){
    $produtos = array();
    $resultado = mysqli_query($conexao, "select * from produtos");
    while ($produto = mysqli_fetch_assoc($resultado))    {
        array_push($produtos, $produto);
    }
    return $produtos;
}

function insereProduto ($conexao, $nome, $preco){
    $query = "insert into produtos (nome, preco) values ('{$nome}',{$preco})";
    return mysqli_query($conexao,$query);
}
function removeProduto($conexao, $id) {
    $query="DELETE from produtos where id = {$id}";
    return mysqli_query($conexao,$query);
}

a linha 9 é o final da primeira função onde só possui o "}"

6 respostas

Oi Wesly, tudo bem?

Parece que a linha 9 realmente é o fim da função que lista os produtos. Em relação ao erro da função declarada 2x, talvez você esteja incluindo o arquivo 2x. Alguma include sua está trazendo o arquivo banco-produto.php? Além da include do próprio banco-produto?

A função esta assim:

<?php include("cabecalho.php");
 include ("conecta.php");
 include ("banco-produto.php");
 include ("remove-produto.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>
                <a href="remove-produto.php?id=<?=$produto['id']?>" class="btn btn-danger">Remover</a>
            </td>
        </tr>
    <?php
    endforeach
    ?>
</table>




<?php include("rodape.php"); ?>

esse é o meu produto losta que no caso chama o produto banco que é onde esta a função, quando clico em produtos ele puxa esse aqui, mas acusa o erro la na função.

Oi Wesly,

O problema é que você está incluindo o arquivo banco-produto.php 2x. Uma referenciando o arquivo diretamente e outra referenciando o remove-produto, que já referencia o banco-produto.

Para resolver, em vez de usar o include use o include_once(arquivo) => http://php.net/manual/pt_BR/function.include-once.php

Após colocar o include_once ele abriu a pagina porem abriu com um novo erro, Notice: Undefined index: id in C:\xampp\htdocs\ALURA\CURSOS\PHP mysql 1\remove-produto.php on line 6 (http://prntscr.com/bqwfle)

a linha 6 é onde esta o $id = $_GET['id'];

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

$id = $_GET['id'];
removeProduto($conexao, $id);
?>

<p class="text-success">Produto <?=$id?> removido!</p>

<?php
include("rodape.php");
?>

de alguma forma ele esta chamando o ID antes de eu clicar em remover e por isso o erro pois como não cliquei ele não especificou um id do produto. Acredito ser esse o motivo do erro

solução!

Oi Wesly, o engraçado é que esse arquivo parece ser acessado só depois que você clica em algum link de remoção. Quando vc está caindo nesse arquivo, qual o endereço que aparece no navegador? Toma também cuidado para não estar incluindo esse arquivo em alguma página que não faz uso dele.