php - query_string - $_POST vs. $_SERVER[''REQUEST_METHOD'']== ''POST''
if request method== post (10)
Ambos funcionan de la misma manera, pero se debe usar $_POST
ya que es más limpio. Puede agregar isset()
para verificar que exista.
Un tipo llamó "basura" a uno de mis envíos Snipplr porque usé if ($_SERVER[''REQUEST_METHOD''] == ''POST'')
lugar de if ($_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 solo se trata de un problema de claridad del código?
Ambos son correctos. Personalmente, prefiero su enfoque mejor por su nivel de detalle, pero realmente se debe a las preferencias personales.
De forma manual, si if ($ _ POST) no arrojara un error, la matriz $ _POST existe independientemente de si la solicitud se envió con encabezados POST. Un conjunto vacío se convierte en falso en un control booleano.
Bueno, ellos no hacen lo mismo, de verdad.
$_SERVER[''REQUEST_METHOD'']
contiene el método de solicitud (sorpresa).
$_POST
contiene datos de publicación.
Es posible que una solicitud POST no contenga datos POST.
Compruebo el método de solicitud: en realidad, nunca pensé en probar la matriz $_POST
. Sin embargo, verifico los campos requeridos. Por lo tanto, una solicitud de publicación vacía le daría al usuario una gran cantidad de mensajes de error, lo cual tiene sentido para mí.
Comprueba si la página ha sido llamada a través de POST (a diferencia 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", se llama a la página de acción con POST.
Es realmente un 6 de una, media docena de la otra situación.
El único argumento posible en contra de su enfoque es $ _SERVER [''REQUEST_METHOD''] == ''POST'' puede no estar poblado en ciertos servidores web / configuración, mientras que la matriz $ _POST siempre existirá en PHP4 / PHP5 (y si no lo hace) existe, tienes problemas mayores (- :)
Puede enviar un formulario presionando la tecla Intro (es decir, sin hacer clic en el botón Enviar) en la mayoría de los buscadores, pero esto no necesariamente envía enviar como una variable, por lo que es posible enviar un formulario vacío, es decir, $_POST
estará vacío, pero el formulario todavía habrá generado una solicitud HTTP posterior a la página php. En este caso if ($_SERVER[''REQUEST_METHOD''] == ''POST'')
es mejor.
Si su aplicación necesita reaccionar a petición de tipo post, use esto:
if(strtoupper($_SERVER[''REQUEST_METHOD'']) === ''POST'') { // if form submitted with post method
// validate request,
// manage post request differently,
// log or don''t log request,
// redirect to avoid resubmition on F5 etc
}
Si su aplicación necesita reaccionar ante cualquier información recibida a través de una solicitud posterior, use esto:
if(!empty($_POST)) { // if received any post data
// process $_POST values,
// save data to DB,
// ...
}
if(!empty($_FILES)) { // if received any "post" files
// validate uploaded FILES
// move to uploaded dir
// ...
}
Es específico de la implementación, pero vas a usar ambos, + $ _FILES superglobal.
Solía marcar $_POST
hasta que me metí en problemas con datos de POST más grandes y archivos cargados. Hay directivas de configuración post_max_size
y upload_max_filesize
- si se excede cualquiera de ellas, $_POST
array no se llena.
Entonces, la "manera segura" es verificar $_SERVER[''REQUEST_METHOD'']
. Sin embargo, todavía tiene que usar isset()
en cada $_POST
variable, y no importa, si $_SERVER[''REQUEST_METHOD'']
o no $_SERVER[''REQUEST_METHOD'']
.
if ($_SERVER[''REQUEST_METHOD''] == ''POST'')
es la forma correcta, puede enviar una solicitud posterior sin datos de publicación.
$this->method = $_SERVER[''REQUEST_METHOD''];
if ($this->method == ''POST'' && array_key_exists(''HTTP_X_HTTP_METHOD'', $_SERVER)) {
if ($_SERVER[''HTTP_X_HTTP_METHOD''] == ''DELETE'') {
$this->method = ''DELETE'';
} else if ($_SERVER[''HTTP_X_HTTP_METHOD''] == ''PUT'') {
$this->method = ''PUT'';
} else {
throw new Exception("Unexpected Header");
}
}