Foros del Web » Programando para Internet » PHP »

setcookie

Estas en el tema de setcookie en el foro de PHP en Foros del Web. Intentando crear unas cookies me da este error: Warning: Cannot add header information - headers already sent by (output started at /var/www/def/ai/Usuarios-Cookies/ingresar2.php:16) in /var/www/def/ai/Usuarios-Cookies/ingresar2.php on ...
  #1 (permalink)  
Antiguo 18/02/2005, 11:38
 
Fecha de Ingreso: abril-2004
Mensajes: 69
Antigüedad: 20 años
Puntos: 0
setcookie

Intentando crear unas cookies me da este error:

Warning: Cannot add header information - headers already sent by (output started at /var/www/def/ai/Usuarios-Cookies/ingresar2.php:16) in /var/www/def/ai/Usuarios-Cookies/ingresar2.php on line 47

Warning: Cannot add header information - headers already sent by (output started at /var/www/def/ai/Usuarios-Cookies/ingresar2.php:16) in /var/www/def/ai/Usuarios-Cookies/ingresar2.php on line 48

Creo las cookies en un archivo ingresar2.php, asi:

setcookie("usNick",$nickN,time()+7776000);
setcookie("usPass",$passN,time()+7776000);

$nickN, y $passN son :
$nickN = quitar($HTTP_POST_VARS["usuario"]);
$passN = quitar($HTTP_POST_VARS["passwd"]);

Por favor, decidme porque no me crea las cookies y me da ese error que no se que quiere decir. Muchas gracias
  #2 (permalink)  
Antiguo 18/02/2005, 13:09
 
Fecha de Ingreso: enero-2004
Mensajes: 87
Antigüedad: 20 años, 3 meses
Puntos: 1
Buenas

Ese error es porque has enviado algo de código antes de poner las cookies, es decir, para solucionarlo, tienes que utilizar setcookie antes de enviar cualquier dato al usuario (hacer un echo "tal", o mostrar html).

Saludos
  #3 (permalink)  
Antiguo 18/02/2005, 13:19
 
Fecha de Ingreso: febrero-2005
Mensajes: 670
Antigüedad: 19 años, 2 meses
Puntos: 0
El problema es que las cookies tienen que ser creadas antes de envíar cualquier otro contenido al browser. Por el error que te devuelve me imagino que el código que pusiste está entre medio del HTML. Siempre tiene que estar antes que cualquier otro contenido. Generalmente con ponerlo antes de <!DOCTYPE...> basta (o antes de <html> si no usas doctype... ).

Suerte
Fede

Última edición por thunder.scripts; 19/02/2005 a las 12:19
  #4 (permalink)  
Antiguo 18/02/2005, 15:43
Avatar de Nefertiter  
Fecha de Ingreso: enero-2003
Ubicación: Rosario
Mensajes: 1.316
Antigüedad: 21 años, 3 meses
Puntos: 9
podes arreglarlo poniendo ob_start(); al principio de TODO..
  #5 (permalink)  
Antiguo 21/02/2005, 06:22
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por Nefertiter
podes arreglarlo poniendo ob_start(); al principio de TODO..
Realmente si bien con esa opción podría solventar el problema .. es un consumo extra de recursos del servidor para una cosa que se -debe- resolver ordenando el código de tu aplicación siempre con cociencia de que se está programando en PHP .. no en "HMLT" con "incrustraciones" de PHP .. es bien diferente conocer que PHP genera tu página HTML en función de la lógica de este que al HTML le incrustras PHP para hacer alguna cosa.

------------

Si ponen el código completo de "ingresar2.php" te podríamos orientar a como "ordenar" dicho código para que puedas usar ese tipo de funciones donde corresponda.

Un saludo,
  #6 (permalink)  
Antiguo 21/02/2005, 09:17
 
Fecha de Ingreso: abril-2004
Mensajes: 69
Antigüedad: 20 años
Puntos: 0
aqui esta el codigo entero

<?
include("func/vars.inc.php");
include("func/functions.inc.php");
include("func/data.inc.php");
?>
<html>
<head>
<title>Identificación de usuario en las areas restringidas</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link rel="stylesheet" type="text/css" href="../Estilos/Estilos/estiloGDT.css">
<link rel="stylesheet" type="text/css" href="../Estilos/estiloGDT.css">
<link rel="stylesheet" type="text/css" href="../Estilos/estiloGDT.css">
</head>

