Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Ayslan Rodrigo

[Resolvido] Cannot modify header information – headers already se

Recommended Posts

meus códigos:

 

login.php

 

 

<!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=iso-8859-1" />
<title>Bem-vindo!</title>
<style>
body {background-image: url("");}
</style>
<style type="text/css">
<!--
.Style6 {font-size: 13px}
-->
</style>
</head>

<body>
<form id="form1" name="form1" method="post" action="logar.php">
 <div align="center">
   <p> </p>
   <table width="41%" border="0">
     <tr>
       <td><p align="center" class="Style6"> </p>
         <p align="center" class="Style6">
           <label><img src="imagens/usericon.png" width="51" height="50" alt="" />
             <input name="login" type="text" id="login" onfocus="if(this.value=='Usuário'){this.value=''}" onblur="if(this.value==''){this.value='Usuário'}" onkeydown="this.value = this.value.toUpperCase()" onkeyup="this.value = this.value.toUpperCase()" size="26" />
           </label>
       </p></td>
     </tr>
     <tr>
       <td><p align="center" class="Style6">
         <label><img src="imagens/locked.png" width="39" height="37" alt="" /> 
            <input name="senha" type="password" id="senha" onfocus="if(this.value==''){this.value=''}" onblur="if(this.value==''){this.value=''}" onkeydown="this.value = this.value.toUpperCase()" onkeyup="this.value = this.value.toUpperCase()" size="26" />
           </label>
       </p></td>
     </tr>
     <tr>
       <td><div align="center"><span class="Style6">
         </span><span class="Style6">
           </span></div>
         <span class="Style6">
         <label>
         </label>
         </span>
         <label>
         <div align="center"><span class="Style6">              </span>
           <span class="Style6">                </span>
           <span class="Style6">
            <input type="submit" name="Submit" value="LOGIN" />
           </span>              <span class="Style6"></span><span class="Style6">                </span>              <span class="Style6"></span><span class="Style6">              </span>
           </label>
       <span class="Style6"></span><span class="Style6">          </span></div></td>
     </tr>
   </table>
 </div>
</form>
</body>
</html>

 

logar.php

 

<?php
$host = "localhost"; //Servidor do mysql
$user = "eeef"; //Usuario do banco de dados
$senha = "danceinddark"; //senha do banco de dados
$db = "eeef"; //banco de dados

mysql_connect($host, $user, $senha) or die (mysql_error());
mysql_select_db($db) or die (mysql_error()); 
?>

<?php

$login = $_POST['login'];
$senha = $_POST['senha'];

$sql_logar = "SELECT * FROM user WHERE login = '$login' && senha = '$senha'";
$exe_logar = mysql_query($sql_logar) or die (mysql_error());
$fet_logar = mysql_fetch_assoc($exe_logar);
$num_logar = mysql_num_rows($exe_logar);

//Verifica se n existe uma linha com o login e a senha digitado
if ($num_logar == 0){
  echo "Login ou senha invalidos!";
  echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para voltar.</a>";   
} 
elseif($fet_logar['activo'] == "N"){
  echo "Usuario não ativado, aguarde moderação do administrador do site.";
  echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para voltar.</a>"; 
}
else{
  //Cria a sessão e manda pra pagina principal.php
  session_start();
  $_SESSION['login'] = $login;
  $_SESSION['senha'] = $senha;
  header("Location:homepage.php");
}
?>

 

ele diz o erro: Warning: Cannot modify header information - headers already sent by (output started at /home/chape925/public_html/admin/logar.php:11) in /home/chape925/public_html/admin/logar.php on line 30

 

nao consigo resolver, alguém me diz o que está errado?

 

meu site tá hospedado no hostgator, sevidor linux...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu erro está em fechar, dar uma quebra de linha, e abrir novamente, as tags do PHP, nas seguintes linhas:

?>

<?php

 

Isso enviou dados ao buffer de saída, e quando você precisou alterar o cabeçalho, com session_start e header(location), deu erro.

Basta retirar essas 3 linhas.

 

