Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Erro em redirecionar página


Anderson Ferreira

Pergunta

Bom galera... Estou com uma dúvida.

Antes, eu utilizava o seguinte código pra redirecionar uma página em PHP:

echo "<meta http-equiv='Refresh' content='0;URL=pagina.html>";
Mas descobri q deste modo, não funciona no IE, pois ao invés de redirecionar, ele imprime este código na página... Então, procurando na internet, acheei o seguinte modo:
header("Location: $variavel_com_link");
---------- Então, adaptei este código para meu site. Mas está aparecendo o seguinte erro:
Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/Urna_Online/conexao.php:11) in /opt/lampp/htdocs/Urna_Online/conexao.php on line 39 Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/Urna_Online/conexao.php:11) in /opt/lampp/htdocs/Urna_Online/conexao.php on line 40
Boom... Pelo pouco q entendo, quando acontece esse erro nas sessões, é só colcoar as sessões antes de qualqr código. Mais neste caso, coloquei antes de tudo e não funciona :S Vou postar o códdgo-fonte das 2 principais páginas: "login.php" e "conexao.php"; Funcionam da seguinte maneira: O "login.php" q é o action do formulário da página "login.html", pega todos os dados do "conexao.php" através de uma include. Dentro do conexao.php está as principáis varíaveis utilizadas em todo o site, e a conexao com o BD. Abaixo segue o jeito q deveria funcionar: 1- Se o login, a senha e o captch (verificador de caractere) fosse digitado corretamente, éra pra aparecer a msg: "OK". 2- Se o login e a senha fossem digitado corretamente, e o captcha incorretamente, era pra exibir a seguinte msg: "Erro Captcha". 3- Se o login e a senha fossem digitados incorretamentes (independentemente do captcha esta correto ou não), éra pra página ser redirecionada. No caso 1, é impresso a seguinte mensagem na tela:
Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/Urna_Online/conexao.php:11) in /opt/lampp/htdocs/Urna_Online/conexao.php on line 39 Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/Urna_Online/conexao.php:11) in /opt/lampp/htdocs/Urna_Online/conexao.php on line 40 OK
No caso 2, é impresso a seguinte mensagem na tela:
Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/Urna_Online/conexao.php:11) in /opt/lampp/htdocs/Urna_Online/conexao.php on line 39 Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/Urna_Online/conexao.php:11) in /opt/lampp/htdocs/Urna_Online/conexao.php on line 40 Erro Captcha
No caso 3, é impresso a seguinte mensagem na tela:
Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/Urna_Online/conexao.php:11) in /opt/lampp/htdocs/Urna_Online/conexao.php on line 39 Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/Urna_Online/conexao.php:11) in /opt/lampp/htdocs/Urna_Online/conexao.php on line 40
-------------------------------------------------------- Os códigos fontes das páginas: LOGIN.PHP
<?php

    session_start();
        $_SESSION["login"] = $_POST["val_login"];
        $_SESSION["senha"] = $_POST["val_senha"];

    include "../conexao.php";

?>

<html>
    
<head>

    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
    <link rel="stylesheet" type="text/css" href="css/estilo.css">
    <title>Urna Online</title>

</head>

<body>

<?php

    #variaveis

        $login = $_SESSION["login"];
        $senha = $_SESSION["senha"];


    #conexao

        $conexao_eleitores = mysql_query("SELECT * FROM eleitores WHERE login='$login' AND senha='$senha'");
        $RS = mysql_fetch_array($conexao_eleitores) or die ("$erro_login");
        
    require_once '../captcha/securimage.php';
    $securimage = new Securimage();

        
    if ($RS["voto"] == 0 AND $securimage->check($_POST['captcha_txt']))
        {
        echo "OK";
        }
        
        else
            {
            echo "Erro Captcha";
            }


    if ($RS["voto"] == 1)
        {
        echo "você já VOTOU";
        }

?>
    
</body>
</html>
CONEXAO.PHP
<?php

#variaveis

    $link_erro_login = "../erro_login.html";
    $link_erro_dados = "../erro_dados.html";

?>



<script language='JavaScript'>
    function popup(descricao_cand)
    {
    window.open('../popup.php?cod_cand='+descricao_cand, 'Urna Online', 'STATUS=NO, TOOLBAR=NO, LOCATION=NO, DIRECTORIES=NO, RESISABLE=NO, SCROLLBARS=NO, TOP=100, LEFT=10, WIDTH=970, HEIGHT=450');
    }
</script>


<body>

