2010-11-22 8 views
14

¿Cómo puedo comprobar si la solicitud es una publicación en PHP? ¿Está bien el siguiente?Comprobando si la solicitud se ha vuelto a publicar en PHP

if (isset($_POST["submit"])) 

donde submit es el name del <input type="submit" />

+0

¿Quieres comprobar si hay datos 'Post' presente, o si el' datos submit' está presente? – Ben

+0

¿Está buscando una publicación o publicación? Una publicación posterior es un tipo particular de solicitud de publicación. –

+0

@Steve, @ Lèse majesté, básicamente, solo quiero ver si un formulario está en proceso de devolución, así que proceso la publicación –

Respuesta

22

Eso funcionará si conoce y espera que dicho botón de envío esté en la misma página.

Si usted no sabe nada acerca de inmediato las variables de petición, otra manera es comprobar el método de solicitud:

if (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST') 

Como se señaló en los comentarios, para comprobar específicamente para un postback y no cualquier Solicitud POST, debe asegurarse de que la referencia sea la misma página que la página de procesamiento. Algo como esto:

if (basename($_SERVER['HTTP_REFERER']) == $_SERVER['SCRIPT_NAME']) 
+1

Definitivamente debería usar '===' en lugar de '=='.Explicación, por qué, se puede encontrar en los comentarios a [esta respuesta] (http://stackoverflow.com/a/1372163/1469208) y en muchos, muchos otros recursos, ya que estos son los fundamentos de la programación de PHP. – trejder

3

¿Quieres $_SERVER['REQUEST_METHOD'] == 'POST'.

La suya es una pregunta muy similar aunque menos general que this one.

Este es probablemente un mejor enfoque que el control de una variable de publicación. Por un lado, no sabes si esa variable se enviará. Tengo la corazonada de que algunos navegadores simplemente no enviarán la clave si no se especifica ningún valor. Además, me preocuparía que algunos de los sabores de PHP no definan $_POST si no hay valores POSTed.

+0

Definitivamente debería usar '===' en lugar de '=='. Explicación, por qué, se puede encontrar en los comentarios a [esta respuesta] (http://stackoverflow.com/a/1372163/1469208) y en muchos, muchos otros recursos, ya que estos son los fundamentos de la programación de PHP. – trejder

0

Sí. También puede usar if(array_key_exists('submit', $_POST))

1

Sí, eso debería hacerlo.

Tenga cuidado cuando use image tipo envía, no enviará el atributo name en algunos navegadores y no podrá detectar el POST. Me golpeó la cabeza contra el escritorio un par de veces hasta que me di cuenta.

La solución para eso es agregar una entrada de tipo hidden también.

3

Si usted quiere tener una rutina genérica "método" sin dependencia (post/GET) y cualquier otro nombre de los elementos del foro, entonces te recomiendo este

<?php 
$isPostBack = false; 

$referer = ""; 
$thisPage = "http://".$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; 

if (isset($_SERVER['HTTP_REFERER'])){ 
    $referer = $_SERVER['HTTP_REFERER']; 
} 

if ($referer == $thisPage){ 
    $isPostBack = true; 
} 
?> 

ahora el caso de $ IsPostBack será verdad si es una devolución de datos, falso si no es así.

espero que esto ayude a

Cuestiones relacionadas