[PHP] Login, não regista cookie

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?
 
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:
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

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...
 
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
 
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:
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.
 
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
 
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($time, 4); 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.
 
Back
Topo