Foros del Web » Programando para Internet » PHP »

vaciar buffer php

Estas en el tema de vaciar buffer php en el foro de PHP en Foros del Web. hola amigos..tengo el siguiente dilema.. intento que un usuario que llego al final de un proceso..por ejemplo... infreso de valores a un formulario que inserta ...
  #1 (permalink)  
Antiguo 11/05/2003, 19:42
fdy
 
Fecha de Ingreso: noviembre-2002
Ubicación: Temuco, IX Region, Chile
Mensajes: 62
Antigüedad: 15 años
Puntos: 0
vaciar buffer php

hola amigos..tengo el siguiente dilema..
intento que un usuario que llego al final de un proceso..por ejemplo... infreso de valores a un formulario que inserta los datos en mysql.... no pueda volvert atrás..
para ello..en la pagina final del proceso..creo una cookie..con un numero que identifica ese proceso...a las paginas php anteriores comparo si esa cookie tiene el valor del proceso....si es asi..redirecciono a una pagina donde indico que ya no puede modificar....si no.. quiere decir que aun no llega el final del proceso donde creo la cookie.. entonces...lo dejo continuar..
el problema es que si el usuario da un "atras" en el explorador una vez que llego al final y se creo la cookie.... no lee la cookie.. y pasa directamente sin "refrescar" la pagina..... de seguro me entienden....
recuerdo que en ASP existia un response.buffer=TRUE/FALSE con lo que siempre ejecutaba el codigo "fresco"
la pregunta es ...
como es en PHP?????
sera mejor usar sesiones????
por ahi lei que se puede bloquear el boton "atras" del explorador..pero no me parece muy eficiente...
ojala me entiendan..saludos...
fredy
  #2 (permalink)  
Antiguo 11/05/2003, 21:25
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 15 años, 4 meses
Puntos: 2
Hola,

Yo usaría sesiones para un proceso tan sencillo como ese. El asunto es pensar la forma de usarlas para que detecte que has ido atrás.

Supongo que usando variables globales como $HTTP_REFERER o algo asi.

Cluster, ayuda al muchacho !
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #3 (permalink)  
Antiguo 11/05/2003, 22:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Bueno .. lo puedes implementar con cookies .. pero en ese típo de procesos lo que se usa es una simple variable de sesion.

El caso que al entrar en tu proceso de X páginas .. registras una variable de sesion y en el resto de páginas chekeas si está creada .. Si por A o B mótivo el usuario no termina el proceso .. al volver a entrar a tu sistema entraría con una nueva sesion .. por ende tu lógica lo puede decir que ese acceso a X página directo del proceso secuencial no está premitido ... Tambien, cuando termines tu proceso de páginas secuenciales, BORRAS la session (o variables) que usastes .. Si el usuario usa su botón "hacia atras" del navegador .. estará en las mismas condiciones que en el de un acceso directo a X página de tu proceso.

Lo mismo podrias hacer con cookies .. eso sí, con tiempos de expiración de 0 segundos (para que mueran al cerrar el navegador) y borrando la cookie al terminar tu proceso secuencial de páginas (creo que esto es lo que te faltaba en tu sistema .. borrar la cookie).

Si necesistas que en tu proceso de páginas .. no se pueda volver atras a ninguna página de tu porceso .. O bien con sesiones o cookies vas "variando" el valor de tu variable de sesion o cookie .. con ello revisas por ejemplo:

Jugando con tus cookies o sesiones (variables) puedes ir propagando una variable que "varie" en cada página y revises su valor .. o registras el $HTTP_REFERER como te han comentado. El caso es saber por donde vas en tu proceso lógico de tus paginas ..

Si usas Sesiones, sería lo ideal .. las cookies pueden ser facilmente alterables por el "usuario malicioso" que quiera saltarse tu proceso ...

Un saludo,

pd: .. lo del "código siempre freseco" .. vendría a ser usar las cabeceras de "no-cache" y demas del HTTP .. (si es eso lo que te entendí .. ) .. Pero esto es própio del protocolo HTTP . aunque tu con ASP lo "lances" al navegador con esas funciones .. o en PHP lo lances via header() ...
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 12/05/2003, 00:28
fdy
 
