Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   PHP (https://www.clubdelphi.com/foros/forumdisplay.php?f=15)
-   -   Rareza en Internet Explorer al enviar un formulario (https://www.clubdelphi.com/foros/showthread.php?t=60251)

dec 25-09-2008 18:09:15

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. ;)

dec 25-09-2008 18:35:49

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... :confused: :confused: :confused:

dec 26-09-2008 08:49:48

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. :confused: :confused:

Ñuño Martínez 26-09-2008 09:47:56

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! :D)

dec 26-09-2008 10:47:09

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í.

roman 26-09-2008 18:00:05

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

chalao 05-10-2008 09:25:23

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.

dec 05-10-2008 09:35:42

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... :(


La franja horaria es GMT +2. Ahora son las 08:57:37.

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