Me pregunto si alguien puede dar una respuesta de "mejores prácticas" al uso de acciones de formulario HTML en blanco para volver a publicar en la página actual.
Hay una publicación que pregunta qué hace una acción de formulario HTML en blanco aquí y algunas páginas como esta sugieren que está bien, pero me gustaría saber qué piensa la gente.
forms
web-standards
string
html
Matt Mitchell
fuente
fuente
<form name="xyz" >
). Presentará la acción por sí solo.Respuestas:
Lo mejor que puede hacer es dejar de lado el atributo de acción. Si lo deja fuera, el formulario se enviará a la dirección del documento, es decir, a la misma página.
También es posible dejarlo vacío, y cualquier navegador que implemente el algoritmo de envío de formularios HTML lo tratará como equivalente a la dirección del documento, lo que hace principalmente porque así es como funcionan actualmente los navegadores:
Esto definitivamente funciona en todos los navegadores actuales, pero puede no funcionar como se esperaba en algunos navegadores más antiguos ( "los navegadores hacen cosas raras con una acción vacía =" "atributo " ), por lo que la especificación desalienta fuertemente a los autores a dejarlo vacío :
fuente
action=""
—ver mi respuesta ...En realidad, la subsección de envío de formularios del borrador HTML5 actual no permite
action=""
. Está en contra de la especificación.La sección citada en la respuesta de mercator es un requisito para las implementaciones , no para los autores . Los autores deben seguir los requisitos del autor. Para citar cómo leer esta especificación :
El cambio de HTML4, que permitió una URL vacía, se realizó porque "los navegadores hacen cosas raras con un
action=""
atributo vacío ". Teniendo en cuenta la razón del cambio, probablemente sea mejor no hacerlo tampoco en HTML4.fuente
action
atributo por completo para indicar que el formulario debe enviarse a la dirección del documento? Parece que, como dice, "si se especifica".No incluir el atributo action abre la página a los ataques de clickjacking de iframe , que implican unos simples pasos:
Referencias
fuente
$_POST
lugar de$_REQUEST
para evitar esto. Si utiliza el código marco$_REQUEST
, use un bloqueador de marcos flotantes .Esto se validará con HTML5.
fuente
action="."
?action="."
Es una mala idea para el caso general. Una URL comoexample.com/login
se asigna a meramenteexample.com/
.EN HTML 5
action=""
NO ES SOPORTADO, NO HAGA ESTO. MALA PRÁCTICA.Si, en cambio, niega por completo la acción, se enviará a la misma página de forma predeterminada, creo que esta es la mejor práctica:
Si está enviando el formulario usando php, puede considerar lo siguiente. Lea más sobre esto aquí.
Alternativamente, podría
#
tener en cuenta que esto actuará como un ancla y se desplazará hacia la parte superior de la página.fuente
htmlspecialchars()
función impide que las personas usen su script php en su contra.Normalmente uso action = "", que es válido para XHTML y retiene los datos GET en la URL.
fuente
Creo que es mejor indicar explícitamente dónde se publica el formulario. Si desea estar totalmente seguro, ingrese la misma URL en la que se encuentra el formulario en el atributo de acción si desea que se envíe nuevamente. Aunque los navegadores convencionales evalúan
""
la misma página, no puede garantizar que los navegadores no convencionales lo hagan.Y, por supuesto, la URL completa, incluidos los datos GET, como Juddling, señala.
fuente
Solo usa
No viola los estándares HTML5.
fuente
get
parámetros. Un formulario en la siguiente URL se romperíaexample.com/update_user?user_id=1
porque el formulario se enviará aexample.com/update_user?
Solía hacer esto mucho cuando trabajaba con ASP clásico. Por lo general, lo usé cuando se necesitaba algún tipo de validación del lado del servidor para la entrada (antes de los días de AJAX). El principal inconveniente que veo es que no separa la lógica de programación de la presentación, a nivel de archivo.
fuente
Solía no especificar el atributo de acción en absoluto. En realidad es cómo está diseñado mi marco, todas las páginas se envían exactamente a la misma dirección. Pero hoy descubrí el problema. A veces tomo prestado el valor del atributo de acción para hacer una llamada de fondo (supongo que algunas personas los llaman AJAX). Entonces descubrí que IE mantiene el valor del atributo de acción como vacío si no se especificó el atributo de acción. En mi opinión, es un poco extraño, ya que si no se especifica ningún atributo de acción, la contraparte de JavaScript debe estar al menos indefinida. De todos modos, mi punto es que antes de elegir la mejor práctica, necesita comprender más contexto, como si usará el atributo en JavaScript o no.
fuente