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.108
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.108
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.108
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.108
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
  #7  
Antiguo 05-10-2008
chalao chalao is offline
Miembro
 
Registrado: sep 2008
Posts: 26
Poder: 0
chalao Va por buen camino
Saludos foreros.

Tengo el mismo problema con internet explorer, estoy programando en D2007 y tengo un servidor con el componente TIdHTTPServer que envía texto HTML al navegador para recoger tan sólo dos datos: nombre y apellido. Para probar que los recibo bien al pulsar el boton ENVIAR refresco la pagina y muestro el texto "Hola nombre apellido". Sencillo pero en iexplorer no funciona (en mozilla o chrome sí). Os dejo esa parte del código a ver si veis algo mal o si no alguna forma habrá para que funcione en todos los navegadores.

Disculpad pero seguramente el código no sea de lo mejorcito, soy estudiante y estoy empezando.

Código:
procedure TForm1.IdHTTPServer1CommandGet(AContext: TIdContext;
  ARequestInfo: TIdHTTPRequestInfo; AResponseInfo: TIdHTTPResponseInfo);

begin
  if ARequestInfo.Params.Count = 0 then
  AResponseInfo.ContentText := '<form enctype="text/plain">Introduce tu nombre:<input type="text" maxlength="10"size="10"name="nombre"> Introduce tu apellido:<input type="text"maxlength="10"size="10"name="apellido"><INPUT TYPE="SUBMIT" VALUE="Enviar"></form>'
  else
  AResponseInfo.ContentText := 'HOLA ' + arequestinfo.Params.Values['nombre'] + ' ' + arequestinfo.Params.Values['apellido'] + '.';
end;
Existe alguna forma de responder con otra variable que no sea ContentText ??? Con esta no me deja enviar cadenas muy largas.

Muchas gracias por adelantado
Un saludo.
Responder Con Cita
  #8  
Antiguo 05-10-2008
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.108
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Se me pasó este hilo... Román, en realidad sí que podría omitirse el botón, es decir, mirar sólo la "query" y realizar la búsqueda correspondiente. Esto es algún lío mío que tengo por ahí: la costumbre de hacerlo así también en otros formularios... quizá debiera revisarlo. Aunque, parece que sólo "falla" en Internet Explorer...
__________________
David Esperalta
www.decsoftutils.com
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 23:55:03.


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