Ein Typ nannte eine meiner Snipplr-Einsendungen "Mist", weil ich if ($_SERVER['REQUEST_METHOD'] == 'POST')
stattdessen verwendet habeif ($_POST)
Das Überprüfen der Anforderungsmethode scheint mir korrekter zu sein, da ich das wirklich tun möchte. Gibt es einen betrieblichen Unterschied zwischen den beiden oder handelt es sich nur um ein Problem mit der Codeklarheit?
===
anstelle von==
hier als verwenden0 == 'POST'
.$_SERVER['REQUEST_METHOD']
jemals die Nummer sein0
? Soweit ich weiß, ist das unmöglich.Antworten:
Nun, sie machen nicht wirklich dasselbe.
$_SERVER['REQUEST_METHOD']
enthält die Anforderungsmethode (Überraschung).$_POST
enthält alle Postdaten.Es ist möglich, dass eine POST-Anforderung keine POST-Daten enthält.
Ich überprüfe die Anforderungsmethode - ich habe eigentlich nie daran gedacht, das
$_POST
Array zu testen . Ich überprüfe jedoch die erforderlichen Postfelder. Eine leere Post-Anfrage würde dem Benutzer also viele Fehlermeldungen geben - was für mich sinnvoll ist.quelle
if ($_SERVER['REQUEST_METHOD'] == 'POST')
ist der richtige Weg, können Sie eine Post-Anfrage ohne Post-Daten senden.quelle
Ich habe immer nachgesehen,
$_POST
bis ich Probleme mit größeren POST-Daten und hochgeladenen Dateien hatte. Es gibt Konfigurationsanweisungenpost_max_size
undupload_max_filesize
- wenn eine davon überschritten wird, wird das$_POST
Array nicht ausgefüllt.Der "sichere Weg" ist also zu überprüfen
$_SERVER['REQUEST_METHOD']
. Sie müssen jedoch immer noch fürisset()
jede$_POST
Variable verwenden, und es spielt keine Rolle, ob Sie prüfen oder nicht$_SERVER['REQUEST_METHOD']
.quelle
Wenn Ihre Anwendung auf Anfrage vom Typ Post reagieren muss, verwenden Sie Folgendes:
Wenn Ihre Anwendung auf Daten reagieren muss, die per Post-Anfrage eingegangen sind, verwenden Sie Folgendes:
Es ist implementierungsspezifisch, aber Sie werden beide verwenden, + $ _FILES superglobal.
quelle
Sie sind beide richtig. Persönlich bevorzuge ich Ihren Ansatz besser wegen seiner Ausführlichkeit, aber es hängt wirklich von Ihren persönlichen Vorlieben ab.
Das Ausführen von if ($ _ POST) würde keinen Fehler auslösen - das Array $ _POST ist vorhanden, unabhängig davon, ob die Anforderung mit POST-Headern gesendet wurde. Ein leeres Array wird bei einer booleschen Prüfung in false umgewandelt.
quelle
Sie können ein Formular senden, indem Sie in den meisten Browsern die Eingabetaste drücken (dh ohne auf die Schaltfläche "Senden" zu klicken). Dies sendet jedoch nicht unbedingt "Senden" als Variable. Es ist also möglich, ein leeres Formular zu senden, d. H.
$_POST
es ist leer, aber das Formular bleibt bestehen habe eine http post Anfrage an die PHP Seite generiert. In diesem Fallif ($_SERVER['REQUEST_METHOD'] == 'POST')
ist besser.quelle
$_POST
wäre nicht leer: Es wäre ein Array mit leeren Werten.quelle
Solange ich mit mehr als einer Methode auf meine PHP-Skripte zugreifen muss, mache ich Folgendes:
quelle
Es wird geprüft, ob die Seite über POST aufgerufen wurde (im Gegensatz zu GET, HEAD usw.). Wenn Sie eine URL in die Menüleiste eingeben, wird die Seite über GET aufgerufen. Wenn Sie jedoch ein Formular mit method = "post" senden, wird die Aktionsseite mit POST aufgerufen.
quelle
Es ist wirklich eine 6 von einer, ein halbes Dutzend von der anderen Situation.
Das einzig mögliche Argument gegen Ihren Ansatz ist $ _SERVER ['REQUEST_METHOD'] == 'POST' ist möglicherweise auf bestimmten Webservern / Konfigurationen nicht ausgefüllt, wohingegen das $ _POST-Array immer in PHP4 / PHP5 vorhanden ist (und falls nicht). t existieren, du hast größere Probleme (- :)
quelle
Sie funktionieren beide auf die gleiche Weise,
$_POST
sollten jedoch verwendet werden, da sie sauberer sind. Sie können es hinzufügen,isset()
um zu überprüfen, ob es vorhanden ist.quelle
$_POST
wird immer existieren, obwohl es leer sein kann (was in Boolesche Werte umgewandelt wirdfalse
). Und was meinst du mit "sauberer"?