Foros del Web » Programando para Internet » PHP »

setcookie y Header

Estas en el tema de setcookie y Header en el foro de PHP en Foros del Web. hola buenas noches tengo este codigo Código PHP:   <?     $user  =  $_COOKIE [ "new_user" ];      mysql_connect ( 'localhost' , 'root' , 'hola' )or die ( ...
  #1 (permalink)  
Antiguo 10/02/2009, 01:27
Avatar de ilydiego  
Fecha de Ingreso: febrero-2009
Ubicación: en mi Casa
Mensajes: 71
Antigüedad: 15 años, 9 meses
Puntos: 0
setcookie y Header

hola buenas noches tengo este codigo

Código PHP:
 <?
    $user 
$_COOKIE["new_user"];
    
mysql_connect('localhost','root','hola')or die ('Ha fallado la conexion: '.mysql_error());
    
mysql_select_db('tutorias')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
    
$result mysql_query('SELECT * FROM alumnos WHERE tutor=\''.$user.'\'');
    while (
$row mysql_fetch_array($result)){
    
$num $row['ncontrol'];
    
$alu $row['nombre'];
    
setcookie("new_user2"$num);
    print 
$_COOKIE["new_user2"];
    echo 
'<form id="form1" name="form1" method="post" action=""><p align="left">';
    echo 
'<p><span class="style3">Mi Foto: </span></p>';
    echo 
'<p><span class="style3"><img src="cfotoa.php" alt="" name="" width="286" height="208" border="0" /></span></p>';
    echo 
"Nombre: ".$alu;
    }
    
?>
y me arroja el siguiente error


Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\maestrosva.php:9) in C:\xampp\htdocs\maestrosva.php on line 94

no se si sera por que se esta utilizando otra cookie ahi o por que??

ayudaaaaa
  #2 (permalink)  
Antiguo 10/02/2009, 06:50
 
Fecha de Ingreso: septiembre-2004
Mensajes: 324
Antigüedad: 20 años, 2 meses
Puntos: 13
Respuesta: setcookie y Header

Cita:
Iniciado por ilydiego Ver Mensaje
hola buenas noches tengo este codigo

Código PHP:
 <?
    $user 
$_COOKIE["new_user"];
    
mysql_connect('localhost','root','hola')or die ('Ha fallado la conexion: '.mysql_error());
    
mysql_select_db('tutorias')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
    
$result mysql_query('SELECT * FROM alumnos WHERE tutor=\''.$user.'\'');
    while (
$row mysql_fetch_array($result)){
    
$num $row['ncontrol'];
    
$alu $row['nombre'];
    
setcookie("new_user2"$num);
    print 
$_COOKIE["new_user2"];
    echo 
'<form id="form1" name="form1" method="post" action=""><p align="left">';
    echo 
'<p><span class="style3">Mi Foto: </span></p>';
    echo 
'<p><span class="style3"><img src="cfotoa.php" alt="" name="" width="286" height="208" border="0" /></span></p>';
    echo 
"Nombre: ".$alu;
    }
    
?>
y me arroja el siguiente error


Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\maestrosva.php:9) in C:\xampp\htdocs\maestrosva.php on line 94

no se si sera por que se esta utilizando otra cookie ahi o por que??

ayudaaaaa
Hola
está usando: setcookie("new_user2", $num);
no puedes declarar una nueva cookie cuando ya se ha enviado la cabecera HTTP.


Saludos
  #3 (permalink)  
Antiguo 10/02/2009, 08:49
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: setcookie y Header

Sí puedes porque de hecho el setear cookies es enviar cabeceras al navegador.

Qué estás intentando hacer en la línea 94 de ese script?

  #4 (permalink)  
Antiguo 10/02/2009, 12:01
Avatar de ilydiego  
Fecha de Ingreso: febrero-2009
Ubicación: en mi Casa
Mensajes: 71
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: setcookie y Header

Cita:
Iniciado por okram Ver Mensaje
Sí puedes porque de hecho el setear cookies es enviar cabeceras al navegador.

Qué estás intentando hacer en la línea 94 de ese script?

Código PHP:
 <?
    $user 
$_COOKIE["new_user"];
    
mysql_connect('localhost','root','hola')or die ('Ha fallado la conexion: '.mysql_error());
    
mysql_select_db('tutorias')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
    
$result mysql_query('SELECT * FROM alumnos WHERE tutor=\''.$user.'\'');
    while (
$row mysql_fetch_array($result)){
    
$num $row['ncontrol'];
    
$alu $row['nombre'];
/*Linea 94*/    setcookie("new_user2"$num);
    print 
$_COOKIE["new_user2"];
    echo 
'<form id="form1" name="form1" method="post" action=""><p align="left">';
    echo 
'<p><span class="style3">Mi Foto: </span></p>';
    echo 
'<p><span class="style3"><img src="cfotoa.php" alt="" name="" width="286" height="208" border="0" /></span></p>';
    echo 
"Nombre: ".$alu;
    }
    
?>

El error me lo manda cuando declaro la cookie, que puedo hacer o donde puedo declarar o que hago
  #5 (permalink)  