<font color="#ff0000" face="Arial, Helvetica, sans-serif" size="3">

    <?php

    #variaveis

        $titulo_site  = "Urna Online";

        $nome_administrador  = "Anderson Ferreira / Rafael Pereira";
        $email_administrador = "urnaonline@yahoo.com.br";

        $servidor_bd = "localhost";
        $nome_bd     = "213696";
        $usuario_bd  = "root";
        $senha_bd    = "";

        $erro_login = header("Location: $link_erro_login");
        $erro_dados = header("Location: $link_erro_dados");


        #conexao

        mysql_connect ($servidor_bd, $usuario_bd, $senha_bd) or die
            ("
                <br><b>Erro ao conectar no servidor</b> - Contate o administrador: <br><br>$nome_administrador - $email_administrador<br><br><br>
                <a href='../index.html'>Voltar</a>
            ");

        mysql_select_db ($nome_bd) or die
            ("
                <br><b>Erro ao conectar no banco de dados</b> - Contate o administrador: <br><br>$nome_administrador - $email_administrador<br><br><br>
                <a href='../index.html'>Voltar</a>
            ");

    ?>

</font>
</body>

Obrigado,

Anderson Ferreira

Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

A melhor forma de redirecionar o usuário na maioria das vezes é inserir o header location.

Mas os headers deve sempre vir antes de qualquer código que você vai retornar. Isso porque o protocolo HTTP segue um padrão que deixa o código por último. Portanto, depois que esse código começar a ser enviado ao navegador não será possível inserir um header antes dele.

Nesse caso o que você tem que fazer é não escrever nada antes de enviar o header (nenhum echo ou algo do tipo)

Link para o comentário
Compartilhar em outros sites

  • 0

Boom... Na página "conexao.php". eu coloquei o redirecionador header antes de tudo! (Podem ver no código-fonte da página acima).

E mesmo assim está com erro :S

EDITANDO:

Ops, coloquei o link onde o header irá funcionar...

Vou tentar concertar :D

Editado por Anderson Ferreira
Link para o comentário
Compartilhar em outros sites

  • 0

Na página conexao.php as únicas linhas com o header são essas:

$erro_login = header("Location: $link_erro_login");
        $erro_dados = header("Location: $link_erro_dados");
Note que a atribuição de variáveis está errada O correto seria assim:
if($erro_no_login){
header("Location: $link_erro_login"); //Redireciona, já que ocorreu um erro
}
if($erro_nos_dados){
header("Location: $link_erro_dados");
}
Além disso, você escreveu mais coisas antes do código PHP e por isso ocorre o erro
<!--
você escreveu o início da página aqui, o que impede que você possa adcionar os headers depois
-->
<?php
[...]
?>

Link para o comentário
Compartilhar em outros sites

  • 0

Boom... arrumei tudo, ta semi-funcionando!

O único problema agora é:

Quando coloca o login e/ou senha incorretos, ele não redireciona :wacko: Fica uma página toda em branco (login.php)

Fiz da seguinte maneira, como o Jonatan falou:

<?php

#variaveis

    $link_erro_login = "../erro_login.html";
    $link_erro_dados = "../erro_dados.html";


if ($erro_login)
    {
    header("Location: $link_erro_login");
    }

if($erro_dados)
    {
    header("Location: $link_erro_dados");
    }

?>

Editado por Anderson Ferreira
Link para o comentário
Compartilhar em outros sites

  • 0

Teste isso...

<?php
...

if ($erro_login)
    {
?>
<script language="JavaScript">
window.location.replace("../erro_login.html");
</script>
<?php
    }

if($erro_dados)
    {
?>
<script language="JavaScript">
window.location.replace("../erro_dados.html");
</script>
<?php
    }

?>

Link para o comentário
Compartilhar em outros sites

  • 0

Mas o que ele quer é justamente utilizar o header location para isso. JavaScript nesse caso poderá não funcionar se o cliente tiver desativado ou não tiver suporte a JS.

Provavelmente está ocorrendo algum erro ao verificar o login, aparentemente o código para redirecionar está correto.

Tente escrever na mesma página uma mensagem do tipo "Não foi possível logar" quando ocorre algum erro para verificar se o problema está aí.

Link para o comentário
Compartilhar em outros sites

  • 0

Bom galera, na página "login.php", que é a página responsável pela verificação dos dados, coloquei assim:

Ele faz a conexão com o banco de dados, procurando pelo "login" e "senha" digitados pelo usuário.

Caso o usuário, tenha digitado incorretamente, ele vai dar erro com o "or die"

Vejam abaixo como coloquei:

[...]
$conexao_eleitores = mysql_query("SELECT * FROM eleitores WHERE login='$login' AND senha='$senha'");
$RS = mysql_fetch_array($conexao_eleitores) or die ("$erro_login");
[...]
Bom, era pra funcionar assim, se o "login" e/ou "senha" estivessem incorretos: Ele ia executar o "or die", q está definido para a varíavel "$erro_login" E esta variavel, eu coloquei em outra página (conexao.php) e busquei os dados desta página, com uma include. Então, o $erro_login na página conexao.php ta assim (como o jhonatan falou):
if ($erro_login)
    {
    header("Location: $link_erro_login");
    }

Mas num ta executando nada se der erro!

Então, troquei o header ( q redireciona ) e coloquei um: echo "Erro login", caso desse erro, ele imprimisse na tela.

Mas também não imprime!

Então, lá na página "login.php", dentro do "or die", troquei o $erro_login, por um: ERRO LOGIN.

AI se der erro, ele imprime :D

Então já sei onde ta o erro: no IF !

Mas num sei o que q esta errado no IF :wacko:

Link para o comentário
Compartilhar em outros sites

  • 0

Se ainda está dando o seguinte erro:

Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/Urna_Online/conexao.php:11) in /opt/lampp/htdocs/Urna_Online/conexao.php on line 39

Warning: Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/Urna_Online/conexao.php:11) in /opt/lampp/htdocs/Urna_Online/conexao.php on line 40

