Profil | Mitglieder | Registrieren | Start | Suche


PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Prüfen ob Variable leer ist    » Hallo Gast [Login | Registrieren]

Neues Thema | Antworten   

Autor Beitrag
satzzeichen
Mitglied
Aktiver User


Dabei seit: 09.05.2006
Herkunft: Rötha bei Leipzig in Sachsen
Posts: 150
     Prüfen ob Variable leer ist Zitat | Bearbeiten

Oft hat man das Problem das man überprüfen möchte ob eine Variable leer ist. Zwar stellt PHP einem die Funktion empty() zur Verfügung, allerdings hat diese eine Menge nachteile. Z.B. wenn man einen String hat der nur aus Freizeichen und Tabulatoren (Einrückungen) besteht, wird diese Funktion angeben das die Variable einen Wert hat. Oft ist genau das nicht erwünscht. Die nachfolgende Funktion sollte garantiert funktionieren auch wenn euer String nur aus Leerzeichen besteht.

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:

<?php
function blank($String)
{
  if(!isset(
$String))
     return 
true;

  
$Replace = array(' ','&nbsp;');
  
$String trim($String);
  
$String str_replace($Replace,'',$String);
  
  return empty(
$String);
}
?>



MfG satzzeichen

Casino Games -> meine Casino Seite :-)


Post wurde schon 6x editiert, das letzte mal am 29.06.2007 um 12:51 von Andavos
08.11.2006, 10:39 Profil | PM | E-Mail  
peter
Mitglied
Sehr guter User


Dabei seit: 29.07.2007
Herkunft:
Posts: 661
      Zitat | Bearbeiten

wieso nicht einfach
if($bla==""){} machen?


shit happens, you too.
09.10.2007, 23:22 Profil | PM | E-Mail  
Teralios
Moderator
Perfekter User


Dabei seit: 18.09.2005
Herkunft: Berlin
Posts: 2542
      Zitat | Bearbeiten

Zitat:
Orginal von peter
wieso nicht einfach
if($bla==""){} machen?

Weil dies nicht geht, wenn die Variablen z.b so aussieht:

 PHP 
1:
$bla = " ";

Diese Variabel ist nicht null, nicht leer, aber enthält Leerzeichen. Hier greift weder empty, is_null, isset noch dein == "".

Die Funktion Satzzeichen ist aber auch nicht so das Wahre, da sie mehr macht, als nötig!
Meist reicht es, wenn man trim auf eine Variabel anwendet.
 PHP 
1:
2:
3:
4:
5:
$bla = " ";
$bla = trim($bla);
if (empty($bla)) {
    echo "Die Variabel ist leer.";
}





Post wurde schon 1x editiert, das letzte mal am 10.10.2007 um 09:37 von Teralios
10.10.2007, 09:36 Profil | PM | E-Mail  
Manko10
Mitglied
Sehr guter User


Dabei seit: 30.03.2007
Herkunft: Dschörmänie
Posts: 840
      Zitat | Bearbeiten

Nun kommt aber noch etwas hinzu. Ich weiß nicht, was es ist, aber irgendwie haben die PHP-Entwickler bei empty() einen Bug zum Feature gemacht .
empty() gibt nämlich auch true zurück, wenn die Variable gar nicht leer ist, sondern die Wert 0 oder false enthält. Es müsste demnach so heißen:
 PHP 
1:
2:
3:
4:
5:
6:
7:
<?php
$var 
"  ";
$var trim($var);
if (empty(
$var) && $var != && $var != false) {
    echo 
"Variable ist leer!";
}
?>

Alternativ könnte man auch folgendes tun:
 PHP 
1:
2:
3:
4:
5:
6:
7:
<?php
$var 
"  ";
$var trim($var);
if (
$var == null) {
    echo 
"Variable ist leer!";
}
?>


Das ganze (sowohl das erste Beispiel als auch das zweite) haben aber einen Haken:
 Code 
1:
Notice: Undefined variable: var in xxx on line xxx

Diese Meldung würde immer ausgegeben, wenn die Variable vorher nicht mit $var = " "; initialisiert würde. Beim zweiten Beispiel würde dies auch bei der if-Abfrage passieren. Deshalb würde ich das ganze wie folgt ändern:

 PHP 
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
<?php
if (isset($var)) {
    
$var trim($var);
    if (
$var == null) {
        echo 
"Variable ist leer!";
    }
} else {
    echo 
"Variable existiert nicht!";
}
?>


Wenn man das ganze in eine Funktion schreiben möchte, um es universal anwenden zu können, kann man die isset()-Abfrage natürlich weglassen, da der Compiler schon den Versuch, eine Funktion mit nicht initialisierten Variablen als Parameter mit einer Notice vermerkt. Das muss also schon vorher geprüft werden.

MfG
Manko10


Tutorials:
Barrierefreie CAPTCHAs (2)
Rechtevergabe mit boolescher Algebra

_________________

Ich lese keine Posts ohne aussagekräftigen Titel!
PHP-Manual - MySQL-Manual - Top10 der PHP-Fragen - RegisterGlobals, was ist das? - Warum Frames out sind (und es immer schon waren...)


Post wurde schon 2x editiert, das letzte mal am 10.10.2007 um 19:52 von Manko10
10.10.2007, 19:50 Profil | PM | E-Mail  
oz
Mitglied
Guter User


Dabei seit: 20.05.2005
Herkunft:
Posts: 449
      Zitat | Bearbeiten

Zitat:
Orginal von Manko10
Nun kommt aber noch etwas hinzu. Ich weiß nicht, was es ist, aber irgendwie haben die PHP-Entwickler bei empty() einen Bug zum Feature gemacht .


*sigh*

http://de.php.net/manual/de/function.empty.php


11.10.2007, 16:57 Profil | PM | E-Mail  
Manko10
Mitglied
Sehr guter User


Dabei seit: 30.03.2007
Herkunft: Dschörmänie
Posts: 840
      Zitat | Bearbeiten

Das Widerlegt meine Aussage nicht .
Ich muss sagen, dass ich empty() insgesamt etwas allgemein finde. Jeder muss selbst entscheiden, was in dieser Situation leer ist und was als Wert gilt.


Tutorials:
Barrierefreie CAPTCHAs (2)
Rechtevergabe mit boolescher Algebra

_________________

Ich lese keine Posts ohne aussagekräftigen Titel!
PHP-Manual - MySQL-Manual - Top10 der PHP-Fragen - RegisterGlobals, was ist das? - Warum Frames out sind (und es immer schon waren...)
12.10.2007, 18:39 Profil | PM | E-Mail  
Seiten (1):  1 
PHP-Support.de » Programmierung » PHP & MySQL » Codeschnipsel » Prüfen ob Variable leer ist   

Neues Thema | Antworten   


Powered by Command Board 1.0 - Beta 2.0 © 2004-08 PHP-Einfach | Impressum | Datenschutz