Überprüfen Sie, ob $ _POST vorhanden ist

100

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!

eliwedel
quelle

Antworten:

171
if( isset($_POST['fromPerson']) )
{
     $fromPerson = '+from%3A'.$_POST['fromPerson'];
     echo $fromPerson;
}
ehmad
quelle
60

Einfach. Sie haben zwei Möglichkeiten:

1. Überprüfen Sie, ob überhaupt Postdaten vorhanden sind

//Note: This resolves as true even if all $_POST values are empty strings
if (!empty($_POST))
{
    // handle post data
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}

(ODER)

2. Überprüfen Sie nur, ob in den Post-Daten ein BESTIMMTER Schlüssel verfügbar ist

if (isset($_POST['fromPerson']) )
{
    $fromPerson = '+from%3A'.$_POST['fromPerson'];
    echo $fromPerson;
}
Dheeraj Bhaskar
quelle
Wie pro Shi Kommentar auf Antwort Augustus Francis , empty()ist nicht richtig für Wahl # 1, weil in PHP, die Zeichenfolge '0'entspricht false- und empty()kehrt truefür alle Werte gleich falsch . emptyWenn 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.
ToolmakerSteve
33

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'])kehrt falsezum ersten Beispiel zurück, kehrt aber truezum zweiten zurück, obwohl beide einen leeren Wert zurückgeben würden, wenn Sie versuchen würden, eines davon zu drucken.

Wenn Sie $_POSTaus 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.

Rafael
quelle
4
empty () prüft auf Variablenexistenz und einen nicht leeren Wert. Dies ist also die Funktion, die verwendet werden soll, wenn eine leere Zeichenfolge false zurückgeben soll.
Han Dijk
1
@HanDijk - laut Shi Kommentar auf Augustus Francis Antwort , empty()ist nicht hier richtig, denn in PHP, die Zeichenfolge '0'entspricht false- und empty()kehrt truefür alle Werte gleich falsch . emptyWenn Sie also den Code verwenden , wird das Drucken übersprungen, wenn der Wert lautet '0'.
ToolmakerSteve
30

Überrascht wurde es nicht erwähnt

