Ver Mensaje Individual
  #13 (permalink)  
Antiguo 26/10/2003, 14:18
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El concepto de cookies o de sesiones incluso es que al terminar tu proceso que insertas tus datos en tu BD o mandas un e-mail o lo que corresponda, "seteas" (setcookie) tus cookies y redireccionas a otra página o si misma para conseguir que tus cookies queden disponibles en tu $_COOKIE array superglobal.

El psudo código de cualquier aplicación debería ser así:

1) formulario pides datos
2) formulario envia datos a script_proceso.php o a si mismo.
3) script_proceso.php procesa esos datos: Valida datos si es necesario, intgresa datos en tu BD o manda un e-mail o hace cualquier otra operación.
4) termina la ejecución de tu script_proceso.php --> redireccionas a OTRO script o a si mismo para mostrar mensajes de error/exito del proceso. Para saber que error tuvistes o bien que mensaje de "exito" mostrar, puedes usar una variable de control tipo:

script_proceso.php
Código PHP:
<?
// recoges tus variables del formulario y las procesas ..

// termina el proceso .. Tu proceso genera alguna variable con un código del estado del proceso (exito o error). Y redireccionas automáticamente.

header("Location: otro_sitio_o_esta_misma_pagina.php?codigo=$codigo");
?>
Si necesitas usar cookies, antes de tu header() debes de hacer tu setcookie() correspondiente .. De esta forma, en esta sección del código NO debe de existir nada de HTML. Si te dás cuenta, para evitar ese "HTML" lo que se hace es "redireccionar" a otra página que será la que muestre el mensaje deacuerdo al valor que tome la varible $_GET['codigo'] ...

De esta forma, también evitas el típico problema que sucede cuando RECARGAS esa página que haces un proceso y muestras el mensajito de "voto realizado" .. Si recargo página voy a producir registros duplicados en tu BD (el código se ejecuta una vez más. Se pide confirmación de volver a enviar los datos del navegador .. si doy al "OK" .. se producirá este efecto).

Todo pasa por saber estructurar tu código y sobre todo pensar que hace PHP .. PHP procesa la página en el servidor y de tu lógica usada (estructuras de control .. bucles .. etc) generaras un HTML/javascirpt/etc u otro.

Si lo piensas así .. para "PHP" no le hace falta tu HTML cuando está realizando un proceso tipo "insertar un dato en tu BD".

Un saludo,

PD: puedes solventar estos problemas de cabeceras usando ob_start() y demás funciones de control del Buffer de salida de PHP. Pero, si te acostumbras a estructurar tu código sería lo ideal.
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.