2012-06-08 30 views
14

que han llegado a través de secuencias de comandos que utilizan:

isset($_POST['submit']) 

así como el código que utiliza:

$_SERVER['REQUEST_METHOD']=='POST' 

Me preguntaba la diferencia entre estos dos y qué método es el mejor.

+3

Ellos son incomparables , hacen diferentes trabajos – zerkms

+3

Comprobando la existencia de '$ _POST ['submit']', w aquí 'submit' es el nombre de un botón' type = submit name = submit', es uno de los hábitos más comunes (y cojos) que corre desenfrenado entre los codificadores de php. Su código falla completamente cuando un usuario envía el formulario a través de la tecla Intro en una porción considerable de la base de navegador web común. No lo hagas, es muy amateur. – goat

+0

@chris Thanx por la información, no lo sabía. Soy bastante nuevo en php. – Madz

Respuesta

4

Esto significa dos cosas diferentes. El primero, verifica si cuando se envió el formulario se pasó el parámetro submit. Muchos usan este fragmento para verificar que se haya enviado un formulario. Esto funciona porque el botón Enviar es técnicamente un <input> por lo que su valor se envía junto con cualquier otro elemento que forma parte del formulario.

<?php 
    if(isset($_POST['submit'])) { // This way form and form logic can be adjacent to each other 
     // Logic 
    } 
?> 
<form method='POST' action='<?= $_SERVER['REQUEST_URI'] ?>'> 
    <!--- other form stuff --> 
    <input type="submit" name="submit" value="Send!" /> 
</form> 

Las segundas pruebas fragmento de si el formulario se ha enviado con el método POST. Esto no necesariamente significa que se presionó el botón de formulario. Si no se envió con POST, el superglobal $_POST estaría vacío.

+2

El superglobal '$ _POST' siempre está configurado y siempre es una matriz. – Arjan

+0

@Arjan Good catch. Mejor redacción: "estaría vacío" –

+0

Corrígeme si estoy equivocado, pero si el método de formulario es POST, ¿no sería la única forma en que $ _POST estaría vacío si el botón no se presionara? – Madz

4

Hacen cosas diferentes.

La primera comprueba si se ha establecido una clave (submit) en la matriz $_POST.

El segundo comprueba si el valor de una clave en la matriz $_SERVER es 'POST'. Creo que uno usaría esto para decir si los datos se han enviado usando el método "obtener" o "publicar", pero generalmente no le importa solo qué método se utilizó, sino más bien, qué datos se enviaron.

¿Qué estás tratando de hacer?

0

La primera instrucción verifica si el método de solicitud era Post y si la solicitud incluía un valor para el elemento submit. El segundo método solo verifica si el método de solicitud fue Post.

Para comprobar si se publicó un formulario, el segundo es mejor en el sentido de que es un poco más claro, haciendo una cosa y una sola cosa. Sin embargo, no me preocuparía demasiado sobre cuál usar.

6
isset($_POST['submit']) 

Si usted ya sabe que un valor particular siempre ser enviada, por lo que es indicativo de una sumisión de la forma esperada (el campo submit en este caso) este código le dirá dos cosas:

  1. el formulario se envía a través del método POST, en contraposición a GET, PUT, etc.
  2. el campo submit se ha pasado.

$_SERVER['REQUEST_METHOD'] == 'POST' 

Esto le indica exactamente una cosa, un formulario se ha enviado a través del método POST.Razones para utilizar que incluye:

  • desea distinguir entre un envío del formulario no válido (por ejemplo, no se transmitieron todos los campos) y otras clases de recuperación de páginas (GET, PUT, etc.)
  • Usted no lo hace saber exactamente lo que vas a recibir Quizás este código se ejecuta en un controlador que no conoce todos los detalles de sus partes dependientes.

El primero es

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if (!isset($_POST['name'])) { 
     // at this point you know that `name` was not passed as part of the request 
     // this could be treated as an error 
    } 
} 

Versus:

if (!isset($_POST['name'])) { 
    // the `name` field was not passed as part of the request 
    // but it might also be a GET request, in which case a page should be shown 
} 

Importante

Comprobación de un campo de botón de enviar en la solicitud no es fiable como una forma puede ser presentada de otras maneras (como presionar Enter en un cuadro de texto).


$_POST 

sólo por el uso de esta expresión se puede afirmar que:

  1. El formulario se envía a través de POST
  2. Al menos un campo se ha presentado
+1

No verifique si los botones de envío detectan el envío del formulario. Falla cuando los usuarios envían el formulario a través de la tecla Intro (en ciertos navegadores) y ciertos métodos de envío de formularios de JavaScript. Es muy molesto para los usuarios cuando un envío de formulario falla silenciosamente ... – goat

+0

@rambocoder en cualquier caso, su comentario me hizo cambiar algunas cosas en mi respuesta para abordar su preocupación ... eche un vistazo por favor –

Cuestiones relacionadas