if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['fromPerson'])){
John Magnolia
quelle
2
Warum? Wenn die Servermethode nicht POST ist, wird die POST-Variable nicht festgelegt, sodass nur die zweite Hälfte erforderlich ist. Liege ich falsch?
ToolmakerSteve
@ToolmakerSteve Ja, in den meisten Fällen ist das genug, aber nicht immer war meine Antwort, einen anderen Weg zu zeigen, wie es gemacht werden könnte.
John Magnolia
Es funktioniert auch, wenn Sie ein Formular mit Kontrollkästchen haben und ohne Namen senden.
John Magnolia
2
Beschreiben Sie eine Situation, in der es isset($_POST['fromPerson']ist true, obwohl es so if($_SERVER['REQUEST_METHOD'] == 'POST'istfalse . Wenn es keine solche Situation gibt, ist nur der isset...Teil erforderlich .
ToolmakerSteve
Stimmt, aber es ist umgekehrt. fromPersonist 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 , ist fromPersondieser Name möglicherweise nicht im POST vorhanden , auch wenn er ein Submit-Name war.
Papo
19
isset($_POST['fromPerson']) 
h3xStream
quelle
13

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 war

Die andere Option ist isset() prüft, ob ein Array-Schlüssel vorhanden ist und ob er festgelegt wurde

Die 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:

$arr = [
  'a' => null,
  'b' => '',
  'c' => 1
];

array_key_exists('a', $arr); // true
isset($arr['a']); // false
empty($arr['a']); // true


array_key_exists('b', $arr); // true
isset($arr['b']); // true
empty($arr['b']); // true


array_key_exists('c', $arr); // true
isset($arr['c']); // true
empty($arr['c']); // false

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

if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('fromPerson', $_POST)    
{
   // logic
}

Aber es gibt einige Fälle, die von Ihrer Logik abhängen, wo isset() undempty() auch gut sein können.

Robert
quelle
Fantastische Antwort, bis auf den Vorschlag zu verwenden empty. Wie pro Shi Kommentar auf Antwort Augustus Francis , empty()ist nicht die richtige Alternative Wahl, denn in PHP, die Zeichenfolge '0'entspricht false- und empty()kehrt truefür alle Werte gleich falsch . emptyWenn 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.
ToolmakerSteve
Beste Antwort +1.
Viktor Joras
9
  • In diesem Fall ist die Verwendung der Methode issetnicht angemessen.

Laut PHP-Dokumentation: http://php.net/manual/en/function.array-key-exists.php
(siehe Beispiel 2 array_key_exists () vs isset () )
Die Methodearray_key_exists dient zum Überprüfen der Schlüsselpräsenz im Array.

Der Code in der Frage kann also wie folgt geändert werden:

function fromPerson() {
   if (array_key_exists('fromPerson', $_POST) == FALSE) {
        return '';
   } else {
        return '+from%3A'.$_POST['fromPerson'];
   };
}

$newString = fromPerson();


  • Das Überprüfen des Vorhandenseins des Arrays $ _POST ist nicht erforderlich, da es sich seit Version 4.1.0 um eine globale Variable der PHP-Umgebung handelt (heutzutage erfüllen wir keine älteren Versionen von PHP).
Bronek
quelle
Dieser Code unterscheidet sich nur im Verhalten von der issetLösung, wenn das Post-Feld festgelegt ist, enthält jedoch NULL. Dies ist eine gute Alternative , wenn Sie NULLin der elseBranche zulassen möchten . Jedoch , es ist ein Fehler, wenn eine Zeichenfolge erforderlich ist; In dieser Situation issetist das Richtige der Fall, dieser Code jedoch nicht - er gibt den NULLWert weiter. Roberts spätere Antwort zeigt den Unterschied.
ToolmakerSteve
6

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

$fromPerson = filter_input(INPUT_POST, 'fromPerson', FILTER_DEFAULT);
if($fromPerson === NULL) { /*$fromPerson is not present*/ }
else{ /*present*/ }
var_dump($fromPerson);exit(0);
linuxatico
quelle
1
Andererseits ist auch die LESBARKEIT des Codes wichtig. IMHO issetist viel besser lesbar als ein Filterausdruck. Aber danke, dass Sie darauf hingewiesen haben. Dies ist eine nützliche Option.
ToolmakerSteve
Nun, Sie können Ihre eigene myIsset / 2-Wrapper-Metod schreiben, die Filter verwendet, aber das Verhalten von isset / 2
linuxatico
"Alle Methoden werden tatsächlich entmutigt" - das ist eine starke Aussage (auch wenn NetBeans als Warnung markiert). Haben Sie einen Link zu einer maßgeblichen Quelle , dass entmutigt direkte Verweise auf $ _POST? (Es gibt eine Menge über PHP, die eher auf Bequemlichkeit als auf Genauigkeit ausgelegt ist. Sehen Sie sich an, wie viele Personen in den Antworten auf diese Frage falsch verwendet werden 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.)
ToolmakerSteve
4

Versuchen

if (isset($_POST['fromPerson']) && $_POST['fromPerson'] != "") {
    echo "Cool";
}
Augustus Francis
quelle
Per Han Dijks Kommentar zu Rafaels Antwort empty($_POST['fromPerson'])führt dieser kombinierte Test durch. Einfacher zu lesen und zu tippen :)
ToolmakerSteve
@ToolmakerSteve: Gibt empty('0')zurück true. Es ist also nicht dasselbe.
Shi
1
@ Shi - ja, du bist richtig; was ich gesagt habe ist falsch! Es scheint, dass es keine einfachere Lösung gibt als den hier gezeigten Code.
ToolmakerSteve
3

Versuchen Sie es ?isset($_POST['fromPerson'])

Strager
quelle
3
if (is_array($_POST) && array_key_exists('fromPerson', $_POST)) {
    echo 'blah' . $_POST['fromPerson'];
}
jezmck
quelle
1
Prüft is_array ($ _ POST), ob POST überhaupt Werte enthält? In meiner App versuche ich festzustellen, ob es einen Beitrag gab oder nicht, bevor ich etwas anderes mache.
Jeff LaFay
1
Siehe meine Bearbeitung. 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'.
Jezmck
2

if( isset($_POST['fromPerson']) ) ist richtig.

Sie können eine Funktion verwenden und zurückkehren, besser als das Echo zu lenken.

Cristian Weiser
quelle
2
Diese Antwort fügt der Diskussion nichts hinzu, was Jahre zuvor noch nicht in anderen Antworten gesagt wurde .
ToolmakerSteve
1

Ich möchte überprüfen, ob es ausgegeben wird und ob es in einem ternären Operator leer ist.

// POST variable check
$userID  = (isset( $_POST['userID'] )    && !empty( $_POST['userID'] ))   ? $_POST['userID']   :  null;
$line    = (isset( $_POST['line'] )      && !empty( $_POST['line'] ))     ? $_POST['line']     :  null;
$message = (isset( $_POST['message'] )   && !empty( $_POST['message'] ))  ? $_POST['message']  :  null;
$source  = (isset( $_POST['source'] )    && !empty( $_POST['source'] ))   ? $_POST['source']   :  null;
$version = (isset( $_POST['version'] )   && !empty( $_POST['version'] ))  ? $_POST['version']  :  null;
$release = (isset( $_POST['release'] )   && !empty( $_POST['release'] ))  ? $_POST['release']  :  null;
Raymondim
quelle
5
empty('0')ist true. Also besser nicht haben version 0, oder userID 0, etc.
Shi
0

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:

if(sizeof($_POST) !== 0){
// Code...
}

Wie $_POSTein 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 $_POSTgesetzt ist ... Tatsächlich $_POSTbesteht der Fehler "undefinierter Index" immer nur, wenn Sie versuchen, nach einem $ _POST zu suchen Array-Wert, der nicht existiert.

$_POSTexistiert immer an sich entweder leer oder hat Array-Werte. $_POST['value']ist möglicherweise nicht vorhanden, wodurch ein Fehler "undefinierter Index" ausgelöst wird.

Jack Wright
quelle