11
respostas

Problema com header - "Warning: Cannot modify header information"

Meu header: Location só funciona quando eu seto antes de tudo. No código da aula ele é setado depois de cabecalho.php e funciona normalmente. Em pesquisas na internet eu achei informações de que não pode setar headers depois de qualquer instrução HTML, mas no código da aula funciona. Por quê?

Matricule-se agora e aproveite até 50% OFF

O maior desconto do ano para você evoluir com a maior escola de tecnologia

QUERO APROVEITAR
11 respostas

Não assisti as aulas, mas, um header http só pode ser enviado antes de qualquer conteúdo ser enviado. No curso, o arquivo cabecalho.php exibe algum conteúdo, ou só define dados?

Caso algo seja exibido antes de enviar um header(""), você receberá um erro.

Então, o cabechalho. php tem sim conteúdo HTML e na vídeo-aula o header vem depois e redirecionou normalmente.

Bom, muito estranho. Isso não é possível em PHP. Caso este fórum ainda esteja aberto quando eu fizer o curso, comento aqui.

Nilson, consegue compartilhar seu código?

É o código da aula (PHP, Mysql e Fundamentos da Web). Mais precisamente na posição 6m16s da vídeo-aula que ele cria o header no remove-produto.php.

cabecalho.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="sobre.php">Sobre</a></li>
                </ul>
            </div>
        </div>
    </div>


    <div class="container">
        <div class="principal">

remove-produto.php

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

 $id = $_POST['id'];
 removeProduto($conexao, $id);
 header("Location: produto-lista.php?removido=true");
 die();
 ?>

Ops... Curso: PHP, Mysql e Fundamentos da Web Aula: 6 (Deletando produtos).

Estranho, seu código não está errado, o que está acontecendo? Ele apenas não redireciona? Nenhuma mensagem de erro? Se possível compartilha o seu banco-produto e o seu produto-lista.php para eu dar uma olhada também.

Felipe, esse código é o da aula e funciona. O meu também funciona, porém sem o "include (cabecalho.php);" - que também nem faz sentido neste código. A estranheza está neste código da aula funcionar. Achei que pudesse ser algum configuração de server ou versão de PHP, pois na net encontrei respostas de que não é possível HTML antes do header e o da aula funciona com HTML antes - que é o arquivo cabecalho.php O erro que dá está no titulo do fórum.

Se ainda está com o problema testa colocar o include("conecta.php"); antes do include("cabecalho.php"); . Já tive problemas que foram resolvidos colocando a conexão em primeiro. Não sei bem o motivo, mas isso já aconteceu em alguns pequenos projetos que fiz.

Boa noite, Nilson pode compartilhar o código que você fez para analisarmos aqui, por que quando fiz essa aula que você mencionou funcionou sem problemas.

Você pode usar o @ antes do header também para ocultar a mensagem, @header("location: ...");

O @ tem a função de ocultar o erro, não é a melhor opção, mas resolve por enquanto.