7 Zeilen Code... Hilfe!
Simpler Blackout
- php
0 Sirdan0 der_bernd0 Clemens
Hallo,
seit eine Stunden - Blackout. Lacht nicht. Warum ist die verdammte $a undefiniert?
<?
$a = "test";
if (($a==0)||($a==""))
echo "nicht definiert";
else
echo "definiert";
?>
Wie vergleiche ich denn eine Variable mit einer leeren Zeichenkette?
Danke.
Wie vergleiche ich denn eine Variable mit einer leeren Zeichenkette?
a == null
oder ?
a == null
null hin, null her, aber wie kann man sowas erklären?
<?
$a="test";
if ($a==0)
{
echo "nicht definiert";
}
else
echo "definiert";
?>
Es ist zum sterben, $a ist doch nicht gleich 0, oder verstehe ich da was nicht?
Hi, Stromausfall ;-)
$a="test";
if ($a==0)
Es ist zum sterben, $a ist doch nicht gleich 0, oder verstehe ich da was nicht?
Vielleicht hilft dir http://forum.de.selfhtml.org/archiv/2002/4/8635/#m48146
LG Orlando
Ich verstehe zwar nicht viel von PHP, also fast nichts, dafür Java um so besser, und ich würde Sagen das der Vergleich $a==0 nicht funktioniert da "test" ein String und 0 eine Zahl (Integer) ist. Versuch mal folgendes if($a == "0")
Ansonsnten ka..
Versuch mal folgendes if($a == "0")
Danke Erlöser, der nichts von PHP versteht.
Der Blackout löst sich langsam auf. Die Bedingung sollte eigentlich so aussehen ($a==0 && $a==""), dann klappt's auch mit dem Nachbar :). Ich habe im Eifer des Gefechts das logische ODER wieder mal unterschätzt.
Kiska
Der Blackout löst sich langsam auf. Die Bedingung sollte eigentlich so aussehen ($a==0 && $a==""), dann klappt's auch mit dem Nachbar :). Ich habe im Eifer des Gefechts das logische ODER wieder mal unterschätzt.
Das bringt auch nichts, da Du dann mit
<?
$a = "0";
if ($a==0 && $a=="")
echo "nicht definiert";
else
echo "definiert";
?>
auch wieder "definiert" bekommst!! Mit $a = 0; allerdings "nicht definiert" wobei - das nur am Rande - eine Wertzuweisung von "0" oder auch von "" nichts mit definiert oder nicht definiert zu tun hat ;-)
Clemens
Das bringt auch nichts, da Du dann mit
stimmt auch! Es sollte einfach in Anführungszeichen stehen.
Die ultimative Endversion:
<?
$a = "test";
if ($a=="0" && $a=="")
echo "nicht definiert";
else
echo "definiert";
?>
Bin isch froh, dass isch eusch habe:)
Kiska
Hallo,
Die ultimative Endversion:
<?
$a = "test";
if ($a=="0" && $a=="")
na also, die "0" sind langsam "gesickert", jetzt machste noch aus dem && ein || dann biste genau bei dem was du erreichen willst - und bei meinem posting von 00:37
Gruß
der_bernd
[der sich verzweifelt fragt, wann diese Bedingung jemals erfüllt werden könnte]
na also, die "0" sind langsam "gesickert", jetzt machste noch aus dem && ein || dann biste genau bei dem was du erreichen willst - und bei meinem posting von 00:37
... oder bei meinem von 00:23 Uhr...
Mei, san wir gut!! :-))
Clemens
Hallo Clemens,
und sorry liebes Forum ;-) ich kann's mir grad nicht verkneifen.
... oder bei meinem von 00:23 Uhr...
Mei, san wir gut!! :-))
Gut gesagt - oder andersrum:
"Mein Gott, was ist der Frager wieder "beratungsresisdent" *g*
Gruß
der_bernd
Hallo Kiska,
Die Bedingung sollte eigentlich so aussehen ($a==0 && $a==""), dann klappt's auch mit dem Nachbar :).
Und wie willst du diesen Zustand erreichen?
Die $a soll _gleichzeitig_ den Wert 0 haben _und_ leer sein?
Klar, greift dann dein else-Zweig sowie was drinnen steht - aber so richtig "sauber" kommt mir das nicht vor, spätestens bei komplexeren Sachen fällst du mit der Methode bestimmt auf die Nase..
So erschlägst du alle Eventualitäten:
<?
$a = "";
if (($a=="0") || ($a=="") || (!$a))
echo "nicht definiert";
else
echo "definiert";
?>
Gruß
der_bernd
Hallo Leute
Ich verstehe zwar nicht viel von PHP, also fast nichts,[...]
Ich auch.
[...] und ich würde Sagen das der Vergleich $a==0 nicht funktioniert da "test" ein String und 0 eine Zahl (Integer) ist.
Daran dachte ich auch.
Versuch mal folgendes if($a == "0")
Halt. Stop. Was soll das in Worten heissen? Wenn $a == "0" stimmt, dann ist doch $a irgend ein String (hier "0") und das wäre nur der Fall, wenn vorher $a genau dieser String zugewiesen worden wäre (durch $a = "0"). In diesem Fall wäre doch $a mit dem Wert "0" initialisiert und damit auch definiert.
Dess weiteren: Wann ist (!$a) == true?
Ist das, wenn...
a) ... $a delkariert, jedoch noch nicht definiert ist.
b) ... $a deklariert, definiert, jedoch noch nicht initialisiert ist.
c) ... $a == "" bzw. $a == 0 bei Zahlen ist.
Hab den durchblick nicht so ganz. Werde es jedoch gleich mit anderen Sprachen austesten.
MfG
Tom2
Hallo Blackout ;-)
if (!$a)
ist dein Freund.
Warum deine Lösung nicht greift, bin ich selber grad am grübeln, evtl. hängt es an der "Veroderung" von nummerischer Variable ( ==0) und Textvariable ( =="")
Gruß
der_bernd
if (!$a)
ist dein Freund.
Der !&a ist mein Freund, wenn die Variable nicht existiert. Die gibt's aber und ich möchte nur prüfen, ob Sie nicht evtl. leer ist oder den Wert 0 hat. Der Wert kommt aus einem Eingabefeld, das nicht leer sein darf und auch nicht 0 als Ziffer enthalten.
Warum deine Lösung nicht greift, bin ich selber grad am grübeln, evtl. hängt es an der "Veroderung" von nummerischer Variable ( ==0) und Textvariable ( =="")
Logisch ist es nicht, da ich zwei Bedingungen mit ODER verknüpfe und nur einer braucht falsch zu sein, um in den else zu gehen. Die $a=="" ist bereits die falsche Bedingung.
Hier nochmal die vereinfachte Variante zum Kopfzerbrechen:
<?
$a = "test";
if ($a==0)
echo "nicht definiert";
else
echo "definiert";
?>
Kiska
Hallo Kiska,
Der !&a ist mein Freund, wenn die Variable nicht existiert. Die gibt's aber und ich möchte nur prüfen, ob Sie nicht evtl. leer ist oder den Wert 0 hat. Der Wert kommt aus einem Eingabefeld, das nicht leer sein darf und auch nicht 0 als Ziffer enthalten.
Na, dann sag's doch gleich so ausführlich, was du eigentlich möchtest. Das geht wirklich nur mit:
($a=="0")
siehe dazu auch den Link von Orlando.
Gruß
der_bernd
Moin,
Der !&a ist mein Freund, wenn die Variable nicht existiert. Die gibt's aber und ich möchte nur prüfen, ob Sie nicht evtl. leer ist oder den Wert 0 hat. Der Wert kommt aus einem Eingabefeld, das nicht leer sein darf und auch nicht 0 als Ziffer enthalten.
Dein Problem liegt in der automatischen Typumwandlung, versuch doch einfach mal
if((int)$a != 0) echo "nichtnull"; else echo "null";
das wäre am ehesten was du beschrieben hast.
Ansonsten wandelt PHP die Typen hin und wieder um, weiss auch nicht mehr genau wie das Schema aussah, Fakt ist aber dass ("" == 0), ("test" == 0), (0 == "") und (0 == "test") alle wahr sind.
Wenn du überprüfen willst ob die beiden zu vergleichenden Dinge den gleichen Wert _und_ den gleichen Typ haben, musst du 3 Gleichheitszeichen benutzen (ab PHP 4): ("" === 0) ist falsch. Bei Eingabefeldern aus Formularen handelt es sich allerdings immer um Strings.
Vor diesem Hintergrund ist auch das Ergebnis deiner Abfrage klar:
Wenn ($a == 0) wahr ist, dann ist (($a == 0) oder irgendwas anderes) natürlich auch wahr.
--
Henryk Plötz
Grüße aus Berlin
Hallo!
<?
$a = "test";
if (($a=="0")||($a==""))
echo "nicht definiert";
else
echo "definiert";
?>
versuche es doch einfach mal so, dann ist klar, dass es sich auch beim Vergleich jedes mal um einen String und nicht um eine nummerische Variable handelt!
Clemens