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

Erro de Cabeçalho ao remover produto

Que erro é este? Não encontrei nada de errado no código.

Warning: Cannot modify header information - headers already sent by (output started at /Users/silvanioduartedacruz/ApacheService/loja/cabecalho.php:37) in /Users/silvanioduartedacruz/ApacheService/loja/remove-produto.php on line 12

removeprodutophp

<?php
require_once("cabecalho.php");
require_once("banco-produto.php");
require_once("logica-usuario.php");

$id = $_POST['id'];

$produtoDao = new ProdutoDao($conexao);
$produtoDao->removeProduto( $id);

$_SESSION["success"] = "Produto removido com sucesso.";
header("Location: produto-lista.php");
die();

?>

Cabeçalho

<?php

spl_autoload_register(function($nomeDaClasse) {
    require_once("class/".$nomeDaClasse.".php");
});

require_once("conecta.php");

error_reporting(E_ALL ^ E_NOTICE);
require_once("mostra-alerta.php"); ?>
<html>
<head>
    <meta charset="utf-8">
    <title>Minha Loja</title>
    <link href="css/bootstrap.css" rel="stylesheet">
    <link href="css/loja.css" rel="stylesheet">
</head>
<body>

    <div class="navbar navbar-inverse navbar-fixed-top">
        <div class="container">
            <div class="navbar-header">
                <a class="navbar-brand" href="index.php">Minha Loja</a>
            </div>
            <div>
                <ul class="nav navbar-nav">
                    <li><a href="produto-formulario.php">Adiciona Produto</a></li>
                    <li><a href="produto-lista.php">Produtos</a></li>
                    <li><a href="contato.php">Contato</a></li>
                </ul>
            </div>
        </div>
    </div>

    <div class="container">
        <div class="principal">
            <?php  mostraAlerta("success"); ?>
            <?php mostraAlerta("danger"); ?>
3 respostas

Silvanio, tudo bem? Não é do cabeçalho do seu código, mas sim do HTTP, isso acontece quando você tenta fazer alguma operação backend - modificando o HEADER do HTTP - quando a renderização da página já esta sendo feita.

Remove esse require do cabecalho.php no remove-usuario, você não precisa dele ai e é ele que tá causando o erro. Você não precisa dele por que está fazendo um redirecionamento da página pra outro lugar.

Entendeu? Espero ter ajudado!

solução!

Wanderson, entendi + ou - o motivo do erro, porem entendi o como solucionar.

Eu tenho o require_once('cabecalho') que está no remove_produto.php ele é responsável também por incluir a classe ProdutoDao.php através do recurso spl_autoload_register que é incluída por padrão dentro do cabeçalho.

Então conforme você disse eu retirei o require_once('cabecalho') do remove_produto.php e inclui o require_once('ProdutoDao.php') para compensar a falta spl_autoload_register. Funcionou belezinha.

No entanto admito que não compreendi bem o erro.

Silvanio, no cabecalho.php você tem código HTML, quando o PHP encontra o HTML para ser exibido na página, ele envia ele como uma resposta para o navegador para que o navegador exiba o HTML. Entendeu até aqui? Beleza...

Quando você vai remover o produto, o html já foi enviado para a página e ai, você tenta usar a função HEADER que modifica a resposta do servidor para o navegador. O erro acontece justamente aqui. O PHP não pode modificar uma resposta que já foi enviada para o navegador. Ficou mais claro agora?

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