Daria ainda pra usar ob_start() / ob_end_flush(), mas isso não é recomendado.

 

Se restaram dúvidas, diga. :thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Veja bem:

 

<?php

?>

<?php
  session_start();
?>

 

Esse código gerou o seguinte erro:

 

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at /home/matheust/public_html/x.php:5) in /home/matheust/public_html/x.php on line 6

 

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/matheust/public_html/x.php:5) in /home/matheust/public_html/x.php on line 6

 

Este código não gerou nenhum erro:

 

<?php
  session_start();
?>

 

O problema é que, session_start() é uma função que altera o cabeçalho da aplicação, e qualquer função que faça isso, deve ser mantida antes de qualquer informação ter sido enviada ao corpo da mesma.

Entenda informação por códigos HTML, caracteres em branco, quebras de linha, etc etc...

A mesma coisa é o header('Location: ..');. Neste exemplo, ele informa ao cabeçalho da aplicação, que o usuário deve ser redirecionado para a pasta anterior à atual.

No primeiro exemplo, após eu fechar a tag PHP, dei uma quebra de linha (return/enter), e isso foi enviado ao buffer. Se eu tivesse aberto/fechado as tags diretamente, assim: ... ?><?php ..., não haveria problema. Sacou?

 

Parece ser complicado, mas não é! Basta você se preocupar em não enviar nada ao navegador antes de uma função que tenha a característica citada (são pouquíssimas).

 

[]'s

Compartilhar este post


Link para o post
Compartilhar em outros sites

Amigo, nao estou sabendo onde coloco essa benção de linha =/

como disse, sou novo, nao consigo fazer funcionar =/

Você não leu com atenção, então. Eu não disse que você precisa colocar linha nenhuma. Eu disse que você precisa REMOVER a linha que está escapando entre as tags do PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php
$host = "localhost"; //Servidor do mysql
$user = "eeef"; //Usuario do banco de dados
$senha = "danceinddark"; //senha do banco de dados
$db = "eeef"; //banco de dados

mysql_connect($host, $user, $senha);
mysql_select_db($db);

$login = $_POST['login'];
$senha = $_POST['senha'];

$sql_logar = "SELECT * FROM user WHERE login = '$login' && senha = '$senha'";
$exe_logar = mysql_query($sql_logar);
$fet_logar = mysql_fetch_assoc($exe_logar);
$num_logar = mysql_num_rows($exe_logar);

//Verifica se n existe uma linha com o login e a senha digitado
if ($num_logar == 0){
  echo "Login ou senha invalidos!";
  echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para voltar.</a>";   
} elseif($fet_logar['activo'] == "N"){
  echo "Usuario não ativado, aguarde moderação do administrador do site.";
  echo "<br><a href='javascript:window.history.go(-1)'>Clique aqui para voltar.</a>"; 
} else {
  //Cria a sessão e manda pra pagina principal.php
  session_start();
  $_SESSION['login'] = $login;
  $_SESSION['senha'] = $senha;
  header("Location:homepage.php");
}
?>

Testa lá... ;)

 

@renato:

Sempre que o meu code apresenta esse erro eu não fecho a tag do php.

Esse é o mesmo caso que citei. Vou te ilustrar um exemplo:

 

<?php
include('conexao_bd.php');
session_start();
?>

 

Se o arquivo 'conexao_bd.php' contiver uma quebra de linha ou espaço após o fechamento da tag, vai dar erro, pois logo após de o arquivo ser incluído, chama-se a session_start().

Exemplo de código errado (note a quebra de linha no final):

<?php
mysql_connect();
//alguns codigos..
?>

 

Por isso ao remover a tag de fechamento (uma vez que ela é opcional no PHP), o problema é resolvido (se a causa for essa, obviamente).

Compartilhar este post


Link para o post
Compartilhar em outros sites

esqueci de postar meu arquivo verifica.php

 

<?php
@session_start();
if (isset($_SESSION['login']) && isset($_SESSION['senha'])){
  $login_usuario = $_SESSION['login'];
}
else {
  header("Location:login.php");
  exit();
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.