Fecha de Ingreso: noviembre-2002
Ubicación: Temuco, IX Region, Chile
Mensajes: 62
Antigüedad: 15 años
Puntos: 0
bien, entendi lo que me indicaron....
les explicare mejor y en detalle para que vean lo que trate de decir y cual es mi problema.
Dentro de una aplicaion intranet que estoy haciendo esta el proceso de realizar una guia de despacho de productos.Para ello en la pagina index.php el usuario(JEFE DE BODEGA) selecciona vendedor y acepta el numero de guia que le doy (el ultimo numero de guia + 1) al aceptar mediante sql creo un egistro en una tabla "log_guias" con codigovendedor+nroGuia+fecha+NETO(en 0)+un par de parametros para auditar posteriormente+ESTADO="ABIERTO",al darle submit realiza esto e ingresa a despacho.php donde selecciona el producto y mediante javascript valorizo aquello, el usuario da un submit a mi formulario y (en la misma pagina) puede ver los productos que va "cargando" a la guia de despacho...
Una vez que ingresa los productos de la guia, mediante un link pasa a cerrar_guia.php donde al aceptar la pregunta si "desea cerrar la guia" agrega aun campo de una tabla mysql llamada log_guias un valor CERRADO a un campo ESTADO(Previamente en ABIERTO al crearla)...
EL asunto es...
EVITAR que una vez que cerro la guia en cerrar_guia.php pueda volver atras y por ejemplo realizar alguna modificacion, para ello se me ocurrio:
-crear una cookie llamada GUIADESPACHO al terminar(cerrar_guia.php) y pregunatar en despacho.php si la cookie(que contiene el numero de guia)existe, si es asi....coloco un header(location:pagina.php) para mandarlo a una pagina donde explique que ya no puede modificarla.
Eso funciona. sin embargo , solo lo hace alactualizar (F5) la pagina y no al darle "atras", que era lo que yo esperaba...
Vere si resulta con las sesiones, Por ello comente que en ASP yo colocaba RESPONSE:BUFFER=FALSE(creo...) y siempre lei el codigo fresco" como le llamo ....y no lo almacenado en la cache...
quizas me estoy complicando demasiado....pero trato de que el sistema no se caiga....bajo la mayoria de las posibilidades..
no pido que me manden codigo, ya que el google y un par deminutos de busqueda me permiten buscar algo, solo una orientacion de como seria lo mas eficiente para resolver ese problema que quizas es sencillo, pero para mi,,,,no tanto..
saludos desde chile....
  #5 (permalink)  
Antiguo 12/05/2003, 00:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Eso funciona. sin embargo , solo lo hace alactualizar (F5) la pagina y no al darle "atras", que era lo que yo esperaba...
Las cookies o sesiones SÓLO quedan disponibles para tus $_COOKIE o $_SESSION lecturas de las mismas (o el método que uses para leer tu variable de cookie/session) en la próxima (y esto es importate) petición al servidor ..

Osese, si tu haces:

<?
setcookie(....); // aquí ..

// en este mismo flujo del código (sin recargar página (f5 de tu navegador por ejemplo) NOO puedes leer el valor de la cookie

$_COOKIE['variable_cookie']
?>

Por eso te sucede eso .. La cookie deberías de crearla antes de entrar al script que lea dicha cookie .. Y lo mismo sucede si usas sesiones. El hecho de usar sesiones te asegura que no tienes que "pelearte" con navegadores que no acepten cookies .. ademas que el rendimiento en sí de acceso a esas variables en el Servidor veras que es más rápido que leer la cookie del Cliente.

Cita:
Por ello comente que en ASP yo colocaba RESPONSE:BUFFER=FALSE(creo...) y siempre lei el codigo fresco" como le llamo ....y no lo almacenado en la cache...
En PHP .. eso se controla directo sobre las cabeceras HTTP .. PHP en este caso sólo te pone a tu disposición la función header() para que le envies estas cabeceras al navegador. Qué o cuales cabeceras son las mejores para todo navegador eso ya no depende de PHP sino del protocolo HTTP (en www.rfc.net lo puedes ver):

