Foros del Web » Programando para Internet » PHP »

problemas con cookies y styles error

Estas en el tema de problemas con cookies y styles error en el foro de PHP en Foros del Web. Cuando intento escribir una cookies me sale este error: Código PHP: Warning :  Cannot modify header information  -  headers already sent by  ( output started at  / home / medievil / public_html / ...
  #1 (permalink)  
Antiguo 29/12/2005, 07:38
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
problemas con cookies y styles error

Cuando intento escribir una cookies me sale este error:

Código PHP:
WarningCannot modify header information headers already sent by (output started at /home/medievil/public_html/index.php:20in /home/medievil/public_html/index.php on line 157 
esto es lo que hay en la linea 20:

Código PHP:
19 <html>
20 <STYLE type=text/css>A:link 
y esto en la linea 157:

Código PHP:
setcookie("ejemusuario"$lacookiestime()+31536000,"/","www.dominio.com"); 
no entiendo este error, saludos
  #2 (permalink)  
Antiguo 29/12/2005, 07:47
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 8 meses
Puntos: 1
Más de lo de siempre. En las faqs y por ahí en general se ha tratado esto miles de veces. Cuando el servidor envía una página html a un navegador o un cliente cualquiera, se envían unas cabeceras con información de control y después la página en sí.
Quiere decirse, que cuando empiezas a enviar html, las cabeceras ya se han enviado previamente. Por tanto, si has empezado a enviar html (como haces en la linea 19) NO puedes modificar las cabeceras.
Y cómo se modifican las cabeceras?? Pues al usar sesiones o cookies o simplemente con la función header(). Quiere decir, que si usas las cookies como en la línea 157, debes hacerlo ANTES de la 20 (antes de enviar nada).
__________________
Mi página personal: Julián Urbano
  #3 (permalink)  
Antiguo 29/12/2005, 07:55
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
pues no comprendo muy bien en la linea 1 tengo este codigo:

Código PHP:
<?
//  Autentificator
//  Gestión de Usuarios PHP+Mysql+sesiones
//  by Pedro Noves V. (Cluster)
//  [email protected]
// ------------------------------------------
require("aut_verifica.inc.php");
$nivel_acceso=20// Nivel de acceso para esta página.
// se chequea si el usuario tiene un nivel inferior
// al del nivel de acceso definido para esta página.
// Si no es correcto, se mada a la página que lo llamo con
// la variable de $error_login definida con el nº de error segun el array de
// aut_mensaje_error.inc.php
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
exit;
header ("Location: $redir?error_login=5");
}
?>
y creo que hay esta el problema
  #4 (permalink)  
Antiguo 29/12/2005, 07:55
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Una cookie no se puede declarar entre el "HTML" que tenga tu página .. debes hacerlo ANTES de cualquier otra salida al navegador que tengas.

<?
setcookie(....)
?>
<html>
etc...

Reordena tu código si corresponde para no originar una salida (cabeceras HTTP) (como la que envia una definición de una cookie).

Un saludo,
  #5 (permalink)  
Antiguo 29/12/2005, 07:56
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 8 meses
Puntos: 1
Haz el favor de poner el código completo y te diremos exáctamente lo que está mal (aunque ya lo hemos hecho)
__________________
Mi página personal: Julián Urbano
  #6 (permalink)  
Antiguo 29/12/2005, 08:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Deberías indicar el código completo en su contexto ..

Pero . .si tu haces esto:

Código PHP:
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
 exit; 
header ("Location: $redir?error_login=5"); 

fijate que el "exit;" lo que hace: detiene la ejecución del script en ese punto.

Pero .. el "header()" lo que hace es enviar cabeceras HTTP al cliente. De todas formas así como lo usas nunca se ejecutará esa función.

Deberías usar:

Código PHP:
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
header ("Location: $redir?error_login=5"); 
exit;

Y si modificastes el código original de "Autentificator" .. indica el código completo que uses .. para ver donde haces uso de tus setcookie() y demás.

Un saludo,
  #7 (permalink)  
Antiguo 29/12/2005, 08:31
 
Fecha de Ingreso: febrero-2003
Mensajes: 763
Antigüedad: 21 años, 2 meses
Puntos: 2
pues asi es el codigo:

Código PHP:
<?

//  Autentificator
//  Gestión de Usuarios PHP+Mysql+sesiones
//  by Pedro Noves V. (Cluster)
//  [email protected]
// ------------------------------------------
require("aut_verifica.inc.php");
$nivel_acceso=20// Nivel de acceso para esta página.
// se chequea si el usuario tiene un nivel inferior
// al del nivel de acceso definido para esta página.
// Si no es correcto, se mada a la página que lo llamo con
// la variable de $error_login definida con el nº de error segun el array de
// aut_mensaje_error.inc.php
if ($nivel_acceso <= $_SESSION['usuario_nivel']){
exit;
header ("Location: $redir?error_login=5");
}
?>
<html>
<STYLE type=text/css>A:link {
    COLOR: #000000; BACKGROUND-COLOR: transparent; TEXT-DECORATION: none
}
A:visited {
    COLOR: #000000; BACKGROUND-COLOR: transparent; TEXT-DECORATION: none
}
A:hover {
    COLOR: #cc3333; BACKGROUND-COLOR: transparent; TEXT-DECORATION: none
}
.nav {
    COLOR: #000000; BACKGROUND-COLOR: transparent; TEXT-DECORATION: none
}
.nav:link {
    COLOR: #000000; BACKGROUND-COLOR: transparent; TEXT-DECORATION: none
}
.nav:visited {
    COLOR: #000000; BACKGROUND-COLOR: transparent; TEXT-DECORATION: none
}
.nav:hover {
    FONT-WEIGHT: bold; COLOR: #cc3333; BACKGROUND-COLOR: transparent; TEXT-DECORATION: underline
}
}
</STYLE>
<head>
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>Distraete.com Tutoriales, Recetas, Sexo, Chistes...</title>
</head>
<body topmargin="2" leftmargin="2">

