TP Underground Lounge 07/08
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Thema bewerten
Alt 02.07.2005, 23:29   #1
TP-Veteran
 
Benutzerbild von Dome
 
Registriert seit: Feb 2004
Ort: Stuttgart
Dome bringt sich richtig einDome bringt sich richtig ein

If-Anweisung funktioniert nicht, wie sie soll!


Hi, ich habe folgenden Code:

PHP-Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>ShoutBox</title>
</head>

<body>
<?php
$mode 
$_GET["mode"];


if(
$mode != "true" || $mode != "false"){
$mode "false";
}
elseif(
$mode == "true"){
$mode "true";
}

if(
$mode){
echo 
"Das Fenster wird immer im Vordergrund angezeigt!<br>";
echo 
"<br><a href=\"?mode=false\">PopUp normal behandeln</a>";
echo 
"<br><a href=\"javascript:window.close\">PopUp schließen (vom Vordergrund aus!)</a>";
}
elseif(
$mode == "false"){
echo 
"Das Fenster wird Normal angezeigt!<br>";
echo 
"<br><a href=\"?mode=true\">PopUp immer im Vordergrund halten</a>";
echo 
"<br><a href=\"javascript:window.close()\">PopUp schließen (vom Normalen aus!)</a>";
}

?>


</body>
</html>
Es wird immer ein Fehler angezeigt:
Code:
Notice: Undefined index: mode in c:\programme\e-novative\WAMP\www\sonstiges\Shoutbox\shoutbox.php on line 10
Das ist es aber nicht, denn "$mode" wird automatisch true und nicht false! Dann kommt der link "PopUp normal behandeln" und wenn ich drauf klicke, dann wird zwar oben in der Adressleiste das hier angezeigt: "shoutbox.php?mode=false" aber es wird immer noch das hier angezeigt:
Code:
Das Fenster wird immer im Vordergrund angezeigt!

PopUp normal behandeln
PopUp schließen (vom Vordergrund aus!)
und nicht, dass es normal behandelt wird!

Was hab ich falsch gemacht?

P.S. ich weiß ja, woher die fehlermeldung kommt, denn ich hab das get ja nicht angegeben, und ich weiß auch, wie ich die fehlermeldung abschalten kann, aber ich wollte es doch erwähnen.
__________________
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
Dome ist offline   Mit Zitat antworten


Alt 02.07.2005, 23:40   #2
TP-Moderator
 
Benutzerbild von Stuck Mojo
 