Antiguo 10/02/2009, 12:02
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: setcookie y Header

En la línea 9 que es lo que tienes? Ya que de ahí empieza el problema..

Saludos
  #6 (permalink)  
Antiguo 10/02/2009, 12:05
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: setcookie y Header

El error que obtienes es claro:

FAQ PHP #186. ¿Por qué me sale "Warning: Cannot modify header information - headers already sent by (output started at [1]:[2]) in [3] on line [4]"

En la línea 94 quieres crear una cookie, pero en la línea 9 estás imprimiendo algo. Verifica eso. No puedes crear cookies si ya has enviado algo al navegador.

  #7 (permalink)  
Antiguo 10/02/2009, 12:24
 
Fecha de Ingreso: septiembre-2004
Mensajes: 324
Antigüedad: 20 años, 2 meses
Puntos: 13
Respuesta: setcookie y Header

Cita:
Iniciado por okram Ver Mensaje
Sí puedes porque de hecho el setear cookies es enviar cabeceras al navegador.

Qué estás intentando hacer en la línea 94 de ese script?

Has leido el error?

No puede por que ya se han enviado las cabeceras enteriormente.

Saludos
  #8 (permalink)  
Antiguo 10/02/2009, 15:51
Avatar de ilydiego  
Fecha de Ingreso: febrero-2009
Ubicación: en mi Casa
Mensajes: 71
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: setcookie y Header

Código PHP:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ITV | Sistema Administrador de Tutorias | Windows</title>
<link href="css/stylesheet.css" rel="stylesheet" type="text/css" />
/*esta es la 6 antes 9*/<script src="Scripts/AC_RunActiveContent.js" type="text/javascript"></script>
<style type="text/css">
<!--
a:link {
    text-decoration: none;
}
a:visited {
    text-decoration: none;
}
a:hover {
    text-decoration: underline;
}
a:active {
    text-decoration: none;
}
.style5 {
    color: #003399;
    font-weight: bold;
}
.style6 {
    font-size: 14px;
    font-weight: bold;
    color: #003399;
}
-->
</style>
<script type="text/javascript">
<!--
function MM_effectSlide(targetElement, duration, from, to, toggle)
{
    Spry.Effect.DoSlide(targetElement, {duration: duration, from: from, to: to, toggle: toggle});
}
function MM_effectHighlight(targetElement, duration, startColor, endColor, restoreColor, toggle)
{
    Spry.Effect.DoHighlight(targetElement, {duration: duration, from: startColor, to: endColor, restoreColor: restoreColor, toggle: toggle});
}
//-->
</script>
</head>

<body class="twoColFixLtHdr">

<div id="container">
  <div id="header">
    <h1>
      <script type="text/javascript">
AC_FL_RunContent( 'codebase',,'width','803','height','150','hspace','0','vspace','0','align','top','tabindex','0','title','Instituto Tecnológico de Veracruz','src','img/header','quality','high','pluginspage',,'movie','img/header' ); //end AC code
</script>
      <noscript><object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="803" height="150" hspace="0" vspace="0" align="top" tabindex="0" title="Instituto Tecnológico de Veracruz">
        <param name="movie" value="img/header.swf" />
        <param name="quality" value="high" />
        <embed src="img/header.swf" width="803" height="150" hspace="0" vspace="0" align="top" quality="high" pluginspage= type="application/x-shockwave-flash"></embed>
</object>
</noscript>
<!-- end #header -->
    </h1>
  </div>
    <div id="sidebar1">
    <h3>Menu Principal <em></em></h3>
    <ul>
    <li><a href="maestrosp.php" onmouseover="window.status='';return true">Inicio - Maestros</a></li>
    <br />    
    <li><a href="maestroscp.php" onmouseover="window.status='';return true">Cambiar Perfil</a></li>
    <br />    
    <li><a href="maestrosrp.php" onmouseover="window.status='';return true">Responder Preguntas</a></li>
    <br />
    <li><a href="maestrosvp.php" onmouseover="window.status='';return true">Ver Preguntas</a></li>
    <br />
    <li><a href="maestrosva.php" onmouseover="window.status='';return true">Mis Alumnos</a></li>
    <br />
    <li><a href="index.php" onmouseover="window.status='';return true">Descontar</a></li>
    </ul>
  </div>
    <div id="mainContent">
    <h1 class="contentheading"><a name="top"></a>Sistema Administrador De Tutorias -  Maestros - Mis Alumnos-</h1>
    <p>
      <?
    $user 
$_COOKIE["new_user"];
    
mysql_connect('localhost','root','hola')or die ('Ha fallado la conexion: '.mysql_error());
    
mysql_select_db('tutorias')or die ('Error al seleccionar la Base de Datos: '.mysql_error());
    
