Foros del Web » Programando para Internet » PHP »

Problema con $PHP_SELF; pierdo datos de formulario

Estas en el tema de Problema con $PHP_SELF; pierdo datos de formulario en el foro de PHP en Foros del Web. Hola amigos, Lo que pasa es que estoy haciendo un sistema de respuestas automáticas e hice un formulario donde tengo un cuadro de texto, y ...
  #1 (permalink)  
Antiguo 28/08/2006, 11:24
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 14 años, 9 meses
Puntos: 5
Problema con $PHP_SELF; pierdo datos de formulario

Hola amigos,
Lo que pasa es que estoy haciendo un sistema de respuestas automáticas e hice un formulario donde tengo un cuadro de texto, y dos botones submit (Agregar y Borrar). El problema es el siguiente: Cuando uso en el atributo action="<?=$PHP_SELF?>" pasa que al terminar de escribir una nueva categoria del autoresponder y presiono ENTER al llamarse asimisma la página pasa que como si hubiese refrescado la pagina y no me ingresa ningun valor en la base de datos... Pero, si yo le hago clic al botón "Agregar" si me agrega la informacion en la BD. He llegado a pensar que podria ser que por que tengo dos botones submit haya conflicto; pero luego comprobé que no es así, pues quité el botón "Borrar" y seguia pasando lo mismo (Es decir, este botón no influía en nada). Estoy muy seguro que es por que en el action="" estoy llamando a la misma pagina.

Mi pregunta sería:
¿Porque pierdo esa informacion de formulario cuando presiono Enter y no la pierdo cuando hago clic en el botón? ¿Hay algo mas que tenga que agregar a mi codigo, alguna cabecera?

Muchas gracias por su valiosa ayuda.
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus
  #2 (permalink)  
Antiguo 28/08/2006, 11:39
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Hola Celcius.

Deberias de poner el codigo de tu formulario para que te podamos orientar al respecto asi como del codigo PHP para ver en que parte podrias tener ese "error".