Código PHP:
<?
  
// No almacenar en el cache del navegador esta página.
        
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");                     // Expira en fecha pasada
        
header("Last-Modified: " gmdate("D, d M Y H:i:s") . " GMT");        // Siempre página modificada
        
header("Cache-Control: no-cache, must-revalidate");                   // HTTP/1.1
        
header("Pragma: no-cache");                                           // HTTP/1.0
?>
(que si pudieras ver el código fuente de esa función ASP sería las cabeceras HTTP que te muestro).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #6 (permalink)  
Antiguo 12/05/2003, 01:15
fdy
 
Fecha de Ingreso: noviembre-2002
Ubicación: Temuco, IX Region, Chile
Mensajes: 62
Antigüedad: 15 años
Puntos: 0
Advertencia: La página ha caducado La página solicitada se creó utilizando la información que envió en un formulario. Esta página no está ya disponible. Como medida de precaución, Internet Explorer no volverá a enviarle la información.

Para volver a enviar la información y ver esta página Web haga clic en el botón Actualizar .

ESO ES LO QUE QUERIA!!!!!!!

gracias cluster.. me ahorraste harta lectura en algunos sitios pa aprenderlo...mmmm....ahora si el usuario manda actualizar..igual veria la pagina.. pero como la tengo en frames..guajajaj!!!! ya no podra entrar.... ademas son usuarios con un minimo conocimiento de "computacion"..en el fondo lo que hago es automatizar lo que ellos hacian en excel..pero ahora en php..mm.. me quedan 15 dias para entragrlo asi es que..1 problema menos!!

mmm... aprovechando tu buena voluntad..... te hago esta pregunta ati. y a quienes quieran responderla...
El asunto es que me gustaria que un talonario e facturas que le ntregan a un vendedor sea registrado en una tabla e la base de datos.... es decir.. si cluster le entrego facturas 1050 a 1100 cuando cluster ingrese sus facturas aparezca (SI es la primera) 1050... etc... para las guias de despacho no hay problema porque todas son correlativas...es decir la 6001 es guia de despacho para cluster la 6002 para fredy etc..... sin embargo para las facturas hay un rango para cada uno... me gustaria cargar una list/box que se llenara con las facturas tuyas....eso es facil.. pero si yo ingresara cluster 1050,cluster 1051, cluster 1052, cluster 1053, hasta la 1050 .... pero la idea no es hacerlo una por una....me entienden?????? lo que me gustaria seria algo asi como un insert multiple... o sea el jefe de bodega ingresa factura inicial de cluster.. y factura final..... y el sistema"deberia" crearte los registros por cada factura y despues simplemente hagi sql UPDATE... con los valoes de ellas... me explique bien... uffffff....
bueno..estare en linea para sugerencias...
saludos desde Chile, fredy
  #7 (permalink)  
Antiguo 12/05/2003, 01:31
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Pues .. si quieres hacer eso (personalmente crearia el registro via INSERT cuando se requiera .. no antes ..).

Usa un bucle for() y haz tu INSERT guardando en tu campo "factura_numero" ese $contador que vas a usar como variable del bucle for() .. El bucle for() lo inicializas con lo que quieras y con el fin donde quieras .. y el incremento pues .. en una unidad o lo que requieras ..

El "INSERT" que llamo yo .. implica por supuesto que se ejecute como tal .. osese .. en un mysql_query("INSERT ..... $contador"); a cada pasada del bucle for() ...

mysql_query() sólo puede ejecutar una sentencia SQL a la vez .. he de ahí q se requiera ejecutar cada "INSERT" en el bucle.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 12/05/2003, 01:41
fdy
 
Fecha de Ingreso: noviembre-2002
Ubicación: Temuco, IX Region, Chile
Mensajes: 62
Antigüedad: 15 años
Puntos: 0
sip.... es algo asi lo que me imaginaba.... el crear antes los registros asignados a cada numero de factura es con el fin de llevar un mayor control.
Estare trabajando en ello en los proximos minutos ..hasta que me de sueño saludos
fredy
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 15:05.