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

[PHP] Login, não regista cookie

Discussão em 'Web Development' iniciada por xsteal, 31 de Julho de 2008. (Respostas: 16; Visualizações: 1340)

  1. xsteal

    xsteal Power Member

    Tou a fazer um sistema de login, no qual tou a usar cookies, e quando faco o login, ele verifica bem na BD, mas depois quando e para gravar o cookie da este erro:


    Warning: Cannot modify header information - headers already sent by (output started at /web/sites/vhbu3/1/235/73406/public/www/catalogo/configuracao.php:1) in /web/sites/vhbu3/1/235/73406/public/www/catalogo/entrar.php on line 61

    Warning: Cannot modify header information - headers already sent by (output started at /web/sites/vhbu3/1/235/73406/public/www/catalogo/configuracao.php:1) in /web/sites/vhbu3/1/235/73406/public/www/catalogo/entrar.php on line 62
    Login feito com sucesso!

    e não grava o cookie.

    tenho este código:

    PHP:
        if (!isset($_GET['entrou'])) {

        echo 
    '
        <table border="0" align="center" cellpadding="0" cellspacing="0">
    <tr>
    <td><form name="form" method="post" action="index.php?c=entrar&entrou">
    <table width="100%" border="0" cellspacing="4" cellpadding="0">
    <tr>
    <td colspan="3"><strong>Login</strong></td>
    </tr>
    <tr>
    <td>Nome de Utilizador</td>
    <td><input name="username" type="text" id="username"></td>
    </tr>
    <tr>
    <td>Password</td>
    <td><input name="password" type="password" id="password"></td>
    </tr>

    <tr>
    <td>&nbsp;</td>

    <td><input type="submit" name="Submit" value="Login"> &nbsp;
    <input type="reset" name="Reset" value="Limpar"></td>
    </tr>
    </table>
    </form></td>
    </tr>
    </table>'
    ;

    } else {

        
    $username1 $_POST['username'];
        
    $password1 $_POST['password'];

        if (!
    $username1 | !$password1) {
        
        echo 
    'Campos em branco.';
        
        } else {

        
    $user mysql_query("SELECT * FROM users WHERE username = '$username1'");
        
        if( (
    $usez mysql_num_rows($user) ) == 0)
                        {
                            echo 
    'Utilizador não existe.';
                        } else {
    $superquery mysql_query("SELECT * FROM users WHERE username = '$username1' AND password = '$password1'");


    if (
    mysql_num_rows($superquery) == 1){


    setcookie("username"$username1$cookieTime);
    setcookie("password"$password1$cookieTime);
        
        echo 
    'Login feito com sucesso!';
        
        }else{
        
        echo 
    'Falhou.';
    }
    }
    }
    }
    O valor $cookieTime tou a buscar noutro documento que tenho assim:

    $cookieTime = time()+7*86400;

    ninguem sabe o porque de isto acontecer?
     
  2. MPalhas

    MPalhas Power Member

    não podes ter output nenhum antes de definires o cookie. tudo o que é texto a ser enviado para o cliente (os echo's e tudo o que esteja fora das tags php) tem que vir no fim

    primeiro fazes os cookies, sessions, headers etc. só depois é que podes fazer output
     
    Última edição: 31 de Julho de 2008
  3. xsteal

    xsteal Power Member

    mas neste ficheiro nao está nada de mal ou esta?

    já vi no ficheiro configuraçao e lá não está nada de echo nem nada disso...
     
  4. hostmake

    hostmake Power Member

    Alguma coisa tens, lol, dai o erro que deu, e o que ele disse.

    E acho que é no ficheiro configuração.
     
  5. MPalhas

    MPalhas Power Member

    parece que não percebeste bem. vou explicar de outra maneira

    PHP:
    <?php
    echo "Isto é output";
    ?>

    "Isto também porque está fora do PHP"

    <?php
    setcookie
    (...);  //e isto vai dar erro
    vai dar erro porque existe output antes de se executar o setcookie.
    não importa se é no mesmo ficheiro (se fizeres include a um ficheiro que também tem output vai dar ao mesmo)
    é precisamente este erro que tens no teu código

    a maneira correcta de fazer isto seria ao contrário:

    PHP:
     <?php
     setcookie
    (...);  //assim já nao dá erro

    echo "Isto é output";
    ?>

    "Isto também porque está fora do PHP"

    por isso é que é que bom separar e organizar o código, e não por tudo apenas a medida que te vais lembrando
     
  6. xsteal

    xsteal Power Member

    e que continua-me a dar o mesmo erro... o meu ficheiro de config so tem a conexão a base de dados

    será por eu ter no host assim: mysql04-vh.host7x24.com ?
     
    Última edição: 31 de Julho de 2008
  7. hostmake

    hostmake Power Member

    Ok, e que tal fazeres assim, mostras a página do código todo onde registas as cookies, todo todo.

    E se tiveres includes pelo meio, colas também, ou disponibilizas para download, ou metes online num .txt.
     
  8. MPalhas

    MPalhas Power Member

    verifica se tens alguma coisa (nem que seja um simples espaço :P) fora das tags php

    aliás, se reparares no erro, ele indica-te em que linha e em que ficheiro é começou o output
     
  9. xsteal

    xsteal Power Member

    Eu abocado pus me a fazer diferente, no qual me da o mesmo erro mas eu meto na mesma:

    index.php

    PHP:
    <?php include('configuracao.php');
    include(
    'libs/funcoes.php');
    session_start();
    $startTimer microtime();?>
    <!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" />
    <title>EVOK • Catalogo</title>
    <link href="estilos/estilo.css" rel="stylesheet" type="text/css" />
    </head>
    <body>
    <div id="wrapper">
    <div id="header"><div>
    <div id="menu">
    <ul id="nav">
    <li><a href="index.php">layouts</a></li>
    <li><a href="index.php?c=pesquisa">pesquisar</a></li>
    <li><a href="index.php?c=contactar">contactar</a></li>
    </ul>

    </div></div>
      <div id="loginbox"><?php
    definelogin
    ();
    if(
    logado() == FALSE){
    ?><form action="index.php" method="post" >
    <input class="username" name="nick" value="Nick" /><br />
    <input class="password" name="password" type="password" value="Password"/><br />
    <input type="image" src="imagens/entrar.png" name="login" value="Login" />
    <a href="index.php?c=pedirconta">Pedir Conta</a>
    </form>
    <?php } else { ?>
    Ola, <?php echo $_SESSION["nick"]; ?>!<br />
    <small><a href="index.php?c=sair">Sair</a></small><br /><br />

    <?php ?></div>
      <div align="right">
      
      <img src="images/logo.png" />&nbsp;</div></div>
    <div id="container">

    <div id="main">
    <?
    $c = $_GET['c'];
    if(!isset($c)) $c="layouts";
    $invalide = array('/','/\/',':','.');
    $c = str_replace($invalide,' ',$c);
    if(!file_exists($c.".php")) $c = "layouts";
    include($c.".php");
    ?>
    </div>
    <div class="clearer"> </div>
    </div>
    <div id="footer">
      EVOK &copy; 2008 <?php
    $endTimer 
    microtime();
    $time $endTimer $startTimer;
    $tempo round($time4); echo 'Página gerada em '.$tempo.'s.'?><a href="./administrator/"> Admin</a>
    </div>
    </div> 
    </body>
    </html>
    logo no index me da o erro, podem ver se quiserem em : http://evok.pt/catalogo/

    configuracao.php


    PHP:
    <? 
    $db_host="mysql04-vh.host7x24.com"
    $db_username="cm228175"
    $db_password="-"
    $db_name="cm228175"

    mysql_connect("$db_host""$db_username""$db_password")or die("Não se consegue connectar ao server.");
    mysql_select_db("$db_name")or die("Não se consegue seleccionar a base de dados.");
    ?>
    por razoes obvias nao pus as pw. e assim que tenho, copiar + colar.
     
  10. Finkas

    Finkas Power Member

    no inicio do código colocas esta funçao: ob_start();

    e no final do código colocas esta: ob_end_flush();

    cumprimentos ;)
     
  11. xsteal

    xsteal Power Member

    es um génio :victory:
     
  12. xsteal

    xsteal Power Member

    ja que criei este tópico, alguem sabe algum codigo css para tirar o border de uma imagem hiperligada?
     
  13. MPalhas

    MPalhas Power Member

    border:none ??
     
  14. xsteal

    xsteal Power Member

    nao.. exprimentei e não deu...
     
  15. candycane

    candycane Power Member

    experimenta border:0px;
     
  16. xsteal

    xsteal Power Member

    Nem assim deu...

    ninguem sabe?
     
  17. hostmake

    hostmake Power Member

    jesus christ

    <img ...... border="0">
     

Partilhar esta Página