Actualmente, cuando diseño mis formularios, me gusta mantener el nombre del botón de envío igual al ID del formulario. Luego, en mi php, acabo de hacer if(isset($_POST['submitName']))
para verificar si se ha enviado un formulario y qué formulario se ha enviado.¿Cuál es la mejor manera de identificar qué formulario se ha enviado?
En primer lugar, ¿hay algún problema de seguridad o defectos de diseño con este método?
Un problema que he encontrado es cuando deseo superponer mis formularios con javascript para proporcionar una validación más rápida al usuario. Por ejemplo, aunque obviamente necesito retener la validación del lado del servidor, es más conveniente para el usuario si se muestra un mensaje de error en línea, al difuminar una entrada. Además, sería bueno proporcionar la validación del formulario completo, al hacer clic en el botón Enviar.
Por lo tanto, cuando el usuario hace clic en el botón de envío del formulario, detengo la acción predeterminada, hago mi validación y luego intento cambiar el nombre de la funcionalidad de envío tradicional, si se aprueba la validación. Para hacer esto, estoy usando el método form.submit()
pero, desafortunadamente, esto no envía la variable del botón de envío (como debería ser, ya que se puede llamar a form.submit() sin hacer clic en ningún botón). Esto significa que mi script PHP no puede detectar que el formulario ha sido enviado.
¿Cuál es la forma correcta de evitar esto? Parece que la solución estándar es agregar un campo oculto en el formulario, al pasar la validación, que tiene el nombre de la identificación del formulario. Luego, cuando se invoca form.submit(), esto se transfiere en lugar del botón de envío. Sin embargo, esta solución me parece muy desagradable, por lo que me pregunto si debería:
a) Utilice un método alternativo para detectar qué formulario se ha enviado y no depende de pasar el botón de enviar. Si es así, ¿qué alternativa hay? Obviamente, solo tener un campo oculto adicional desde el comienzo no es mejor.
b) Use una solución alternativa de Javascript que me permita conservar mi diseño que no es de Javascript. Por ejemplo, ¿existe una alternativa a form.submit() que me permita pasar datos adicionales?
c) Chúpalo e inserta un campo oculto usando Javascript.
ACTUALIZACIÓN: He aceptado la respuesta correcta, pero quería aclarar mi error aquí, por lo que sería más útil para los demás. Uso Mootools y muy ingenuamente creí que cuando usaba addEvent ('enviar' ...) necesitaba llamar inmediatamente a event.stop() para evitar que se enviara. En realidad, este no es el caso y solo puedo llamar a event.stop() solo si la validación falla. De lo contrario, el envío predeterminado se activa, como de costumbre, y el uso de form.submit() se vuelve completamente innecesario.
Mi equipo actualmente lo hace de esta manera. No me gusta, ya que ahora se requiere que nuestros formularios tengan un botón de envío. Los chicos que implementaron esto se mudaron a otro equipo; a mí y a otro compañero de equipo nos costó entender por qué nuestros formularios no se enviaban, y luego nos dimos cuenta de que era necesario enviar un botón para validarlo. – b01