Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > PHP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-09-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Rareza en Internet Explorer al enviar un formulario

Hola,

Acaba de informarme nuestro amigo Jhonny sobre un problema en cierto proyecto que me traigo entre manos. Dicho problema resulta ser muy curioso, pues sólo se da en Internet Explorer, no así en Opera, Safari ni Firefox, y, sólo se da además si las cosas se hacen de cierto modo. A ver si un poco de código aclara el asunto, luego explicaré qué se supone que hay que hacer para probar dicho código:

Código PHP:
<?php

// index.php

if(isset($_POST['submit'])){
  die(
'Ok, form are submitted');
}

?>

<form method="post" action="./index.php">
 <input type="text" name="query" />
 <input type="submit" name="submit" />
</form>
Como veis, ahí se muestra un formulario HTML, que cuenta con una sola casilla "de texto" y un botón para "enviar" dicho formulario. En el mismo "script" se procesa dicho formulario, y, como veis, se comprueba si ha llegado a nosotros la variable "submit" o no ha llegado.

Pues bien, si el formulario se envía mediante el botón, haciendo clic en el botón, este se procesa como se espera, y todo va bien en los cuatro navegadores mencionados. Pero, si se opta por usar la tecla "ENTER", cuando se ha escrito algo (o sin escribir) en la casilla de texto, entonces Internet Explorer "falla".

Al menos se comporta distinto al resto de navegadores. Efectivamente, el resto de navegadores envían junto al formulario la variable "submit", se pulse sobre el botón o se utilice la tecla "ENTER", pero, Internet Explorer sólo sabe de la variable "submit" si se hace uso del botón para enviar el formulario. Ahora bien, ¿qué es lo que puede estar pasando?

Gracias de antemano por cualquier tipo de sugerencia.
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 25-09-2008 a las 18:13:31.
Responder Con Cita
  #2  
Antiguo 25-09-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Más rarezas todavía... y es que resulta que esto sí funciona también en Internet Explorer, pulsando el botón o usando la tecla "ENTER":

Código PHP:
<?php

// index.php

if(isset($_POST['submit'])){
  die(
'Ok, form are submitted');
}

?>

<form method="post" action="./index.php">
 <input type="text" name="query1" />
 <input type="text" name="query2" />
 <input type="submit" name="submit" />
</form>
Ahora bien, lo único diferente es que se ha añadido al formulario una casilla de texto más...
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #3  
Antiguo 26-09-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Como se ve en mi anterior mensaje, añadiendo una casilla más, Internet Explorer se comporta ya como se espera, sin embargo, no basta cualquier "casilla"... por ejemplo, si añadimos un campo "oculto" al formulario, Internet Explorer sigue sin funcionar como se espera y funcionan el resto de navegadores en que he probado.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 26-09-2008
Avatar de Ñuño Martínez
Ñuño Martínez Ñuño Martínez is offline
Moderador
 
Registrado: jul 2006
Ubicación: Ciudad Catedral, Españistán
Posts: 6.000
Poder: 25
Ñuño Martínez Tiene un aura espectacularÑuño Martínez Tiene un aura espectacular
Yo creo que la respuesta es simple:

Cuando un navegador va a enviar un formulario utiliza un bucle para obtener la información de todos campos de dicho formulario. Lo que ocurre es que los programadores de Microsoft son los mejores del mundo y por eso decidieron optimizarlo. Primero comprueba el número de campos del formulario y si este sólo tiene un campo pues genera la petición directamente con su valor y no utilizando el bucle. El problema es que alguien olvidó que el botón "submit" también es un campo...

Esa es mi teoría. Claro que como no puedo consultar el código fuente no puedo asegurarlo... (¡Zas! )
__________________
Proyectos actuales --> Allegro 5 Pascal ¡y Delphi!|MinGRo Game Engine

Última edición por Ñuño Martínez fecha: 26-09-2008 a las 09:52:39.
Responder Con Cita
  #5  
Antiguo 26-09-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.114
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Sí; algo así debe ser como lo que dices Ñuño. Y a ver qué se puede hacer,... porque no es sencillla una solución, puesto que no vamos a añadir un campo que no se necesita en un formulario... y además sabiendo como sabemos que todo va bien en el resto de navegadores en que se prueba la aplicación. Lo malo es que no hablamos de Internet Explorer 6, sino de Internet Explorer 7 y hasta la versión 8. Igual es cuestión de seguir investigando, pues lo cierto es que es algo que puede resultar molesto y desconcertante para los usuarios de Internet Explorer toparse con un formulario así.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 26-09-2008
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El problema no es de bucle, sino que el evento onclick del botón no se ejecuta en esas condiciones en IE. Como saben, un "campo" submit no se envía al servidor, a menos que se oprima, lo cual es lógico para saber con cuál se envía el formulario en caso de que hubiere varios.

Por ejemplo,

Código:
<form method="post" action="./testform.php">
	<input type="text" name="query1" />
	<input type="text" name="query2" />
	<input type="submit" name="buscar" onclick='alert("enviando datos")'>
	<input type='button' value='enviar' onclick='this.form.submit()'>
</form>
Aquí hay dos cuadros de edición, de manera que no estamos en las condiciones indicadas. Pero si enviamos el formulario con el segundo botón, al servidor no llega ningún campo "buscar" ni se ejecuta el código del evento onclick, y esto es así en cualquier navegador.

Pero si presionamos el botón "buscar" o presionamos ENTER, entonces sí que llega el campo y se ejecuta el onclick (excepto, claro, en IE con un sólo cuadro, como ya vieron). O sea que, al parecer, el oprimir ENTER genera el evento onclick del botón por default, excepto en el caso indicado.

Por otra parte, pregunto por curiosidad, ¿por qué necesitas saber el botón que envia? Esto es, el otro campo sí se envía y se podría efectuar la búsqueda.

// Saludos
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿Aún usas Internet Explorer? ixMike La Taberna 2 18-12-2007 16:23:37
Internet Explorer 8 jhonny Noticias 5 04-05-2007 18:44:45
problema con Internet explorer ebeltete Windows 1 07-03-2007 19:48:28
Pegándome con Internet Explorer 7 Ñuño Martínez La Taberna 7 20-11-2006 16:15:30
No se ven imagenes en Internet Explorer Albano Internet 10 09-01-2006 20:43:51


La franja horaria es GMT +2. Ahora son las 19:15:59.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi