2010-11-22 11 views
14

Come posso verificare se la richiesta è un post in PHP, è la seguente ok?Controllare se la richiesta è postback in PHP

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

dove submit è la name del <input type="submit" />

+0

Vuoi per controllare se c'è 'dati POST' presenti, o se i dati' submit' è presente? – Ben

+0

Verifica di un post o di un post? Un postback è un particolare tipo di richiesta post. –

+0

@Steve, @ Lèse majesté, in sostanza, voglio solo vedere se un modulo è postback quindi ricomincio il post –

risposta

22

Che funzionerà se sai e ti aspetti un pulsante di invio nella stessa pagina.

Se non si sa nulla immediatamente sulle variabili di richiesta, un altro modo è quello di verificare il metodo di richiesta:

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

Come sottolineato nei commenti, per controllare specificamente per un postback e non solo qualsiasi Richiesta POST, è necessario assicurarsi che il referrer sia la stessa pagina della pagina di elaborazione. Qualcosa del genere:

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

Dovresti assolutamente usare '===' invece di '=='.Spiegazione, perché, può essere trovata nei commenti a [questa risposta] (http://stackoverflow.com/a/1372163/1469208) e in molte, molte altre risorse, in quanto questi sono i fondamenti della programmazione PHP. – trejder

3

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

La vostra è una domanda molto simile anche se meno generale di this one.

Questo è probabilmente un approccio migliore rispetto alla verifica di una variabile di posta. Per uno, non sai se quella variabile verrà inviata insieme. Ho la sensazione che alcuni browser non inviino la chiave se non viene specificato alcun valore. Inoltre, mi preoccuperei che alcuni tipi di PHP potrebbero non definire $_POST se non ci sono valori POST.

+0

Dovresti assolutamente usare '===' invece di '=='. Spiegazione, perché, può essere trovata nei commenti a [questa risposta] (http://stackoverflow.com/a/1372163/1469208) e in molte, molte altre risorse, in quanto questi sono i fondamenti della programmazione PHP. – trejder

0

Sì. Puoi anche utilizzare if(array_key_exists('submit', $_POST))

1

Sì, dovrebbe farlo.

Attento quando si utilizzano i tipi di invio image, non invieranno l'attributo name in alcuni browser e non sarà possibile rilevare il POST. Rotto la testa contro la scrivania un paio di volte finché non me ne sono reso conto.

La soluzione alternativa è aggiungere un input di tipo hidden.

3

Se si vuole avere una routine generica senza dipendenza "metodo" (POST/GET) e tutti gli altri nomi degli elementi del forum, allora vi consiglio questo

<?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; 
} 
?> 

ora il caso $ IsPostBack sarà vero se è un postback, falso se non lo è.

Spero che questo aiuta

Problemi correlati