Registriert seit: Feb 2001
Ort: Helmstedt/Wolfsburg
Stuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKEStuck Mojo ist ein richtiges Arbeitstier - DANKE
false und true sind boolsche Werte. Du nutzt Sie aber in Form von Strings. Ein String mit der Länge > 0 wird als boolscher Wert IMMER als TRUE angesehen...
Desweiteren wird diese IF-Abfrage:
PHP-Code:
if ($mode != true || $mode != false){ // korrigiert
    
$mode false

IMMER ausgeführt! Nämlich dann wenn $mode nicht wahr ist oder wenn mode nicht falsch ist... also IMMER!

Gruss
Jan
Stuck Mojo ist offline   Mit Zitat antworten
Alt 02.07.2005, 23:46   #3
TP-Veteran
 
Benutzerbild von Dome
 
Registriert seit: Feb 2004
Ort: Stuttgart
Dome bringt sich richtig einDome bringt sich richtig ein
Bin leider noch Anfänger! deshalb meine frage: mit was muss ich das ersetzten, dass es heißt: Wenn $mode IST NICHT..., dann...?
__________________
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
Dome ist offline   Mit Zitat antworten
Alt 03.07.2005, 12:41   #4
TP-Specialist
 
Benutzerbild von rewboss
 
Registriert seit: Mar 2005
Ort: Unterfranken
rewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKE
Also, wenn ich dich richtig verstanden habe, willst du die Variable $mode prüfen. Wenn sie nicht definiert ist oder wenn sie einen anderen Wert als true oder false enthält, soll er den Wert false erhalten.

Es gibt einiges hier zu berücksichtigen. Eine Sache ist die automatische Konvertierung von Datentypen. Nehmen wir dieses Beispiel:

PHP-Code:
$variable 0;
if(
$variable == false) echo "0 ist falsch"
Die Variable $variable wird automatisch konvertiert: sie erhält einen boolschen Wert, damit die Bedingung if($variable == false) ausgeführt werden kann. Eine Zahl, die nicht gleich 0 ist, wird zu false: 0 aber wird zu false. So ist die Bedingung $variable==false wahr, und der echo-Befehl wird ausgeführt. Dasselbe passiert, wenn wir $variable zwar deklarieren, aber ihr wird kein Wert zugewiesen.

Das kann man unterbinden, indem man === nimmt, statt ==. Dieser Operator konvertiert keine Datentypen -- sind die Daten unterschiedlicher Typen, ist das Ergebnis automatisch false:

PHP-Code:
$variable 0;
if(
$variable === false) echo "0 ist falsch"
$variable hat einen Wert des Typs integer, false ist ein Wert des Typs boolean, also ist die Bedingung falsch und der echo-Befehl wird nicht ausgeführt.

Für "ist nicht" nehmen wir statt != nun !== damit keine Konvertierung stattfindet.

Zweitens: PHP ist keine natürliche Sprache. Nehmen wir den Satz "Falls $variable nicht 1 oder 2 ist...". Das können wir nicht wörtlich in PHP "übersetzen":

PHP-Code:
if($variable !=|| $variable !=2) echo "Hallo Welt"
Der echo-Befehl wird immer ausgeführt. Warum? Weil || bedeutet: Wenn links wahr ist, oder rechts wahr ist, oder beides, dann ist das Ergebnis wahr. Gleicht $variable 1, ist links falsch und rechts wahr; gleicht $variable 2, ist links wahr und rechts falsch. Gleicht $variable etwas anders, sind beide Seiten wahr. In allen drei Fällen ist das Ergebnis wahr.

Statt || brauchen wir && -- das bedeutet: Das Ergebnis ist nur dann wahr, wenn links und rechts wahr ist:

PHP-Code:
if($variable !=&& $variable !=2) echo "Hallo Welt"
Zu Deutsch: Falls $variable nicht 1 ist und $variable auch nicht 2 ist...

Nun zurück zum eigentlichen Problem. Wenn $mode keinen boolschen Wert hat, soll sie den Wert false erhalten. Wenn sie gar nicht vorhanden ist, soll sie den Wert false erhalten. Nur, wenn sie true ist, soll sie so bleiben, wie sie ist.

Die Funktion isset() prüft ob eine Variable überhaupt existiert. Amsonsten brauchen wir nur noch zu prüfen, ob $mode den boolschen Wert true hat; dabei verwenden wir === bzw. !==, damit der Wert nicht konvertiert wird. Und so sieht's aus:

PHP-Code:
if(!isset($mode) || $mode!==true$mode=false
Zu Deutsch: Falls $mode nicht existiert, oder $mode einen anderen Wert als den boolschen Wert true hat, dann...
rewboss ist offline   Mit Zitat antworten
Alt 03.07.2005, 15:58   #5
TP-Veteran
 
Benutzerbild von Dome
 
Registriert seit: Feb 2004
Ort: Stuttgart
Dome bringt sich richtig einDome bringt sich richtig ein

wenn ich dich jetzt richtig verstanden habe, dann


... müsste es ja so funktionieren:

PHP-Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>ShoutBox</title>
</head>

<body>
<?php
$mode 
$_GET["mode"];

if(!isset(
$mode) || $mode!==true){
$mode false
}

if(
$mode){
echo 
"Das Fenster wird immer im Vordergrund angezeigt!<br>";
echo 
"<br><a href=\"?mode=false\">PopUp normal behandeln</a>";
echo 
"<br><a href=\"javascript:window.close\">PopUp schließen (vom Vordergrund aus!)</a>";
}
elseif(!
$mode){
echo 
"Das Fenster wird Normal angezeigt!<br>";
echo 
"<br><a href=\"?mode=true\">PopUp immer im Vordergrund halten</a>";
echo 
"<br><a href=\"javascript:window.close()\">PopUp schließen (vom Normalen aus!)</a>";
}

?>


</body>
</html>
Das tut es aber nicht! Es wird immer als False behandelt, obwohl $mode eigentlich True sein müsste! Oder was hab ich falsch gemacht?
__________________
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
Dome ist offline   Mit Zitat antworten
Alt 03.07.2005, 16:31   #6
TP-Specialist
 
Benutzerbild von rewboss
 
Registriert seit: Mar 2005
Ort: Unterfranken
rewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKErewboss ist ein richtiges Arbeitstier - DANKE
Ach! -- ich Depp!

OK, du machst das mit einem Query-String, etwa so:

domain/datei.php?mode=true;

In dem Fall ist die Variable $_GET['mode'] ein String. Das heißt, auch wenn im Query mode=true steht, ist die Bedingung $_GET['mode']===true immer falsch. Wobei $_GET['mode']==="true" ist dann wahr.

Das Problem ist, auch wenn mode=false steht, ist die Bedingen $_GET['mode']==false auch noch falsch. Warum? Auch wenn wir == nehmen, wird der String "false" in den boolschen Wert true umgewandelt. Nur der String "" (also, ein leerer String) wird in false konvertiert.

Eine Möglichkeit bestünde darin, den String als String zu prüfen. In dem Fall, müssen wir prüfen, ob der String den Wert "true" hat, wenn nicht, soll der den Wert "false" haben, etwa so:

PHP-Code:
if(!isset($mode) || $mode!=="true"$mode="false"
Merke -- das sind keine boolschen Werte, sondern Strings. Also if($mode) muss in if($mode=="true") umgewandelt.

Eine zweite Möglichkeit wäre, den String in einen boolschen Wert umzuwandeln. Das ginge dann so:

PHP-Code:
$mode = ($mode=="true") ? true false
Wenn du den Operator ?: nicht kennst, dann funktioniert es so:

Bedingung ? A : B

bedeutet: Wenn die Bedingung wahr ist, nimm A; wenn die Bedingung falsch ist, nimm B. In unserem Fall also: Wenn die Variable $mode den Wert "true" hat, dann soll sie den boolschen Wert true erhalten: in allen anderen Fällen kriegt sie den Wert false. Dann funktioniert später die Bedingung if($mode).

Eine dritte Möglichkeit wäre, nicht mode=true oder mode=false zu nehmen, sondern mode=1 bzw mode=0. In diesem Fall wird in der if-Bedingung if($mode) der Wert 1 in true konvertiert und der Wert 0 in false. Vorsichtshalber könntest du noch prüfen, ob $_GET['mode'] vorhanden ist. Also:

PHP-Code:
$mode = (isset($_GET['mode'])) ? $_GET['mode'] : 0;

if(
$mode){
  
// Fenster wird im Vordergrund gezeigt
}
else{
  
// Fenster wird normal gezeigt


Geändert von rewboss (03.07.2005 um 16:39 Uhr).
rewboss ist offline   Mit Zitat antworten
Alt 03.07.2005, 16:54   #7
TP-Veteran
 
Benutzerbild von Dome
 
Registriert seit: Feb 2004
Ort: Stuttgart
Dome bringt sich richtig einDome bringt sich richtig ein
Danke für die Hilfe!
so hab ichs gemacht und so funktionierts!
PHP-Code:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<title>ShoutBox</title>
</head>

<body>
<?php
$mode 
= (isset($_GET['mode'])) ? $_GET['mode'] : 0

if(
$mode){ 
echo 
"Das Fenster wird immer im Vordergrund angezeigt!<br>";
echo 
"<br><a href=\"?mode=0\">PopUp normal behandeln</a>";
echo 
"<br><a href=\"javascript:window.close\">PopUp schließen (vom Vordergrund aus!)</a>";
}
else{
echo 
"Das Fenster wird Normal angezeigt!<br>";
echo 
"<br><a href=\"?mode=true\">PopUp immer im Vordergrund halten</a>";
echo 
"<br><a href=\"javascript:window.close()\">PopUp schließen (vom Normalen aus!)</a>";




?>


</body>
</html>
THX!!!!!!
__________________
Gruß
Dome
__________________
Um mal auf das Renomee-System aufmerksam zu machen: Klick
TP Battlebay: www.tp-battlebay.de.ki (endlich wieder Online!)
Dome ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik
If-Anweisung funktioniert nicht, wie sie soll! If-Anweisung funktioniert nicht, wie sie soll!
« Zusaätzliche Schaltfläche | Spieler erkennung auf Server »

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67