Foros del Web » Programando para Internet » PHP »

problemas con los encabezados

Estas en el tema de problemas con los encabezados en el foro de PHP en Foros del Web. hola estimados... tengo esta funcion en un archivo que se llama global.php Código PHP: function  cargarVisita ( $IDforoActualizar ){ global  $connection ; $cookie_foro  =  $_COOKIE ...
  #1 (permalink)  
Antiguo 02/11/2005, 12:11
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 23 años
Puntos: 1
problemas con los encabezados

hola estimados... tengo esta funcion en un archivo que se llama global.php

Código PHP:
function cargarVisita($IDforoActualizar){
global 
$connection;
$cookie_foro $_COOKIE["foro_".$IDforoActualizar]; 
    if(!isset(
$cookie_foro)){
        
$visitas mysql_query("UPDATE foros set visitas = visitas+1 WHERE IDforo =$IDforoActualizar"$connection);
        
setcookie("foro_$IDforoActualizar"time(), time()+86400);
    }

el cual incluyo desde la pagina respuestas de esta manera
require("lib/global.php");

y al final de respuestas.php hago esto
cargarVisita($IDforo);

$IDforo es la variable del foro en el que estoy
no me deja cargar la cookie!! me da el error de que los encabezados ya estan seteados.
alguien podria enseñarme como manejar esto? siempre me pasa cuando quiero hacer redirects o setear cookies
gracias!
__________________
On error no hago nada porque deje de fumar...
  #2 (permalink)  
Antiguo 02/11/2005, 14:19
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
Cita:
no me deja cargar la cookie!! me da el error de que los encabezados ya estan seteados.
Pués eso... no puedes setear una cookie (ni iniciar sesión, ni utilizar header()) si antes tienes una salida al navegador.... estos 3 procesos tienes que hacerlo antes de eso. Simplemente organizate.

www.php.net/setcookie

__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #3 (permalink)  
Antiguo 02/11/2005, 18:01
Avatar de dieguicho  
Fecha de Ingreso: noviembre-2001
Ubicación: Buenos Aires
Mensajes: 1.190
Antigüedad: 23 años
Puntos: 1
pero la salida la tengo dentro de un if!
por ej
if(!is_numeric($IDforo)){
header("Location: /error");
} else {
setcookie("IDusuario", $usuarioActual['IDusuario'], time()+86400);
}

ahi ya me da error, como deberia de organizarme para eso?
__________________
On error no hago nada porque deje de fumar...
  #4 (permalink)  
Antiguo 03/11/2005, 00:34
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
Cita:
pero la salida la tengo dentro de un if!
Supongo entendiste por "salida" a lo "devuelto" por la función... no es así. Cuando dije salida al navegdor me refería a la entrega de código... algún echo(), espacio en blanco antes de iniciar PHP.. o que este emebebido dentro de HTML. Eso es lo que debes evitar.

Esto esta mal:
Código PHP:
 echo "<html><head></head><body>"// entrega de código

header("Location: blablabla.php"); // setcookie() ó session_start()

echo "</body></html>"
Simplemente debes organizarte... Esto es correcto:
Código PHP:
header("Location: blablabla.php"); // setcookie() ó session_start()
// antes de cualquier salida... si husas header("Locaton:..") es bueno poner un exit() inmediatamente después.
echo "<html><head></head><body>"// entrega de código
echo "</body></html>"
Espero quede claro...
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
  #5 (permalink)  
Antiguo 03/11/2005, 10:30
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por jam1138
Supongo entendiste por "salida" a lo "devuelto" por la función... no es así. Cuando dije salida al navegdor me refería a la entrega de código... algún echo(), espacio en blanco antes de iniciar PHP.. o que este emebebido dentro de HTML. Eso es lo que debes evitar.

Esto esta mal:
Código PHP:
 echo "<html><head></head><body>"// entrega de código

header("Location: blablabla.php"); // setcookie() ó session_start()

echo "</body></html>"
Simplemente debes organizarte... Esto es correcto:
Código PHP:
header("Location: blablabla.php"); // setcookie() ó session_start()
// antes de cualquier salida... si husas header("Locaton:..") es bueno poner un exit() inmediatamente después.
echo "<html><head></head><body>"// entrega de código
echo "</body></html>"
Espero quede claro...
Te faltó un

exit;

despues del header() ..

No es que necesariamente cada vez que se usa "header()" se tenga que terminar la ejecución del script en ese momento (lo que hace exit;) .. pero, en este caso estamos "redireccionado" ("Location") hacia otro script/página .. por ende, la ejecución del resto de -ese- escript en concreto ya no nos hace falta, además que nos puede interferir con el resto de código sub-siguiente si es que no empezamos a tomar en cuenta condicionales (if .. else ...) para que el flujo del código nos lleve al final sin pasar por nada que no nos interese antes.

Un saludo,
  #6 (permalink)  
Antiguo 03/11/2005, 19:30
Avatar de jam1138
/** @package Moderador */
 
Fecha de Ingreso: julio-2004
Ubicación: sèveR led onieR lE
Mensajes: 9.368
Antigüedad: 20 años, 3 meses
Puntos: 102
Cita:
Iniciado por Cluster
Te faltó un

exit;

despues del header() ..
No lo puse en el código para ser "ilustrativo" (solo mostrar el ordenamiento del código) pero lo menciono entre comentarios
Cita:
Iniciado por jam1138
(...) si husas header("Locaton:..") es bueno poner un exit() inmediatamente después.
No hay aclaraciones demás.
__________________
٩(͡๏̯͡๏)۶
» Cómo hacer preguntas de manera inteligente «

"100 años después, la revolución no es con armas, es intelectual y digital"
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:16.