coloque a seguinte linha de codigo

<?
ob_start();
?>

na primeira linha do seu arquivo conexao.php

Editado por FabianoM
Link para o comentário
Compartilhar em outros sites

  • 0

Não, este erro já sumiu :D

O problema agora é q não esta redirecionando,

Acho q o problema é no IF, pois já tentei dentro do IF colocar o header para redirecioanr e não funcionou, e também o echo pra imprimir uma frase e também não funcionou.

Então acho q tme algo de errado no IF q não sei o que éh! :S

Link para o comentário
Compartilhar em outros sites

  • 0

Aquele or die() que você colocou ali só é chamado se houver algum erro na sua query (de sintaxe, por ex.), e não se não forem encontrados registros.

Para ver se há resultados tente assim:

if(mysql_num_rows($conexao_eleitores)){
echo "Erro ! A conta não existe";
}else{
echo "A conta existe !";
}

Link para o comentário
Compartilhar em outros sites

  • 0

Meeu Deus...

Alguém tem um jeito correto de redirecioanr em PHP ?

Uma coisa tão simples, e eu nunca consigo :'(

Boom.. Vamos la, dessa vez é assim:

Estou fazendo um site de Pagode, ai qria colocar uma rádio de pagode no site. Só q essa radio, funciona assim: eu abro um programa, coloco as musicas, e ele coloca as musicas em um servidor e fica tocando enquanto o porgrama tiver aberto...

Ou seja, pra eu definir se a radio ta online ou não so manualmente.

então, fiz um registro no BD.! Se status_radio for igual a ON, ele vai pra página q tem uma mensagem pre-definida, tipo: Bem-vindo, escute as musicas abaixo... // E se status_radio for igiual a OFF, vai pra outra página escrito: radio fora do ar...

mas, num consiguo redirecionar :@ :@ :@

Tava colocando assim:

if ($RS["status_radio"]=="ON")
        {
        header ("Location: radio-on.php");
        }

if ($RS["status_radio"]=="OFF")
        {
        header ("Location: radio-off.php");
        }
Mas, o headers num pode ficar no meio da página, então tentei assim:
$status_on = header ("Location: radio-on.php");
$status_off = header ("Location: radio-off.php");

if ($RS["status_radio"]=="ON")
        {
        $status_on
        }

if ($RS["status_radio"]=="OFF")
        {
        $status_off
        }
Mas deste modo, as variáveis "$status_on" e "$status_off" ficariam soutas dentro do IF.. Tentei então:
$status_on = header ("Location: radio-on.php");
$status_off = header ("Location: radio-off.php");

if ($RS["status_radio"]=="ON")
        {
        echo "$status_on";
        }

if ($RS["status_radio"]=="OFF")
        {
        echo "$status_off";
        }

Uma coisa tão simples, e nunca consiguo :'(

alguém pode me ajudaar?

Obrigado,

Anderson Ferreira

Link para o comentário
Compartilhar em outros sites

  • 0

Anderson, use o bom senso, você já tem um tópico para o assunto continue nele (acabei de fundir o seu novo com o antigo), dê uma pesquisada sobre o que são, para que servem e tudo que é relativos aos cabeçalhos, sem isso você nunca vai entender porque isso está ocorrendo.

Sobre o 'o headers num pode ficar no meio da página', por favor né? Onde você leu isso? O que não pode é o cabeçalho já ter sido enviado para o navegador, exemplos:

1 - funciona:

<?php

$eee = 'aaaa';

$eee2 = 'aaaa';

$eee3 = 'aaaa';

$eee4 = 'aaaa';

$eee5 = 'aaaa';

$eee6 = 'aaaa';

header("Location:pagina.php");

?>

2 - não funciona:

<?php

echo 'oi!';//Algo foi impresso na tela, por consequência o cabeçalho foi enviado para o navegador

header("Location:pagina.php");

?>

Você até pode segurar o cabeçalho e soltar ele no final do script, mas isso é uma gambiarra bem pouco reocomendável.

Link para o comentário
Compartilhar em outros sites

  • 0

Em PHP não consegui, pois todo jeito tinha q ter o cabeçalho já enviado ( q no caso, é o <html> / <head> / title> )...

Então, não tinha como colocar o "header" antes disso...

Consegui então da seguinte forma (Java Script), pra quem precisar:

?>

<script>
    window.location = '../erro_login.html';
</script>

<?php

Obrigado a todos pela ajuda,

Anderson Ferreira

Editado por Anderson Ferreira
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...