Lieber dedlfix,
empty()
hat auch die Eigenschaft, keine Meldung zu erzeugen, wenn der Wert im Array nicht vorhanden ist.
das ist zwar richtig, in diesem Falle aber in Ordnung. Ist der Array-Schlüssel nicht vorhanden, liefert empty()
ein true
, so dass der if
-Zweig nicht eingeschlagen wird.
Andererseits ist ein Leerstring zwar leer, aber ein String mit Leerzeichen ist es nicht.
empty()
hätte hier also nicht allein geholfen.
Eine Plausibilitätsprüfung habe ich nicht geliefert, das ist richtig. Aber Bernds Frage war eher, warum seine Prüfung auf Leerstring nicht griff. Hier hat mein Code geleistet, was Bernds Code nicht leisten konnte.
Ein
empty(trim($array['feld']))
ist zwar mittlerweile ausführbar (früher wollte empty() lediglich Variablen und keine Ausdrücke als Parameter), hat aber wieder das Problem, dass für dastrim()
der Wert$array['feld']
ermittelt werden muss, und das zur bekannten Notice bei Nichtvorhandensein führt.
Also war mein Code für diese Prüfung alleine besser.
empty()
ist keine normale Funktion sondern ein Sprachkonstrukt, und PHP löst hier nicht den übergebenen Parameter auf, wie es das bei normalen Funktionen tun würde.
Wozu auch? Es ist eine Holzhammer-Methode! Wer sie einsetzt, muss sie genau kennen, um sie korrekt anzuwenden.
Man kann also zwar hier mit empty() arbeiten, muss aber selbst das Vorhandesein des Eintrags in $_POST prüfen und darauf ein trim() ausführen, bevor man empty() bemüht.
Oder man macht einfach eine echte Plausibilitätsprüfung, indem korrekt nach dem Vorhandensein des Array-Schlüssels geschaut wird (array_key_exists()
), um dann den Wert auf seine Gültigkeit hin zu prüfen.
Liebe Grüße,
Felix Riesterer.