<body>
<?

//Aquí conexión o include() de archivo de conexion con base de datos.
include("conexion_bd.php");

function quitar($mensaje)
{
$mensaje = str_replace("<","<",$mensaje);
$mensaje = str_replace(">",">",$mensaje);
$mensaje = str_replace('\\\\','\'',$mensaje);
$mensaje = str_replace("\'","'",$mensaje);
$mensaje = str_replace("\"",'"',$mensaje);
return $mensaje;
}

if(trim($HTTP_POST_VARS["usuario"]) !="" && trim($HTTP_POST_VARS["passwd"]) !="")
{
$nickN = quitar($HTTP_POST_VARS["usuario"]);
$passN = quitar($HTTP_POST_VARS["passwd"]);

//$result = mysql_query("SELECT passwd FROM usuarios WHERE usuario='$nickN'");
$conditions = "WHERE usuario='$nickN'";
$result = db_query("usuarios","passwd",$conditions);


if($row = db_fetch_array($result))
{
if($row["passwd"] == $passN)
{
//90 dias dura la cookie = (60*60*24*90) = 7776000 segundos
setcookie("usNick", $nickN, time()+7776000);
setcookie("usPass", $passN, time()+7776000);
//Ingreso exitoso, ahora sera dirigido a la pagina restringida.

?>
<SCRIPT LANGUAGE="javascript">
alert ("Usuario con acceso a esta area");
location.href="login.php";
</SCRIPT>
<?

}
else
{
?>
<script language="javascript">
alert ("Password incorrecto");
</script>
<?
}
}
else
{
?>
<script language="javascript">
alert ("Usuario no existente en la base de datos");
</script>
<?
}
mysql_free_result($result);
}
else
{
?>
<script language="javascript">
alert ("Debe especificar un nombre de usuario y password");
</script>
<?
}
//mysql_close();
db_disconnect();
?>
<div align="center">
<table border="0" cellpadding="4" width="99" cellspacing="4">
<tr>
<td width="37"><a href="http://correo/ai" target="_top"><img border="0" src="../Images/IcoGDT.gif" alt="Página principal" width="50" height="50"></a></td>
<td width="66"><a href="javascript:history.back();" target="_top"><img border="0" src="http://correo/ai/Images/icoflecha.jpg" alt="Volver a la página anterior" width="50" height="50"></a></td>
</tr>
</table>
</div>
</body>
</html>
  #7 (permalink)  
Antiguo 21/02/2005, 12:16
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Toda esa lógica "PHP" no debe estar bajo <hthml> .. sino mas o menos en el primer bloque de PHP que defines (<? .. ?>) donde tienes tus include() ..

Ahora . .tu muestras mensajitos si ha ocurrido un error o cuando todo funcinó correctamente.

Esos mensajes no debes mostrarlos ni procesarlos (su "vista") en ese código que es de proceso puro de PHP en sí.

Redirecciona a otra página donde muestres esos mensajes tipo:

Código PHP:
if($row["passwd"] == $passN

//90 dias dura la cookie = (60*60*24*90) = 7776000 segundos
setcookie("usNick"$nickNtime()+7776000); 
setcookie("usPass"$passNtime()+7776000); 
//Ingreso exitoso, ahora sera dirigido a la pagina restringida. 
header ("Location: login.php?mensaje=1");
exit;
?> 
Y quitando todo ese HTML que tienes ahí que no "sirve" para nada en ese proceso concreto.

En tu "login.php" (no sé si es ese mismo script u otro ..) es donde mostraras los mensajes de error/exito en función de esa variable "mensaje" que le envias con el "código" del mensaje a mostrar:

Código PHP:
<?
if (isset($_GET['mensaje'])){
// aquí como corresponde .. usas todo el HTML que necesites para componer tu "pagina":
?>
<html>
<body>
etc...
<? echo "Mensaje: ".$_GET['mensaje']; ?>
</body>
</html>
<?
} else {
// otros procesos si corresponde . .sobre todo si tienes que meter todo en un mismo script ..
// aquí no corresponde nada de HTML por ejemplo (sería la parte de tu proceso PHP en sí)
}
?>
Un saludo,

Última edición por Cluster; 21/02/2005 a las 12:17
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:11.