Un tipo llamó a uno de mis presentaciones Snipplr "basura" porque he usado if ($_SERVER['REQUEST_METHOD'] == 'POST')
en lugar deif ($_POST)
Verificar el método de solicitud me parece más correcto porque eso es lo que realmente quiero hacer. ¿Hay alguna diferencia operativa entre los dos o es solo un problema de claridad de código?
===
lugar de==
aquí como0 == 'POST'
.$_SERVER['REQUEST_METHOD']
alguna vez sería el número0
? Que yo sepa, eso es imposible.Respuestas:
Bueno, en realidad no hacen lo mismo.
$_SERVER['REQUEST_METHOD']
contiene el método de solicitud (sorpresa).$_POST
contiene cualquier dato publicado.Es posible que una solicitud POST no contenga datos POST.
Compruebo el método de solicitud: en realidad nunca pensé en probar la
$_POST
matriz. Sin embargo, verifico los campos de publicación requeridos. Por lo tanto, una solicitud de publicación vacía le daría al usuario muchos mensajes de error, lo que tiene sentido para mí.fuente
if ($_SERVER['REQUEST_METHOD'] == 'POST')
es la forma correcta, puede enviar una solicitud de publicación sin ningún dato de publicación.fuente
Solía verificar
$_POST
hasta que me metí en problemas con datos POST más grandes y archivos cargados. Hay directivas de configuraciónpost_max_size
yupload_max_filesize
, si se supera alguna de ellas, la$_POST
matriz no se rellena.Entonces, la "forma segura" es verificar
$_SERVER['REQUEST_METHOD']
. Sin embargo, todavía tiene que usarisset()
en todas las$_POST
variables, y no importa si verifica o no$_SERVER['REQUEST_METHOD']
.fuente
Si su aplicación necesita reaccionar a solicitud de tipo post, use esto:
Si su aplicación necesita reaccionar ante cualquier dato recibido a través de una solicitud posterior, use esto:
Es específico de la implementación, pero vas a usar ambos, + $ _FILES superglobal.
fuente
Ambos son correctos. Personalmente, prefiero su enfoque mejor por su verbosidad, pero realmente depende de sus preferencias personales.
Por otro lado, se ejecuta si ($ _ POST) no arrojaría un error: la matriz $ _POST existe independientemente de si la solicitud se envió con encabezados POST. Una matriz vacía se convierte en falso en un cheque booleano.
fuente
Puede enviar un formulario presionando la tecla Intro (es decir, sin hacer clic en el botón Enviar) en la mayoría de los navegadores, pero esto no necesariamente envía el envío como una variable, por lo que es posible enviar un formulario vacío, es decir
$_POST
, estará vacío, pero el formulario seguirá ha generado una solicitud de publicación http a la página php. En este casoif ($_SERVER['REQUEST_METHOD'] == 'POST')
es mejor.fuente
$_POST
no estaría vacío: sería una matriz con valores vacíos.fuente
Siempre que necesite acceder a mis scripts PHP con más de un método, lo que hago es:
fuente
Comprueba si la página se ha llamado a través de POST (en lugar de GET, HEAD, etc.). Cuando escribe una URL en la barra de menú, la página se llama a través de GET. Sin embargo, cuando envía un formulario con method = "post", la página de acción se llama con POST.
fuente
Es realmente un 6 de uno, media docena de la otra situación.
El único argumento posible en contra de su enfoque es $ _SERVER ['REQUEST_METHOD'] == 'POST' no se puede completar en ciertos servidores web / configuración, mientras que la matriz $ _POST siempre existirá en PHP4 / PHP5 (y si no ' t existe, tienes problemas más grandes (- :)
fuente
Ambos funcionan de la misma manera, pero
$_POST
deben usarse ya que son más limpios. Puede agregarloisset()
para verificar que existe.fuente
$_POST
siempre existirá, aunque puede estar vacío (que se convierte en booleanofalse
). ¿Y qué quieres decir con "limpiador"?