FAQ
Hola,

Esta consulta es para alguien que tenga idea avanzada del manejo de headers.

A continuación describo la situación.

· En un sistema de plantillas, el documento a cargar se envía dentro de las
variables $_GET. Por ejemplo, index.php?doc=documento&..... obviamente, el
resto de las variables de la aplicación también van ahí.
· Se utilizan formularios, y se leen las variablables de $HTTP_POST_VARS.
· Los formularios funcionan de la siguiente manera:

-Se llama al INDEX.PHP, que ubica el documento o formulario HTML
-Llama a un archivo, por ejemplo formulario.prc.php, que es el proceso
previo que se debe ejecutar para ese formulario (inicializacion de datos,
comprobacion de datos, etc.
-Llama al formulario.php que contiene el formulario en sí.

Y el problema es..
-Al hacer el submit, todos los formularios SE LLAMAN A SÍ MISMOS.
(action="") ¿Para qué? De esta forma, se llama al documento.prc.php (proceso
previo), que comprueba los datos del formulario fueron ingresados
correctamente, y redirecciona a otra página por medio de header(Location).
Si los datos no son correctos o tiene que volver a mostrar el formulario, no
redirecciona nada.

Ahora bien, a veces -y sólo a veces- esa redireccion no funciona. Se llama a
si mismo de nuevo (a pesar de que los datos enviados a header() cambiaron),
comprueba los datos de nuevo (proceso previo), y redirecciona bien la
segunda vez. El problema es que a veces en ese proceso previo hay INSERT a
bases de datos, y los datos se insertan dos veces.

Se utiliza ob_start y demás para evitar la salida HTML antes de enviar el
header, y siempre hay un exit después de esas funciones.
El error se presenta tanto en Apache como en ISS, y es errático: a veces
anda de maravillas y a veces duplica todos los malditos datos.

Agradeceré cualquier sugerencia

Saludos y gracias.
Keko

Search Discussions

  • Rafael at Aug 30, 2004 at 9:57 pm

    Keko wrote:
    Hola,

    Esta consulta es para alguien que tenga idea avanzada del manejo de headers.

    A continuación describo la situación.

    · En un sistema de plantillas, el documento a cargar se envía dentro de las
    variables $_GET. Por ejemplo, index.php?doc=documento&..... obviamente, el
    resto de las variables de la aplicación también van ahí.
    · Se utilizan formularios, y se leen las variablables de $HTTP_POST_VARS.
    · Los formularios funcionan de la siguiente manera:

    -Se llama al INDEX.PHP, que ubica el documento o formulario HTML
    -Llama a un archivo, por ejemplo formulario.prc.php, que es el proceso
    previo que se debe ejecutar para ese formulario (inicializacion de datos,
    comprobacion de datos, etc.
    -Llama al formulario.php que contiene el formulario en sí.

    Y el problema es..
    -Al hacer el submit, todos los formularios SE LLAMAN A SÍ MISMOS.
    (action="") ¿Para qué? De esta forma, se llama al documento.prc.php (proceso
    previo), que comprueba los datos del formulario fueron ingresados
    correctamente, y redirecciona a otra página por medio de header(Location).
    Si los datos no son correctos o tiene que volver a mostrar el formulario, no
    redirecciona nada.

    Ahora bien, a veces -y sólo a veces- esa redireccion no funciona. Se llama a
    si mismo de nuevo (a pesar de que los datos enviados a header() cambiaron),
    comprueba los datos de nuevo (proceso previo), y redirecciona bien la
    segunda vez. El problema es que a veces en ese proceso previo hay INSERT a
    bases de datos, y los datos se insertan dos veces.

    Se utiliza ob_start y demás para evitar la salida HTML antes de enviar el
    header, y siempre hay un exit después de esas funciones.
    El error se presenta tanto en Apache como en ISS, y es errático: a veces
    anda de maravillas y a veces duplica todos los malditos datos.

    Agradeceré cualquier sugerencia
    Hola,
    no sé qué tan complejo sea el proyecto, ni qué tanto habrán intentado, pero
    tomándote la palabra (sobre "cualquier" sugerencia):
    - el no indicar ACTION en los formularios en ocasiones da problemas;
    io te recomendaría que utilizaras PHP_SELF y QUERY_STRING.
    - también realizar todas las operaciones "anteriores" sin escribir
    nada de HTML, aún cuando empleen el búffer para evitar el vaciado.

    Estas dos "sugerencias" (que igual puede que no te sirvan de nada) te las
    digo por malas experiencias que he pasado haciendo justamente lo mismo
    —aunque cuando utilizo el header Location, también escribo su "equivalente"
    código JavaScript antes del "exit()".
    --
    Rafael
  • Keko at Aug 30, 2004 at 11:55 pm
    Gracias Rafael,
    Ese era el tipo de respuesta que buscaba. La idea era encontrar a alguien
    que haya tenido problemas similares, ya que el error es bastante raro y
    específico.
    Probaré con los cambios y veré que sucede.
    Gracias nuevamente.


    "Rafael" <rsalazar@ucol.mx> escribió en el mensaje
    news:20040830214955.23621.qmail@pb1.pair.com...
    Keko wrote:
    Hola,

    Esta consulta es para alguien que tenga idea avanzada del manejo de
    headers.
    A continuación describo la situación.

    · En un sistema de plantillas, el documento a cargar se envía dentro de
    las
    variables $_GET. Por ejemplo, index.php?doc=documento&..... obviamente,
    el
    resto de las variables de la aplicación también van ahí.
    · Se utilizan formularios, y se leen las variablables de
    $HTTP_POST_VARS.
    · Los formularios funcionan de la siguiente manera:

    -Se llama al INDEX.PHP, que ubica el documento o formulario HTML
    -Llama a un archivo, por ejemplo formulario.prc.php, que es el proceso
    previo que se debe ejecutar para ese formulario (inicializacion de
    datos,
    comprobacion de datos, etc.
    -Llama al formulario.php que contiene el formulario en sí.

    Y el problema es..
    -Al hacer el submit, todos los formularios SE LLAMAN A SÍ MISMOS.
    (action="") ¿Para qué? De esta forma, se llama al documento.prc.php
    (proceso
    previo), que comprueba los datos del formulario fueron ingresados
    correctamente, y redirecciona a otra página por medio de
    header(Location).
    Si los datos no son correctos o tiene que volver a mostrar el
    formulario, no
    redirecciona nada.

    Ahora bien, a veces -y sólo a veces- esa redireccion no funciona. Se
    llama a
    si mismo de nuevo (a pesar de que los datos enviados a header()
    cambiaron),
    comprueba los datos de nuevo (proceso previo), y redirecciona bien la
    segunda vez. El problema es que a veces en ese proceso previo hay INSERT
    a
    bases de datos, y los datos se insertan dos veces.

    Se utiliza ob_start y demás para evitar la salida HTML antes de enviar
    el
    header, y siempre hay un exit después de esas funciones.
    El error se presenta tanto en Apache como en ISS, y es errático: a veces
    anda de maravillas y a veces duplica todos los malditos datos.

    Agradeceré cualquier sugerencia
    Hola,
    no sé qué tan complejo sea el proyecto, ni qué tanto habrán intentado, pero
    tomándote la palabra (sobre "cualquier" sugerencia):
    - el no indicar ACTION en los formularios en ocasiones da problemas;
    io te recomendaría que utilizaras PHP_SELF y QUERY_STRING.
    - también realizar todas las operaciones "anteriores" sin escribir
    nada de HTML, aún cuando empleen el búffer para evitar el vaciado.

    Estas dos "sugerencias" (que igual puede que no te sirvan de nada) te las
    digo por malas experiencias que he pasado haciendo justamente lo mismo
    —aunque cuando utilizo el header Location, también escribo su
    "equivalente"
    código JavaScript antes del "exit()".
    --
    Rafael

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupphp-general-es @
categoriesphp
postedAug 29, '04 at 11:10p
activeAug 30, '04 at 11:55p
posts3
users2
websitephp.net

2 users in discussion

Keko: 2 posts Rafael: 1 post

People

Translate

site design / logo © 2022 Grokbase