$result mysql_query('SELECT * FROM alumnos WHERE tutor=\''.$user.'\'');
    while (
$row mysql_fetch_array($result)){
    
$num $row['ncontrol'];
    
$alu $row['nombre'];
/*Error*/    setcookie("new_user2"$num);
    print 
$_COOKIE["new_user2"];
    echo 
'<form id="form1" name="form1" method="post" action=""><p align="left">';
    echo 
'<p><span class="style3">Mi Foto: </span></p>';
    echo 
'<p><span class="style3"><img src="cfotoa.php" alt="" name="" width="286" height="208" border="0" /></span></p>';
    echo 
"Nombre: ".$alu;
    }
    
?>
    </p>
    <p>&nbsp;</p>
    <p class="contentheading"><a href="#top" onmouseover="window.status='';return true"><img src="img/top.png" title="Ir arriba" alt="Ir arriba" border="0"/> Ir arriba</a></p>
  </div>
    <!-- This clearing element should immediately follow the #mainContent div in order to force the #container div to contain all child floats -->
    <div id="footer">
  <p align="center"><a href="index.html" class="sublevel" onmouseover="window.status='';return true">INICIO</a> <strong>|</strong> <a href="#" class="sublevel" onmouseover="window.status='';return true">Alumnos</a> <strong>|</strong> <a href="#" class="sublevel" onmouseover="window.status='';return true">Maestros</a><br />
    <br />
    Instituto Tecnológico de Veracruz - 2008</p>
  <!-- end #footer --></div>
<!-- end #container --></div>
</body>
</html>
ahi esta marcada la linea a la que se refiere de la cabecera,
jejejeje tube que poner todo el codigo
  #9 (permalink)  
Antiguo 10/02/2009, 15:56
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: setcookie y Header

Consultemos el manual.

Cita:
setcookie() defines a cookie to be sent along with the rest of the HTTP headers. Like other headers, cookies must be sent before any output from your script (this is a protocol restriction). This requires that you place calls to this function prior to any output, including <html> and <head> tags as well as any whitespace.
Queda claro entonces que usar setcookie es una manera simplificada de enviar un tipo más de headers al navegador.

Hace un par de meses se discutió ampliamente sobre header() y su interacción con el navegador. La conclusión a la que llegamos fue que hay dos procesos a tomar en cuenta cuando de cabeceras se trata. El hecho de usar header(), session_start(), setcookie(), etc. establece algunas cabeceras que tendrá nuestra página, mas no envía aún ningún contenido al navegador. Recién cuando se produce una salida, como un texto, o cuando se termina la ejecución del script, es que se produce el envío del paquete completo de cabeceras, y a partir de ese entonces ya no se pueden indicar más cabeceras.

En los mensajes de error, esto último es tratado como output (output started at C:\xampp\htdocs\maestrosva.php:9). Mientras no se produzca un output al navegador podemos seguir enviando, e incluso, reescribiendo cabeceras. Entiéndase por output, como ya dije, texto, impresiones, o simplemente el fin de ejecución del script.

Existe un poco de ambigüedad en estos conceptos.

  #10 (permalink)  
Antiguo 10/02/2009, 16:00
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: setcookie y Header

Pues es claro el error todo ese HTML antes evita enviar la cookie, recuerda no puedes enviar NADA de contenido al explorador antes de setcookie, viendo tu código desde el <html> tienes el problema.

Saludos
  #11 (permalink)  
Antiguo 10/02/2009, 16:04
Avatar de ilydiego  
Fecha de Ingreso: febrero-2009
Ubicación: en mi Casa
Mensajes: 71
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: setcookie y Header

Osea que te refires a que tengo que envia una salida texto (con un echo o algo asi) para despues crear mi cookie

SIno
Creo que la verdad me hise mas pelotas
  #12 (permalink)  
Antiguo 10/02/2009, 16:11
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: setcookie y Header

Cita:
Iniciado por ilydiego Ver Mensaje
te refires a que tengo que envia una salida texto (con un echo o algo asi) para despues crear mi cookie
Todo lo contrario

Pon tu setcookie() al inicio del script, cuando todavía no has impreso nada, para solucionar tu problema.

  #13 (permalink)  
Antiguo 10/02/2009, 16:22
Avatar de ilydiego  
Fecha de Ingreso: febrero-2009
Ubicación: en mi Casa
Mensajes: 71
Antigüedad: 15 años, 9 meses
Puntos: 0
Respuesta: setcookie y Header

Cita:
Iniciado por okram Ver Mensaje
Todo lo contrario

Pon tu setcookie() al inicio del script, cuando todavía no has impreso nada, para solucionar tu problema.

Bueno pero ahora el problema seeria que el valor de la cookie seria nulo,
por que a donde la estoy poniendo estoy consiguiendo el valor y ahi mismo lo guardo n la cookie.
  #14 (permalink)  
Antiguo 10/02/2009, 16:28
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 5 meses
Puntos: 2135
Respuesta: setcookie y Header

Pues mueve todo ese proceso al inicio, en general un script PHP debe de ser algo así:

1.- Inicio del Script
2.- Consultas a la BDD
3.- Procesos en PHP
4.- Impresión de resultados

Así toda la parte de la logica la gestionas antes de imprimir el resultado (o sea tu página HTML).

Saludos
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 21:24.