2012-06-12 33 views
10

Por lo tanto, durante un tiempo he estado usando lo siguiente para verificar si mis datos de publicación se han configurado.

if(! empty($_POST)) { } 

Sin embargo, recientemente he estado viendo un montón de mensajes diciendo que lo anterior es un "Hack" y el siguiente es la forma correcta "mejor".

if($_SERVER[ 'REQUEST_METHOD' ] === 'POST') { } 

Recientemente, solo quiero decir que lo he encontrado recientemente. Todas las publicaciones que están discutiendo este último método son de 2009'ish. Un poco viejo por estándares de codificación así que creo que está bien para obtener una nueva opinión sobre este tema.

He llegado a comprender que los dos métodos son diferentes. El primero se considera un "truco" que simplemente verifica si se ha establecido el conjunto de publicaciones, lo que sucederá si se realiza una solicitud posterior. El segundo realmente verifica el servidor para ver si se ha realizado una solicitud posterior. Me imagino que el segundo podría ser un poco más seguro, pero si la información se limpia de todos modos, no veo cómo hace una gran diferencia.

También he visto mensajes que cuanto más tarde fue utilizado solamente en las versiones de PHP < = 4 debido a que PHP todavía estaba usando el $_REQUEST mundial en este punto y esto fue los codificadores utilizados manera PHP para determinar la fuente de ciertos parámetros de solicitud. No estoy seguro de cuán precisa es esa última afirmación, porque las preguntas que se plantean en las publicaciones más antiguas son las mismas que las mías. Usan la publicación global y no la solicitan. Sin embargo, esta es una publicación más reciente que cualquiera de las otras (2011), y de una fuente en la que he llegado a confiar. Entonces no estoy seguro de qué hacer con eso.

y qué hacer en la comprobación de conseguir? He visto un par de lugares que dicen que el método de solicitud del servidor no parece funcionar en esta instancia, y solo puedo suponer que es porque la publicación supera el resultado y el método de solicitud solo puede contener un parámetro. Entonces, si tienes publicaciones y datos, ¿qué haces? Un comentario en una de estas publicaciones sugiere usar la solicitud global en lugar de publicar y obtener, pero he tenido la impresión de que es una mala idea.

This es la fuente más reciente que pude encontrar, y lo hice mirando a través de las preguntas similares en el lado antes de enviar. Específicamente pregunta sobre el uso de un valor de envío para verificar si se pasó el formulario, pero también menciona el método de solicitud. Mucho de esto parece indicar que el último todavía se usa comúnmente. Entonces, ¿este consejo sigue siendo válido? ¿Sigue siendo la mejor opción verificar el método de solicitud?

+0

posible duplicado de [isset ($ \ _POST \ [ 'submit' \]) vs $ \ _ SERVER \ [ 'SOLICITUD \ _method' \] == 'Post'] (http: // stackoverflow .com/questions/10943060/isset-postsubmit-vs-serverrequest-method-post) –

Respuesta

10

Sí, todavía está allí, y sigue siendo 100% confiable. La var $_SERVER["REQUEST_METHOD"] es establecida por PHP en sí, según el método de solicitud real utilizado por la conexión del usuario. Un usuario no puede enviar un parámetro de consulta ni influir en el valor de esa var, a menos que cambie el tipo de solicitud.

Su if(!$_POST) no es fiable, ya que ES posible llevar a cabo un post pero no enviar ningún dato a través de ella, por ejemplo:

<form method="post"> 
<input type="submit" /> 
</form> 

producirá sólo un vacío gama tan $ _POST - no hay nombre de los elementos del formulario en el formulario, por lo que no se enviarán datos, sin embargo, todavía se realiza una POST.

No me preocuparía que PHP4 no tenga este superglobal. PHP 4 es una versión en edad de piedra, y el código que admite v4 pero basado en v5 tendrá que contener tantos ataques feos/desagradables para lograr la compatibilidad con versiones anteriores que cualquiera que tenga que trabajar con ese código sufrirá pesadillas. PHP 4 debe considerarse muerto y desaparecido.

+0

Entonces, ¿cómo verificaría para obtener variables? Con el método de solicitud publicado, no puede volver a usarlo para comprobar si se ha obtenido. ¿O es solo que obtener ya no es confiable así que lo mejor que se puede hacer es asegurar que la matriz no esté vacía? Por cierto: realmente no estaba preocupado por PHP4, la fuente de ese comentario fue explicar que el motivo del método de solicitud, que aparentemente es incorrecto. – mseancole

+0

¿Qué quieres decir con "verificar" las variables de obtención? es por eso que hay '$ _GET', y' $ _POST' para publicar ... –

+0

tal vez un formulario con una sola casilla de verificación sería un ejemplo más realista de cuando necesita detectar una publicación, pero * podría * no tener ningún valor. – goat

Cuestiones relacionadas