<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber1">
  <tr>
    <td width="16%">
    &nbsp;</td>
    <td width="84%">
    <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#6666FF" width="100%" id="AutoNumber2" height="55" bgcolor="#F3C51A">
      <tr>
        <td width="100%" height="55" bordercolor="#F3C51A">
        <p align="center"><img border="0" src="p.gif" width="1" height="3"><br>
        &nbsp;<!-- INICIO GeoPromos.es - Autobanner 468x60 - www.distraete.com -->
<script language="javascript" type="text/javascript">
document.write('<iframe src="http://delivery.geopromos.es/show/20603.42597.245.1.56.subid..'+ new Date().getTime() +'" style="border:none;width:468px;height:60px;" frameborder="0" marginwidth="0" marginheight="0" scrolling="no"></iframe>');
        </script>
<noscript>
        <table border="0" bgcolor="#cccccc" width="468" height="60" align="center" valign="middle"><tr valign="middle"><td align="center"><a href="http://www.geopromos.com">Publicidad en programas de afiliados gestionada por Geopromos</a></td></tr></table></noscript>
<!-- FIN GeoPromos.es - Autobanner 468x60 - www.distraete.com --></td>
      </tr>
    </table>
    </td>
  </tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber3">
  <tr>
    <td width="100%">
    <font face="Arial">
    <img border="0" src="p.gif" width="4" height="4"></font></td>
  </tr>
</table>

<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#6666FF" width="100%" id="AutoNumber4" bgcolor="#F3C51A">
  <tr>
    <td width="50%">
    <font size="2" face="Arial">
    <marquee width="100%">¿quieres que tu mensaje aparezca en esta marquesina y sea leido por todos?</marquee></font></td>
    <td width="10%">
    <p align="center"><a href="?id=zona3"><font size="2" face="Verdana">Insertar 
    Mensaje</font></a></td>
  </tr>
</table>

<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber5">
  <tr>
    <td width="100%">
    <font face="Arial">
    <img border="0" src="p.gif" width="1" height="4"></font></td>
  </tr>
