Erro Header

cryteck

Power Member
Boa tarde, eu criei um sistema de login por sessões e um livro de visitas em php.
Na página do livro de visitas tem um link para inserir mensagens que vai para a pagina inserir_msg.php e o que eu queria é que os utilizadores só acedessem a essa página depois de fazer o login.
Para isso no sistema de login criei uma página de nome restrito.php
Código:
<?php
session_start();
if (isset($_SESSION['login']) && isset($_SESSION['password'])){
   $login_utilizador = $_SESSION['login'];
}
else {
   header("Location:index.php"); 
   
   exit();
}
?>
E na página inserir_msg.php pos este código para restringuir o acesso a mesma
Código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="fich_menus/cbcscbmenus.css" type="text/css" />
<title>Bombeiros Voluntários da Lixa </title>
<link href="estilo.css" rel="stylesheet" type="text/css" />
<link rel="shortcut icon" href="imagens/favicon.ico">
<!-- Início da função de contagem de caracteres -->
<script language="javascript">
function ContaCaracteres(){
   intCaracteres = 400 - document.formulario.mensagem.value.length;
   if (intCaracteres > 0) {
      document.formulario.caracteres.value = intCaracteres;
      return true;
   }
   else {
      document.formulario.caracteres.value = 0;
      document.formulario.mensagem.value = document.formulario.mensagem.value.substr(0,400)
      return false;
   }

}
</script>
<!-- Fim da função de contagem de caracteres -->

</head>

<body>
<div id="global"> 
      <div id="topo"> <? include ("include/topo/topo.php")?> </div>
      <div id="imagem_principal"></div>
      <div id="menus_horizontais">    
      <?php  include("menus.php") ?>
      
      
      
      </div> 
      
      <div id="conteudo">  <?
include("config.php");
require("restrito.php");



if (isset($_POST['utilizador'])){

$utilizador =utf8_decode($_POST['utilizador']);
$destinatario =utf8_decode($_POST['destinatario']);
$mensagem =utf8_decode($_POST['mensagem']);

if ($_POST['utilizador'] == "" || $_POST['destinatario'] == "")
{
echo "Por favor preencha todos os campos corretamente.";
echo "<br>"; 
}

elseif ($_POST['mensagem'] == ""){
echo  "Por favor introduza a mensagem.";
echo "<br>"; 
}

else
{
$sql_inclu = "INSERT INTO livro(utilizador ,destinatario ,mensagem,data,hora) VALUES
('$utilizador', '$destinatario', '$mensagem', NOW(), NOW())";
$exe_inclu = mysql_query($sql_inclu) or die (mysql_error());

echo "Mensagem Inserida com sucesso";

}
}
?>

<form action="inserir_msg.php" method="post" name="formulario" id="formulario">
  <table width="52%" border="0" align="center" cellpadding="2" cellspacing="0">
<tr>
<td colspan="2">  <div align="center"> <a href="mensagens.php"> Ver Mensagens </a> </div> </td>
</tr>
<tr>
      <td width="14%"> <br><br>Utilizador</td>
      <td width="85%"><p>&nbsp;
        </p>
        <p>
          <input name="utilizador" id="utilizador" style="border: 1px solid rgb(153, 153, 153); background-color: #eeeeee; color:     black;" type="text">
      <td width="1%">&nbsp;</td>
    </tr>
    <tr>
      <td>Para:</td>
      <td><select name="destinatario" id="destinatario">
        <option value="Presidente"> Presidente </option>
        <option value="Comandante"> Comandante</option>
        <option value="Bombeiros"> Bombeiros </option>
        <option value="Associação">Associação </option>
        <option value="Todos"> Todos </option>
      </select></td>
    </tr>
    <tr>
      <td valign="top"><p></p>
      <p>Mensagem:</p></td>
      <td height="201"><p>
        <textarea name="mensagem" cols="47" rows="10" style="border: 1px solid rgb(153, 153, 153); background-color:                       #eeeeee; color: black;" id="mensagem" onKeyUp='ContaCaracteres();'></textarea>
      </p>
      <p>Ainda restam
        <input name="caracteres" type="text"  value="400" size="3" maxlength="3" readonly="readonly">
caracteres. </p></td>
    </tr>
    <tr>
      <td colspan="2">Adiccionar Smiles <br>
      <?
        include ("include/smileys/smileys.php");
        ?></td>
    </tr>
   <tr>
   <td colspan="2">
    <div align="center"> 
      <input type="reset" name="reset" value="Limpar"> 
      <input type="submit" value="Enviar" name="enviar" id="enviar"> </div>
   </td>
   </tr>
 </table>
 </form>
 </div>
  <div id="lateral">
       <?php  include("include/relogio/relogio.php") ?> 
       <?php  include("include/temperatura/temperatura.php") ?> 
       <?php  include("include/votacao/votos.php") ?>
  </div>
   
</div>

<div id="fundo"> <?php  include("include/fundo/fundo.php") ?>  </div>
 <br> <br>
 
 </body>
</html>
Ou seja pos um require
require("restrito.php"), só que dá-me um erro:
Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\site_login\inserir_msg.php:7) in C:\xampp\htdocs\site_login\restrito.php on line 7.
O que se passará ajudem-me.....
Abraços:007:.
 
Última edição pelo moderador:
Se não quiseres alterar o código do ficheiro restrito.php e adicionar as funções ob_*,
altera o ficheiro "inserir_msg.php": passa o include "restrito.php" para o início do ficheiro imediatamente antes da tag <DOCTYPE ... >

holo
 
Eu ja tentei das duas maneiras mas não estou a conseguir.
Já meti o include em primeiro na página inserir_msg.php e meti também na página restrito.php
o seguinte código com as funções

PHP:
<?php
ob_start();
session_start();
if (isset($_SESSION['login']) && isset($_SESSION['password'])){
   $login_utilizador = $_SESSION['login'];
}
else {
   header("Location:index.php"); 
   exit();
}
ob_end_flush();
?>
Não sei o que se passa ajudem-me se faz favor é importante.
Abraços!!
 
Retiraste o require("restrito.php") do meio do ficheiro inserir_msg.php ? O que é que tens no ficheiro config.php?
Se colocaste require("restrito.php") no início do inserir_msg.php não precisas das funcoes ob_*.
Tens o setting display_errors = 1 no php.ini ?
Podes ter o setting desactivado e estar a acontecer algum erro (notice ou warning) e é o suficiente para dar esse erro. Pode ainda ser algum espaço no fim de algum ficheiro que dá origem a um output de um espaço e também causa o erro.
Coloca esta instrução no início do teu index.php: ini_set("display_errors", "1"); e/ou ve os logs de erro do Apache ou do web server que estás a usar.

holo
 
No config.php tenho o seguinte código:
PHP:
<?php
$host = "localhost"; //Servidor do mysql
$utilizador = "root"; //Utilizador em curso na base de dados 
$password = ""; //Password do utilizador na base de dados
$db = "lixa"; //Nome da base de dados

$conexao = mysql_connect($host, $utilizador, $password) or die ("Não foi possivel ligar a base de dados");
$db = mysql_select_db($db) or die ("Não foi possivel selecionar a base de dados");
?>
No php.ini tenho
display_errors = On
display_startup_errors = Off
 
Última edição:
Back
Topo