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

Redirecionamento com header("Location: ") não funciona

Fala galera quero saber se mais alguém teve o mesmo problema que eu na hora de fazer o redirecionamento com header("Location: "); eu digitei o código exatamente como o professor ensinou conferi milhões de vezes e não funcionava o meu código estava assim:

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

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

mas quando clico em remover o produto é removido mas a pagina não é redirecionada e lógicamente a mensagem não é exibida e vou para uma página em branco com a url: removeProduto.php?id=xx então pesquisando um monte na internet encontrei uma outra maneira de fazer o redirecionamento e tudo funcionou perfeitamente meu código ficou assim:

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

$id = $_GET['id'];
removeProduto($conexao, $id);
echo "<script>location.href='produto-lista.php?removido=true';</script>";
die();
?>

Detalhe eu estou usando o MAMP como servidor não sei se isso tem alguma influência já que o professor usa o XAMP se alguém poder me explicar onde está o erro ou porque isso está acontecendo eu agradeço!

7 respostas

Olá, William. Enviar cabeçalhos http (no PHP é feito com a função header) só é possível se nenhum dado tiver sido exibido ainda. Existe alguma mensagem de erro ou Warning sendo gerado por um dos scripts incluídos?

A forma como você fez utiliza JavaScript, que é a linguagem que os navegadores interpretam. Não tem problema em implementar desta forma, mas o ideal seria descobrir o que causou o erro com a função header.

Abraços.

Obrigado pelo feedback Carlos! mas respondendo a sua pergunta, não, não é exibido nenhuma mensagem de erro simplesmente não exibe nada eu sei que essa opção com JS também é viável mas corre o risco de o JS estar desativado em um navegador e então o redirecionamento não irá funcionar!

Uma solução para o caso do JS estar desabilitado é utilizar html puro com o seguinte código:

echo "<meta name='refresh' content='0;url=produto-lista.php?removido=true' />";

Este 0 é o intervalo em segundos aguardado pelo navegador para fazer o redirecionamento.

Espero que tenha ajudado.

Fala william, tudo bom?

Testei as duas formas aqui no xamp e funcionou normalmente... testei subindo um servidor pelo terminal e ambas também funcionaram.

Talvez seja algo do mamp mesmo... Tenta testar um header com o a URL completa, algo como:

header("Location: http://localhost/loja/produto-lista.php?removido=true");
solução!

Fala galera agradeço a ajuda de todos que me ajudaram principalmente o André Chaves porque testei também no MAMP usando a sua sugestão mas também não funcionou mas com você falou que testou das duas maneiras no XAMPP e funcionou eu fui lá baixei o XAMPP e rodei o msm código e tudo funcionou perfeitamente então deixando a solução aqui para alguém que esteja passando por esse mesmo problema a solução está em trocar o MAMP pelo XAMPP.

Eu estava com o mesmo problema e não tinha jeito do HEADER funcionar. Então, coloquei um javascript mesmo no lugar da header:

echo "<"script>document.location='produto-lista.php?removido=true'</script">";

Você precisa apenas deletar a aspas duplas entre o < e o script e no final tambem entre o T e o >. E comece e termine o echo com aspas duplas.

Eu estava passando por este problema. A nova versão do MAMP vem com uma série de recursos desativados. Você precisa ativar o buffering para conseguir inserir o header location.

Você precisa alterar a linha: output_buffering = Off

Para: output_buffering = On

ATENÇÃO: o MAMP possui 2 diretórios de config, pois parece que um é para o client side e outro para o server side. Então, atualize este comando NOS DOIS php ini abaixo:

1- Application / MAMP / CONF / versao do php que vc está usando(no meu caso 7.0.12 / php.ini

2- Application / MAMP / BIN / PHP / versao do php que vc está usando(no meu caso 7.0.12 / CONF / php.ini

Abraço