Jump to content

Recommended Posts

Posted

boas ppl

estou a fazer um site e cada vez que faço insert aparece o seguinte erro

Warning: Cannot modify header information - headers already sent by (output started at D:\web desing\KPC\Admin\produtos.php:2) in D:\web desing\KPC\Admin\produtos.php on line 52

e nesta zona esta o seguinte codigo

  $insertGoTo = "fimok.php";

  if (isset($_SERVER['QUERY_STRING'])) {

    $insertGoTo .= (strpos($insertGoTo, '?')) ? "&" : "?";

    $insertGoTo .= $_SERVER['QUERY_STRING'];

  }

  header(sprintf("Location: %s", $insertGoTo)); --> linha 52

}

alguem me sabe explicar o que estou a fazer de errado ??

Posted

eu explico.

esse redirecionamento que usas é uma função de header, pelo que antes de a usares não podes ter posto nada cá para fora. Não podes ter feito nenhum echo nem escrito nada no html.

Se o tiveres feito dá esse erro... essa função deve ser usada sempre antes de mostrar o que quer que seja na página, nem mesmo defenir o <head> do html

Posted

uma linha em branco fora das tags <?php e ?> é o suficiente para começar a enviar output no teu caso é na linha 2 que está o problema

Para resolveres o problema de uma forma simples , na primeira linha do ficheiro põe isto

<?php

    ob_start();

?>

assim activas o buffering dos dados que te permite poder mecher nos headers do ficheiro a qq altura.

Posted

uma linha em branco fora das tags <?php e ?> é o suficiente para começar a enviar output no teu caso é na linha 2 que está o problema

Para resolveres o problema de uma forma simples , na primeira linha do ficheiro põe isto

<?php

    ob_start();

?>

assim activas o buffering dos dados que te permite poder mecher nos headers do ficheiro a qq altura.

Será que podias explicar melhor a função do 'ob_start'?

Posted

uma linha em branco fora das tags <?php e ?> é o suficiente para começar a enviar output no teu caso é na linha 2 que está o problema

Para resolveres o problema de uma forma simples , na primeira linha do ficheiro põe isto

<?php

    ob_start();

?>

assim activas o buffering dos dados que te permite poder mecher nos headers do ficheiro a qq altura.

Será que podias explicar melhor a função do 'ob_start'?

bom aqui vai uma explicação rápida

por defeito os dados são enviados para o browser á medida que são criados

por exemplo ao escreveres <html> na primeira linha esta é logo enviada para o browser.

Para enviar algo para o browser o servidor utiliza o protocolo http, este protocolo obriga a que sejam enviados os headers da mensagem primeiro.

É nestes headers que estão definidos  entre outras coisas os cookies

Este erro do headers already sent, ocorre por essa razão porque se faz um setcookie depois de ter enviado os headers, como o cookie tem que ser definido no header e este ja foi enviado dá erro.

a função ob_start() altera o comportamento normal. faz com que os dados sejam guardados num buffer e só são enviados para o browser com a função ob_end_flush() ou automaticamente no final da página.

isto permite usar as funções que manipulam os headers em qualquer altura  porque só é enviada qq coisa para o browser no final e por conseguinte os headers só são enviados no final da pagina

desculpa se não fui claro mas a escrita não é o meu ponto forte

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.