Jump to content
Fórum Script Brasil
  • 0

Erro Estranho... Diz Que Não Posso Modificar Header


Rubiz Gardini
 Share

Question

Tenho um sistema de login que usei em um servidor e funcionou direitinho... dessa vez, pra outro servidor, ele dá um erro estranho:

Warning: Cannot modify header information - headers already sent by (output started at C:\Inetpub\modelandoideias\admin\login.php:1) in C:\Inetpub\modelandoideias\admin\login.php on line 22

Este é meu código, parece que esse aviso está indicando as linhas do setcookie e do redirecionamento para a página interna de logado.... Ele não está permitindo nenhuma linha de código do else...

<?php
// obtém os valores digitados
$username = $_POST["username"];
$senha = $_POST["senha"];

// acesso ao banco de dados
include "conecta_mysql.inc";
$resultado = mysql_query("SELECT * FROM usuarios where username='$username'");
$linhas = mysql_num_rows ($resultado);
if($linhas==0)  // testa se a consulta retornou algum registro
{
    header ("Location: admin.php");
}
else
{
       if ($senha != mysql_result($resultado, 0, "senha")) // confere senha
    {
        header ("Location: erro.php");
    }
    else   // usuário e senha corretos. Vamos criar os cookies
    {
        setcookie("nome_usuario", $username);
        setcookie("senha_usuario", $senha);
        // direciona para a página inicial dos usuários cadastrados
        header ("Location: admin.php");
    }
}
mysql_close($con);
?>

Alguém desvenda esse mistério?

Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Quanto ao fato de funcionar em um servidor e não funcionar em outro, isso se deve a configuração do php.ini.

Quanto ao erro, é porque alguma coisa está dando saída para o navegador antes de redirecionar (header(location:...)), isso gera o erro citado pelo PHP.

Para alterar tente primeiro usar o ob_start() e ob_end_flush(), caso não funcione ai você tem 2 opções:

1 - achar o que está dando saída para o navegador antes do header;

2 - usar javascript para redirecionar.

Link to comment
Share on other sites

  • 0

Olá obrigada pela pronta resposta!

Eu vi quanto a essa regra ob_start, não captei como ela poderia ser usada aqui no caso... Vou tentar com JS mesmo, se não der certo, volto a postar...

========editado===============

Olha, não sei como usar o javascript dentro do php e também, preciso dessa validação;

Se alguém puder me ajudar fico grata!

Edited by Rubiz Gardini
Link to comment
Share on other sites

  • 0
Guest Visitante

que interessonte...!

O negócio foi agora!!! Só que ele não escreve o fdp do cookie no meu browser, então quando tento redirecionar, a página que checa cookies não deixa entrar... meu browser não tem configurações anti-cookies...

Link to comment
Share on other sites

  • 0

Eu pesquisei um pouco o manual do php, com um exemplo que tinha lá consegui enviar cookies pro browser, isso quer dizer que po problema não é meu server... Olhem o código pra ver comigo se descobrem alguma coisa...

Código que cria cookies

<?php
ob_start();
// obtém os valores digitados
$username = $_POST["username"];
$senha = $_POST["senha"];

// acesso ao banco de dados
include "conecta_mysql.inc";
$resultado = mysql_query("SELECT * FROM usuarios where username='$username'");
$linhas = mysql_num_rows ($resultado);
if($linhas==0)  // testa se a consulta retornou algum registro
{
    header ("Location: admin.php");
}
else
{
       if ($senha != mysql_result($resultado, 0, "senha")) // confere senha
    {
        header ("Location: erro.php");
    }
    else   // usuário e senha corretos. Vamos criar os cookies
    {
    echo 'entrou no else';
        setcookie("nome_usuario", $username);
        setcookie("senha_usuario", $senha);
        // direciona para a página inicial dos usuários cadastrados
        header ("Location: admin.php");
    }
}
mysql_close($con);

ob_end_flush();
?>
Código que valida cookies:
<?php
if(isset($_COOKIE["nome_usuario"]))
    $nome_usuario = $_COOKIE["nome_usuario"];
if(isset($_COOKIE["senha_usuario"]))
    $senha_usuario = $_COOKIE["senha_usuario"];

if(!(empty($nome_usuario) OR empty($senha_usuario)))
{
    include "conecta_mysql.inc";
    $resultado = mysql_query("SELECT * FROM usuarios WHERE username='$nome_usuario'");
    if(mysql_num_rows($resultado)==1)
    {
        if($senha_usuario != mysql_result($resultado,0,"senha"))
        {
            setcookie("nome_usuario");
            setcookie("senha_usuario");
            header ("Location: erro.php");
            exit;
        }
    }
    else
    {
        setcookie("nome_usuario");
        setcookie("senha_usuario");
        header ("Location: erro.php");
        exit;
    }
}
else
{
    header ("Location: erro.php");
    exit;
}

mysql_close($con);
?>
O código que peguei e deu certo foi esse:
<?php
// set the cookies
setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");
setcookie("cookie[one]", "cookieone");

// after the page reloads, print them out
if (isset($_COOKIE['cookie'])) {
    foreach ($_COOKIE['cookie'] as $name => $value) {
        echo "$name : $value <br />\n";
    }
}
?>

Link to comment
Share on other sites

  • 0

Uma coisa que eu me esqueci foi, ao contrário do header("Location:..."), segurar o buffer de saída com o ob_start() é ineficiente com o setcookie, pois depois que qualquer coisa dê saída não se poderá mais gravar um cookie...

Link to comment
Share on other sites

  • 0

Tanto faz iniciante ou não... tem muitos detalhes pra se lembrar que a gente só fica sabendo ou relembra na hora do desenvolvimento... mas no caso você tem a opção de utilizar javascript para redirecionar, isso vai evitar o erro de headers already sent...

Link to comment
Share on other sites

  • 0
Guest --rubiz --

Isso pode ser um erro ou inadequação de servidor?

Pois eu estou mudando de servidor, espero que este seja melhor!!! Pois em outro servidor que eu utilizei, esse problema nunca aconteceu!! Com esse mesmo script... :o

Link to comment
Share on other sites

  • 0
Tenho um sistema de login que usei em um servidor e funcionou direitinho... dessa vez, pra outro servidor, ele dá um erro estranho:
Warning: Cannot modify header information - headers already sent by (output started at C:\Inetpub\modelandoideias\admin\login.php:1) in C:\Inetpub\modelandoideias\admin\login.php on line 22

Este é meu código, parece que esse aviso está indicando as linhas do setcookie e do redirecionamento para a página interna de logado.... Ele não está permitindo nenhuma linha de código do else...

<?php
// obtém os valores digitados
$username = $_POST["username"];
$senha = $_POST["senha"];

// acesso ao banco de dados
include "conecta_mysql.inc";
$resultado = mysql_query("SELECT * FROM usuarios where username='$username'");
$linhas = mysql_num_rows ($resultado);
if($linhas==0)  // testa se a consulta retornou algum registro
{
    header ("Location: admin.php");
}
else
{
       if ($senha != mysql_result($resultado, 0, "senha")) // confere senha
    {
        header ("Location: erro.php");
    }
    else   // usuário e senha corretos. Vamos criar os cookies
    {
        setcookie("nome_usuario", $username);
        setcookie("senha_usuario", $senha);
        // direciona para a página inicial dos usuários cadastrados
        header ("Location: admin.php");
    }
}
mysql_close($con);
?>

Alguém desvenda esse mistério?

use <? echo "<script>window.location.href = 'admin.php';</script>";?>

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...