</table>
<table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#6666FF" width="100%" id="AutoNumber6" height="24" bgcolor="#F3C51A">
  <tr>
    <td width="100%" height="24">
    <table border="0" cellpadding="2" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber30">
      <tr>
        <td width="40%"><font size="2" face="Arial">Hola<b> <? echo $_SESSION['usuario_login'?>&nbsp;</b>Tu nivel de acceso 
        es:<b> <? echo $_SESSION['usuario_nivel'?>&nbsp;</b></font></td>
      </tr>
    </table>
    </td>
  </tr>
</table>
<table border="0" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber7" bgcolor="#FFFFD9" height="100%">
  <tr>
    <td width="100%" colspan="2" height="4">
    <font face="Arial">
    <img border="0" src="p.gif" width="1" height="4"></font></td>
  </tr>
  <tr>
    <td width="12%" height="1">
    <table border="0" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber26">
      <tr>
        <td width="100%">
        <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber27">
          <tr>
            <td width="100%" bgcolor="#F3C51A" bordercolor="#6666FF">
            <p align="center"><b><font size="2" face="Arial">Tu menú</font></b></td>
          </tr>
        </table>
        </td>
      </tr>
    </table>
    </td>
    <td width="77%" height="1">
    <p align="right"><font size="1" face="Arial">&nbsp;Frase del Día:
    &quot;ezo&quot; Por: Juan de Dios</font><font face="Arial"> <img border="0" src="p.gif" width="1" height="1"></font></td>
    <td width="11%" rowspan="2" valign="top" height="232">
    <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#6666FF" width="100%" id="AutoNumber9">
      <tr>
        <td width="100%">
        <table border="0" cellspacing="1" style="border-collapse: collapse" bordercolor="#111111" width="100%" id="AutoNumber10" height="38">
          <tr>
            <td width="100%" bgcolor="#F3C51A" height="8">
            <p align="center"><b><font face="Arial" size="2">Inicia Sesión</font></b></td>
          </tr>
          <tr>
            <td width="100%" height="8">
            
            <?
            
if ($_SESSION['usuario_nivel'] == 0) {
echo
"<table border='0' cellspacing='1' style='border-collapse: collapse' bordercolor='#111111' width='100%' id='AutoNumber10'><tr>
            <td width='100%' bgcolor='#FBEAA8'><form method='POST' action='index.php'><p align='center'><font face='Arial' size='2'>
              Usuario:<br></font><font size='1' face='Arial'><INPUT class=it size=14 name=user></font><font face='Arial' size='2'><br>Clave:</font><font size='1' face='Arial'><br><INPUT class=it type=password size=14 name=pass></font><table border='0' cellspacing='1' style='border-collapse: collapse' bordercolor='#111111' width='100%' id='AutoNumber31'><tr><td width='100%'><p align='center'><input type='submit' value='Entrar' name='B1'><font size='2' face='Arial'>
                <a href='?id=zona2'><u>Registro</u></a></font></td></tr></table></form></td></tr></table>"
;
} else {
$uss $_SESSION['usuario_login'];
$ppss $_SESSION['usuario_password'];
$lacookies "$uss,$ppss";
echo 
$lacookies;
setcookie("ejemusuario"$lacookiestime()+31536000,"/","www.dominio.com"); 
echo 
"Panel de control";
}
?>
el codigo sigue, pero ya es html y algun que otro codigo php supongo que no interviene en nada

saludos
  #8 (permalink)  
Antiguo 29/12/2005, 08:35
Avatar de caerolus  
Fecha de Ingreso: agosto-2004
Ubicación: Madrid, España
Mensajes: 280
Antigüedad: 19 años, 8 meses
Puntos: 1
Pues lo que te decimos. Al poner esto:
Código HTML:
<html>
<STYLE ty...
Ya estás enviando html al navegador, por lo que las cabeceras ya se han enviado. Por ello, se después intentas hacer un sercookie:
Código PHP:
setcookie("ejemusuario"$lacookiestime()+31536000,"/","www.dominio.com"); 
Pues te dice que no puedes, porque ya has enviado las cabeceras (header already sent in....). Conclusión: reordena el código para usar las coockies antes de empezar html
__________________
Mi página personal: Julián Urbano
  #9 (permalink)  
Antiguo 29/12/2005, 08:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Pues justamente haría falta ver TODA! la pagina en su conexto ..

Yo no sé si comprendes como se genera una página desde PHP (a nivel de como se trabaja con cabeceras HTTP .. como la envia PHP y como la recibe tu cliente: navegador) .. Pero esto es la base de "saber" por qué lo que haces no tiene sentido lógico si te fijas bien como funciona PHP.

Te explico:

PHP ... genera tu página HTML (o salida en general) que tengas que ver en tu cliente (navegador).

Una "página" que tu ves en tu "cliente" .. no es sólo ese "HTML/javascirpt" y demás que ves .. sino que -antes- de que llegue todo ese HTML/etc se han enviado unas cabeceras HTTP al cliente que le indican cosas como "los datos que te envio son HTML" .. y cosas por el estilo.

Bien .. una de esa "información" que se envia -antes- de tu HTML/etc .. son las "cookies" .. la cookie se le envia al navegador y se le dice "almacena esta cookie con estos datos y tal tiempo de expiración" .. eso viaja como parte de las cabeceras HTTP.

Si te fijas que PHP "compone" dinámicamente tu página HTML .. fijate como generas tu página. Tienes algo de lógica PHP .. luego envias HTML .. y por "medio" metes una declaración de una cookie (setcookie()) y luego continuas con más HTML.

Debes -pensar- como trabaja PHP . .así podrás ordenar tu código para NO enviar una cookie antes de tu HTML ni otro tipo de cabeceras HTTP como las que se envian con "header()" desde PHP al cliente.

Entendistes algo? .. (espero que si y si tienes dudas que las preguntes . .por qué esto es -realmente- saber como funciona PHP y como funciona en general todo esto de programar con lenguajes del lado del "servidor" en entorno web. Estos conecptos son aplicables a otros lenguajes como ASP, Perl .. etc en esta modalidad).


El caso es que en tu caso concreto .. debes hacer antes de tu "<html>" .. algo tipo:

Código PHP:
if ($_SESSION['usuario_nivel'] != 0) { 
$uss $_SESSION['usuario_login']; 
$ppss $_SESSION['usuario_password']; 
$lacookies "$uss,$ppss"
setcookie("ejemusuario"$lacookiestime()+31536000,"/","www.distraete.com");  

Es decir ... con tu código PHP .. al principio del mismo decides si corresponde crear tu cookie o no .. luego compones tu página HTML y si corresponde como es tu caso .. usas esas mismas condiciones para generar cierto HTML o no ..


Código PHP:
       <? 
            
if ($_SESSION['usuario_nivel'] == 0) { 
echo
"<table border='0' cellspacing='1' style='border-collapse: collapse' bordercolor='#111111' width='100%' id='AutoNumber10'><tr> 
            <td width='100%' bgcolor='#FBEAA8'><form method='POST' action='index.php'><p align='center'><font face='Arial' size='2'> 
              Usuario:<br></font><font size='1' face='Arial'><INPUT class=it size=14 name=user></font><font face='Arial' size='2'><br>Clave:</font><font size='1' face='Arial'><br><INPUT class=it type=password size=14 name=pass></font><table border='0' cellspacing='1' style='border-collapse: collapse' bordercolor='#111111' width='100%' id='AutoNumber31'><tr><td width='100%'><p align='center'><input type='submit' value='Entrar' name='B1'><font size='2' face='Arial'> 
                <a href='?id=zona2'><u>Registro</u></a></font></td></tr></table></form></td></tr></table>"

} else {
// AQUÍ ya no corresponde crea la COOKIE .. sólo el proceso de generar tu "página" con el HTML que corresponda ..la cookie ya lo hicistes antes. 
echo "Panel de control"
}

Un saludo,
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 14:12.