1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

Erro Header

Discussão em 'Web Development' iniciada por cryteck, 16 de Abril de 2009. (Respostas: 8; Visualizações: 983)

  1. cryteck

    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: 16 de Abril de 2009
  2. anjo2

    anjo2 Power Member

  3. cryteck

    cryteck Power Member

    E em que página ponho o ob_start
     
  4. holografix

    holografix Power Member

    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
     
  5. cryteck

    cryteck Power Member

    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!!
     
  6. holografix

    holografix Power Member

    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
     
  7. cryteck

    cryteck Power Member

    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: 17 de Abril de 2009
  8. fm.

    fm. Power Member

    Não te falta nada no mysql_select_db() ?

    Talvez mysql_select_db($db,$conexao) ?
     
  9. anjo2

    anjo2 Power Member

    o ob_start() é antes de enviares algo para a página, no inicio de tudo.
     

Partilhar esta Página