Asi sin ver codigo, creo yo que el error radica en que tu haz de tratar de validar asi:
Código PHP:
if( $_POST['enviar'] == "Agregar" ) {
   
// Hacer lo de agregar
}
if( 
$_POST['enviar'] == "Borrar" ) {
  
// Hacer lo de borrar

Si esto es asi, cuando tu envias con "enter" el formulario, la variable de enviar, no llega con ningun valor, asi que tu script puede que no interprete el valor y no realice ninguna accion.

PD. Muy buena firma
  #3 (permalink)  
Antiguo 28/08/2006, 11:42
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
¿Porque pierdo esa informacion de formulario cuando presiono Enter y no la pierdo cuando hago clic en el botón? ¿Hay algo mas que tenga que agregar a mi codigo, alguna cabecera?
Una recarga de página origina una perdida de datos de tu formulario (esto en general .. uses "$_SERVER['PHP_SELF']" o no (por cierto .. usa el array superglobal $_SEVER . .no lo uses directo $PHP_SELF).

Ese comportamiento de un formulario .. y tal vez por qué tu "enter" no se asocia al evento "submit" (javascript) para hacer llegar los datos al servidor tendrás que revisarlo en el foro de HTML (para que te expliquen cosas sobre el foro tal vez . .donde está (en que botón) o el comportamiento exacto.

En javascript puedes caputar el "enter" (tecla que pulsen) y asi asignarlo a un evento "submit".

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #4 (permalink)  
Antiguo 28/08/2006, 12:07
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 14 años, 9 meses
Puntos: 5
Hola GatorV, Cluster... gracias por sus respuestas.

Efectivamente tengo una comprobacion de llegada de datos de la forma que menciona GatorV, no sé si exista alguna mejor manera de hacerlo y que no tenga esos errores..

Cluster, si, hice una pregunta acerca de como hacer lo que tu dices en el foro de Javascript, pero hasta la fecha no he encontrado una respuesta... ( http://www.forosdelweb.com/f13/dar-preferencia-boton-especifico-presionar-enter-420265/ ).. lo que pasa es que en mi sistema, no sólo va a haber un boton "submit" al cual agregarle una funcion que me "huela" la tecla "enter" y me ejecute cierta acccion.. sino que van a haber otros "submits" (Como borrar, ver usuarios activos, inactivos, agregar mensaje, etc) y en esos casos tambien tendria que presionar enter, despues de ingresar una informacion en un cuadro de texto... pasa que al rellenar un campo distinto al de "agregar nueva categoria" y presione "enter" me ejecuta lo que me dices... no daria el resultado esperado.. Es por eso que pregunto por el $PHP_SELF; pues veo que pierdo la informacion usandolo.. no veo otra salida por ahora.. que me dices?

Por cierto:
Cita:
Iniciado por Cluster Ver Mensaje
por cierto .. usa el array superglobal $_SEVER . .no lo uses directo $PHP_SELF.
Que beneficios me trae hacer eso? y muchas gracias por el consejo.

y:
Cita:
Iniciado por GatorV Ver Mensaje
PD. Muy buena firma
Muchas gracias!!
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus
  #5 (permalink)  
Antiguo 28/08/2006, 12:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Solo para que sepas, no se pierden los datos si al principio de tu script usas un var_dump( $_POST );, veras que los datos estan ahi, si estan sido enviados a tu script de regreso el problema es que tu variable de "submit" va vacia, y eso es lo que provoca que no se realice ninguna accion.

Lo que yo te recomiendo es hacer algo asi:
Código PHP:
if( isset( $_POST ) && ( count$_POST ) > ) ) {
     switch( 
$_POST['enviar'] ) {
     case 
'Agregar':
     default:
           
// Hacer las acciones de agregar (y la accion a realizar por defecto)
           
break;
     case 
'Borrar':
           
// Hacer las acciones de borrar
           
break;
     }

  #6 (permalink)  
Antiguo 28/08/2006, 12:51
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 14 años, 9 meses
Puntos: 5
Asu! hey GatorV, eso era... la verdad es que no lo sabia... pero tengo una pregunta: ¿Porque cuando nos logeamos a forosdelweb y presionamos enter si ingresamos y no se pierden los datos? hacen lo mismo?

Gracias broder..!!!
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus
  #7 (permalink)  
Antiguo 28/08/2006, 12:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por Celcius Ver Mensaje
Asu! hey GatorV, eso era... la verdad es que no lo sabia... pero tengo una pregunta: ¿Porque cuando nos logeamos a forosdelweb y presionamos enter si ingresamos y no se pierden los datos? hacen lo mismo?

Gracias broder..!!!
No entendí bien .. pero el caso es que forosdelweb.com usa sesiones y cookies para propagar muchos datos entre scripts para que "no se pierdan" entre scripts que uno va pasando y tener siempre esas variabels "a mano" (y seguras) cuando las necesites en el transcurso de la sesión (de la estancia y circulación de tu usuario en las páginas que componen tu sitio).

más info:
www.php.net/session
www.php.net/setcookie

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 28/08/2006, 13:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Iniciado por GatorV Ver Mensaje
Solo para que sepas, no se pierden los datos si al principio de tu script usas un var_dump( $_POST );, veras que los datos estan ahi, si estan sido enviados a tu script de regreso el problema es que tu variable de "submit" va vacia, y eso es lo que provoca que no se realice ninguna accion.

Lo que yo te recomiendo es hacer algo asi:
Código PHP:
if( isset( $_POST ) && ( count$_POST ) > ) ) {
     switch( 
$_POST['enviar'] ) {
     case 
'Agregar':
     default:
           
// Hacer las acciones de agregar (y la accion a realizar por defecto)
           
break;
     case 
'Borrar':
           
// Hacer las acciones de borrar
           
break;
     }

Eres un visionario (jeje) .. nunca ví que estaba trabajando sobre el mismo script ambos procesos: formulario y proceso PHP. (aunque lo debería haber deducido por el uso de "PHP_SELF".


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #9 (permalink)  
Antiguo 28/08/2006, 13:03
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Cita:
Por cierto:

Cita:
Originalmente publicado por Cluster
por cierto .. usa el array superglobal $_SEVER . .no lo uses directo $PHP_SELF.


Que beneficios me trae hacer eso? y muchas gracias por el consejo.
Seguridad ante todo y portabilidad de tu código .. nunca dependeras de la configuración de PHP: "register_globals" (php.ini) que por defecto PHP ahora viene a "off" (lo cual haría que tu código no funcione por ejemplo ..)

Más info en esta FAQ:
http://www.forosdelweb.com/showthrea...989#post238989

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 28/08/2006, 13:11
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 14 años, 9 meses
Puntos: 5
Cita:
Iniciado por Cluster Ver Mensaje
No entendí bien .. pero el caso es que forosdelweb.com usa sesiones y cookies para propagar muchos datos entre scripts para que "no se pierdan" entre scripts que uno va pasando y tener siempre esas variabels "a mano" (y seguras) cuando las necesites en el transcurso de la sesión (de la estancia y circulación de tu usuario en las páginas que componen tu sitio).

más info:
www.php.net/session
www.php.net/setcookie

Un saludo,
Es cierto, pero cuando ingreso por primera vez, no existe ninguna sesión creada y recien se crea cuando hay una verificacion de datos... mimagino ... Pero, para hacer esa verificacion antes tengo que logearme (me mareo) y lo puedo hacer de ambas formas (las que menciono arriba) 1.- Con un Enter ó 2.- Haciendo clic en Ingresar.. Yo uso "Enter" y me logeo normalmente; en eso consistía mi pregunta, si es que forosdelweb tambien usaba este tipo de verificación de informacion, pues, supuestamente tambien la variable submit del formulario de logeo (de forosdelweb) llega vacia... Bueno espero no haberte contagiado mi mareo .. Gracias Cluster por la informacion adicional...
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus
  #11 (permalink)  
Antiguo 28/08/2006, 13:41
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 11 años, 6 meses
Puntos: 2122
Si pero si te das cuenta la forma de forosdelweb (o mas bien del Foro) va a login.php que se encarga de realizar el script de validacion dependiendo si estan o no presentes los datos no busca al boton de ingresar. Busca si no esta vacio user_name y user_pass
  #12 (permalink)  
Antiguo 28/08/2006, 13:46
Avatar de Celcius  
Fecha de Ingreso: febrero-2003
Ubicación: Lima - Perú
Mensajes: 652
Antigüedad: 14 años, 9 meses
Puntos: 5
Super broder!! Muchas gracias! DTB
__________________
"Si tú conocieras el don de Dios, y quién es el que te dice: 'Dame de beber,' tú Le habrías pedido a El, y El te hubiera dado agua viva.
Sn. Juan 4:19
Jesus
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 09:26.