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

Erro de função redeclarada

Bom dia

Minha listagem de produtos não esta mais aparencendo, aparece o seguinte erro "Fatal error: Cannot redeclare listaProdutos() (previously declared in C:\xampp\htdocs\loja\banco-produto.php:3) in C:\xampp\htdocs\loja\banco-produto.php on line 11"


//Meu codigo do lista-produto.php

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


    $produtos = listaProdutos($conexao);

    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    
    foreach($produtos as $produto){
    ?>    

        <tr>
            <td>    <?=$produto['nome']?>    </td>
            <td> R$ <?=$produto['preco']?>  </td>
            <td> 
                <a href="remove-produto.php?id=<?=$produto['id']?>" class="text-danger">remover</a>
            </td>
        </tr>

    <?php        
    }
    ?>

    </table>

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

//Meu codigo do banco-produtos.php

<?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}')";
        $resultadoDaInsercao = mysqli_query($conexao, $query);
        return $resultadoDaInsercao;
    }    

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

Obrigado.

6 respostas

Boris, tudo bem? Cola aqui também seu remove-produto.php; por favor? `

Tudo sim, e você?

Aqui está o código:

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

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

    header("Location: lista-produtos.php?removido=true");
?>

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

<?php
    include("rodape.php");
?>
solução!

Boris o problema é que tanto no seu lista-produto quanto no seu remove-produto está sendo incluso o arquivo banco-produto. como está sendo utilizado apenas a funcao include, ele define as funções na primeira inclusao e na segunda ele tenta fazer novamente. Por isso o erro. pra resolver é simples.

use nos dois casos a função include_once para incluir o arquivo e caso deseje evitar esses erros novamente com outros arquivos, sempre utiliza include_once() em vez de include()

Testa pra gente? Abraço, bons estudos!

Acho que entendi, eu não deveria ter incluso o remove-produto no lista-produto pois ele já está linkado no botão remover usando redirecionamento ao invés de inclusão. Eu removi o include("remove-produtos.php") e o código voltou a funcionar.

Estou certo ou há algum erro na minha interpretação? Abraços!

Esta certo, essa sua solução foi até mais simples e correta, parabéns!

Muito obrigado pela atenção!

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