Ich versuche zu überprüfen, ob ein $ _POST vorhanden ist. Wenn dies der Fall ist, drucken Sie ihn in eine andere Zeichenfolge. Wenn nicht, drucken Sie überhaupt nicht.
etwas wie das:
$fromPerson = '+from%3A'.$_POST['fromPerson'];
function fromPerson() {
if !($_POST['fromPerson']) {
print ''
} else {
print $fromPerson
};
}
$newString = fromPerson();
Jede Hilfe wäre toll!
empty()
ist nicht richtig für Wahl # 1, weil in PHP, die Zeichenfolge'0'
entsprichtfalse
- undempty()
kehrttrue
für alle Werte gleich falsch .empty
Wenn Sie also den Code verwenden , wird das Drucken übersprungen, wenn der Wert lautet'0'
. Wenn Sie die leere Zeichenfolge ausschließen möchten, lesen Sie die Antwort von Augustus.Jeder sagt, isset () zu verwenden - was wahrscheinlich für Sie funktionieren wird.
Es ist jedoch wichtig, dass Sie den Unterschied zwischen verstehen
$_POST['x'] = NULL;
und$_POST['x'] = '';
isset($_POST['x'])
kehrtfalse
zum ersten Beispiel zurück, kehrt abertrue
zum zweiten zurück, obwohl beide einen leeren Wert zurückgeben würden, wenn Sie versuchen würden, eines davon zu drucken.Wenn Sie
$_POST
aus einem vom Benutzer eingegebenen Feld / Formular stammen und leer bleiben, glaube ich (ich bin mir jedoch nicht 100% sicher), dass der Wert "", aber NICHT NULL ist.Auch wenn diese Annahme falsch ist (jemand korrigiert mich bitte, wenn ich falsch liege!), Ist das oben Genannte für die zukünftige Verwendung immer noch gut zu wissen.
quelle
empty()
ist nicht hier richtig, denn in PHP, die Zeichenfolge'0'
entsprichtfalse
- undempty()
kehrttrue
für alle Werte gleich falsch .empty
Wenn Sie also den Code verwenden , wird das Drucken übersprungen, wenn der Wert lautet'0'
.Überrascht wurde es nicht erwähnt
quelle
isset($_POST['fromPerson']
isttrue
, obwohl es soif($_SERVER['REQUEST_METHOD'] == 'POST'
istfalse
. Wenn es keine solche Situation gibt, ist nur derisset...
Teil erforderlich .fromPerson
ist möglicherweise nicht vorhanden, POST ist jedoch möglicherweise noch vorhanden. Die Frage war: "Wenn $ _POST existiert." und nur in einem Beispiel wird $ _POST ['fromPerson'] verwendet. In einigen Situationen, wie @goat hier beschreibt , istfromPerson
dieser Name möglicherweise nicht im POST vorhanden , auch wenn er ein Submit-Name war.quelle
Die richtige Methode zum Überprüfen, ob ein Array-Schlüssel vorhanden ist, ist die Funktion
array_key_exists()
Der Unterschied ist, wenn Sie haben
$_POST['variable'] = null
darin, dass der Schlüssel vorhanden ist und gesendet wurde, der Wert jedoch null warDie andere Option ist
isset()
prüft, ob ein Array-Schlüssel vorhanden ist und ob er festgelegt wurdeDie letzte Option ist zu verwenden
empty()
der überprüft wird, ob der Array-Schlüssel vorhanden ist, wenn er festgelegt ist und der Wert nicht als leer betrachtet wird.Beispiele:
Was Ihre Frage betrifft
Der richtige Weg, um zu überprüfen, ob ein Wert gesendet wurde, besteht darin, array_key_exists () mit der Methode zur Überprüfung der Anforderung zu verwenden
Aber es gibt einige Fälle, die von Ihrer Logik abhängen, wo
isset()
undempty()
auch gut sein können.quelle
empty
. Wie pro Shi Kommentar auf Antwort Augustus Francis ,empty()
ist nicht die richtige Alternative Wahl, denn in PHP, die Zeichenfolge'0'
entsprichtfalse
- undempty()
kehrttrue
für alle Werte gleich falsch .empty
Wenn Sie also den Code verwenden , wird das Drucken übersprungen, wenn der Wert lautet'0'
. Wenn Sie die leere Zeichenfolge ausschließen möchten, lesen Sie die Antwort von Augustus.isset
nicht angemessen.Laut PHP-Dokumentation: http://php.net/manual/en/function.array-key-exists.php
(siehe Beispiel 2 array_key_exists () vs isset () )
Die Methode
array_key_exists
dient zum Überprüfen der Schlüsselpräsenz im Array.Der Code in der Frage kann also wie folgt geändert werden:
quelle
isset
Lösung, wenn das Post-Feld festgelegt ist, enthält jedoch NULL. Dies ist eine gute Alternative , wenn SieNULL
in derelse
Branche zulassen möchten . Jedoch , es ist ein Fehler, wenn eine Zeichenfolge erforderlich ist; In dieser Situationisset
ist das Richtige der Fall, dieser Code jedoch nicht - er gibt denNULL
Wert weiter. Roberts spätere Antwort zeigt den Unterschied.Von allen Methoden wird tatsächlich abgeraten, es ist eine Warnung in Netbeans 7.4 und es ist sicherlich eine gute Praxis, nicht direkt auf superglobale Variablen zuzugreifen, sondern stattdessen einen Filter zu verwenden
quelle
isset
ist viel besser lesbar als ein Filterausdruck. Aber danke, dass Sie darauf hingewiesen haben. Dies ist eine nützliche Option.empty
, was durch die lose Eingabe von PHP ausgelöst wird. Es ist schwer vorstellbar, dass der Zugriff auf $ _POST als schlecht angesehen wird Stil.)Versuchen
quelle
empty($_POST['fromPerson'])
führt dieser kombinierte Test durch. Einfacher zu lesen und zu tippen :)empty('0')
zurücktrue
. Es ist also nicht dasselbe.Versuchen Sie es ?
isset
($_POST['fromPerson'])
quelle
quelle
is_array()
prüft, ob es sich um ein Array handelt, der zweite Teil prüft, ob es ein Element mit dem Schlüssel enthält'fromPerson'
.if( isset($_POST['fromPerson']) )
ist richtig.Sie können eine Funktion verwenden und zurückkehren, besser als das Echo zu lenken.
quelle
Ich möchte überprüfen, ob es ausgegeben wird und ob es in einem ternären Operator leer ist.
quelle
empty('0')
isttrue
. Also besser nicht habenversion
0
, oderuserID
0
, etc.Ich möchte meine Antwort hinzufügen, obwohl dieser Thread Jahre alt ist und für mich einen hohen Stellenwert bei Google hat.
Meine beste Methode ist zu versuchen:
Wie
$_POST
ein Array, wenn das Skript geladen wird und keine Daten im vorhanden sind$_POST
Variablen vorhanden sind, hat es eine Array-Länge von 0. Dies kann in einer IF-Anweisung verwendet werden.Möglicherweise fragen Sie sich auch, ob dies einen Fehler "undefinierter Index" auslöst, als ob wir prüfen, ob er
$_POST
gesetzt ist ... Tatsächlich$_POST
besteht der Fehler "undefinierter Index" immer nur, wenn Sie versuchen, nach einem $ _POST zu suchen Array-Wert, der nicht existiert.$_POST
existiert immer an sich entweder leer oder hat Array-Werte.$_POST['value']
ist möglicherweise nicht vorhanden, wodurch ein Fehler "undefinierter Index" ausgelöst wird.quelle