2012-06-12 5 views
10

Also, für eine Weile habe ich jetzt verwendet, um zu überprüfen, ob meine Post-Daten festgelegt wurden.

if(! empty($_POST)) { } 

Aber vor kurzem habe ich sagen viele Beiträge seit einiger Zeit erleben, dass die oben ein „Hack“ ist und die unten ist die richtige „bessere“ Art und Weise.

Bis vor kurzem meinte ich nur, ich habe es erst kürzlich gefunden. Alle Beiträge, die diese Methode diskutieren, stammen aus dem Jahr 2009. Ein bisschen alt, weil ich Standards kodiere, also finde ich es okay, eine neue Meinung zu diesem Thema zu bekommen.

Ich habe verstanden, dass die beiden Methoden unterschiedlich sind. Der erste wird als ein "Hack" betrachtet, der nur prüft, ob das Post-Array gesetzt wurde, was passieren wird, wenn eine Post-Anfrage gemacht wird. Die zweite prüft den Server tatsächlich, um zu sehen, ob eine Post-Anfrage gemacht wurde. Ich kann mir vorstellen, dass die zweite vielleicht ein bisschen sicherer ist, aber wenn die Informationen sowieso gereinigt werden, sehe ich nicht, dass es einen großen Unterschied macht.

Ich habe auch Beiträge gesehen, dass die später nur in PHP-Versionen verwendet wurde < = 4, da PHP immer noch den $_REQUEST global an dieser Stelle verwendet wurde und dies war die Art und Weise PHP-Programmierer verwendet um die Quelle bestimmter Anfrageparameter zu bestimmen. Ich bin mir nicht sicher, wie genau diese letzte Aussage ist, denn die Fragen, die in den älteren Posts gestellt werden, sind die gleichen wie meine. Sie verwenden den Post global und nicht anfordern. Dies ist jedoch ein neuerer Beitrag als jeder der anderen (2011) und aus einer Quelle, der ich vertraut habe. Ich bin also nicht sicher, was ich davon halten soll.

Und was zu tun bekommen, wenn die Überprüfung? Ich habe ein paar Orte gesehen sagen, dass die Server-Anfrage-Methode scheint nicht zu funktionieren, in dieser Instanz, und ich kann nur davon ausgehen, dass es ist, weil Post ersetzt bekommen und die Anfrage-Methode kann nur einen Parameter halten. Also, wenn Sie sowohl Post als auch Daten haben, was tun Sie? Ein Kommentar zu einem dieser Beiträge schlägt vor, den Request global statt post und get zu verwenden, aber ich habe den Eindruck, dass das eine schlechte Idee ist.

This ist die jüngste Quelle, die ich finden konnte, und ich tat dies, indem vor dem Absenden auf der Seite durch die ähnlichen Fragen suchen. Es fragt speziell nach einem submit-Wert, um zu überprüfen, ob das Formular übergeben wurde, erwähnt aber auch die Anfrage-Methode. Vieles scheint darauf hinzudeuten, dass das Spätere immer noch häufig verwendet wird. Also ist dieser Rat immer noch gültig? Ist die Anfrage immer noch die beste Option?

+0

möglich Duplikat [isset ($ \ _ POST \ [ 'submit' \]) vs $ \ _ SERVER \ [ 'REQUEST \ _method' \] == 'POST'] (http: // Stackoverflow .com/questions/10943060/isset-postsubmit-vs-serverrequest-method-post) –

Antwort

10

Ja, es ist immer noch da und es ist immer noch 100% zuverlässig. Die Variable $_SERVER["REQUEST_METHOD"] wird von PHP selbst festgelegt, basierend auf der tatsächlichen Anforderungsmethode, die von der Benutzerverbindung verwendet wird. Ein Benutzer kann einen Abfrageparameter nicht senden oder den Wert dieser Variablen auf andere Weise beeinflussen als durch Ändern der Art der Anforderung.

Ihre if(!$_POST) ist nicht zuverlässig, weil es möglich ist, einen Beitrag zur Durchführung aber keine Daten über sie senden, zB:

<form method="post"> 
<input type="submit" /> 
</form> 

produzieren nur so ein leeres Array $ _POST - es gibt kein benannte Formularelemente im Formular, so dass keine Daten gesendet werden, dennoch wird noch ein POST ausgeführt.

Ich würde mir keine Sorgen über PHP4 nicht diese superglobal. PHP 4 ist eine Steinzeitversion, und Code, der v4 unterstützt, aber auf v5 basiert, muss so viele hässliche/ekelerregende Hacks enthalten, dass die Abwärtskompatibilität entsteht, dass jeder, der an diesem Code arbeiten muss, unter Alpträumen leidet. PHP 4 sollte als tot und weg betrachtet werden.

+0

Also, wie würdest du nach Variablen suchen? Wenn die Anforderungsmethode gepostet wird, können Sie sie nicht erneut verwenden, um nach get zu suchen. Oder ist es nur, dass get ist schon unzuverlässig, so dass das beste, was getan werden kann, ist sicherzustellen, dass das Array nicht leer ist? BTW: war nicht wirklich besorgt über PHP4, die Quelle dieses Kommentars erklärte dies als Grund für die Request-Methode, die anscheinend falsch ist. – mseancole

+0

was meinst du, nach Variablen suchen? Deshalb gibt es '$ _GET' und' $ _POST' für den Post ... –

+0

vielleicht wäre ein Formular mit einem einzigen Kontrollkästchen ein realistischeres Beispiel dafür, wenn Sie einen Post erkennen müssen, aber * könnte * keine Werte haben. – goat

Verwandte Themen