Suche nach als

if, else, switch Kontrollen

Auf dieser Seite:

Durch if, and, or, elseif und else oder durch switch prüfe ich variable Werte. Je nach erfüllter oder verpasster Bedingung handle ich dann unterschiedlich. Als Beispiel wird die Entgegennahme und der Vergleich von übermittelten Variablen aus einer anderen Seite behandelt.

Variable übernehmen

Die Methode durch die Variablen übernommen werden, hängt von der Art ihrer Übermittlung ab. Im Formular sollte die Metode 'POST' (könnte aber auch 'GET') gewählt werden, via Links, werden die Variablen immer per 'GET' im Querrystring (an die Adresse angehängt) übermittelt.

Die Variablen müssen (entsprechend der Einstellung in PHP ini) explizit abgeholt werden.
Sie sind in diesen Arrays enthalten: $_POST[name] oder $_GET[name] und falls beide Methoden erwartet werden $_REQUEST[] (in diesem Beispiel ist dem so).

<?php
 
if(isset($_REQUEST["usr"])){    // Benutzereingabe, ev. von variable_seite.php
  
$usr $_REQUEST["usr"];       // abholen für alle folgenden Scripts
  
$usr htmlspecialchars($usr); // Usereingabe entschärfen
  
$usr strtolower($usr);       // in Kleinbuchstaben umwandeln: JA oder Ja in ja
 
} else {                        // falls diese Seite via Subnavigation geöffnet wurde
  
$usr "leer";
 }
?>
Savety first:
Die Entschärfung von Benutzereingaben sollte möglichst nahe dem Empfang erfolgen.

Auch wenn ich nicht vor habe, die Eingabe auszugeben, unterziehe ich die Variable hier einer Entschärfung durch htmlspecialchars(). So müsste ich weiter unten nicht mehr daran denken, dem Thema Sicherheit wurde genüge getan und ich kann entspannt weiter coden.

wenn - wenn - wenn

if()

Diese drei if-Abfragen prüfen, ob die eine oder die andere Bedingung erfüllt wurde - und drittens, ob die eine und die andere Bedingung nicht erfüllt wurde.

<?php
 
if ($usr == "ja") { echo "Sie haben sich dafür entschieden."; }
 if (
$usr == "nein") { echo "Sie haben sich dagegen entschieden."; }
 if (
$usr != "ja" and $usr != "nein") { echo "Sie haben weder 'ja' noch 'nein' gestimmt."; }
?>

Beachte: die verneinenden Vergleiche und der and Operator in der 3. if-Abfrage.

Sie haben weder 'ja' noch 'nein' gestimmt.

wenn - sonst wenn - sonst

elseif() und else

Die if-elseif-else-Abfrage fragt kein drittes Mal, sondern tut einfach etwas, es gibt die empfangene Eingabe aus.
Spätestens hier, vor der Ausgabe, müsste die Usereingabe entschärft werden; im Beispiel mit htmlspecialchars(). (Die wurde aber schon beim Empfang weiter oben entschärft.)

<?php
 
if ($usr == "ja") { 
  echo 
"Sie haben ja gesagt.<br />";
  echo 
"(Das haben Sie gut gemacht!)";
 } elseif (
$usr == "nein") {
  echo 
"Sie haben nein gesagt.";
 } else {
  echo 
"Sie haben ".htmlspecialchars($usr,ENT_QUOTES)." gesagt.";
 }
?>
Sie haben leer gesagt.

Alternativer if Syntax

endif

Statt zwischen geschweifte Klammern, kommt der Anweisungsblock zwischen einen Doppelpunkt und einem, das Ende der if Abfrage kennzeichnenden, endif.

<?php
if ($usr == "ja") : // Doppelpunkt
  echo "Sie haben ja gesagt.";
endif;              // endif
?>

Mir gefällt der Doppelpunkt nicht so gut, er ist mir zuwenig markant, darum möchte ich nicht auf geschweiften Klammern verzichten.

Operatoren

Vergleichende Operatoren

In einer Abfrage werden immer Zustände, Variablen mit Konstanten, Zahlen oder Rückgabewerten mittels Operatoren verglichen. Ist gleich, ist dabei nur eine der möglichen Fragen.

if ($a == $c)  {...} // gleich
if ($a != $c)  {...} // nicht gleich
if ($a === $c) {...} // identisch (auch Typ)
if ($a !== $c) {...} // nicht identisch (mit Typ)
if ($a <> $c)  {...} // ungleich
if ($a < $c)   {...} // kleiner als
if ($a <= $c)  {...} // kleiner als oder gleich
if ($a > $c)   {...} // grösser als
if ($a >= $c)  {...} // grösser als oder gleich

Rückgabewert ist boolean

Nur wenn der Rückgabewert true oder 1 ist, wird der Befehl in der geschweiften Klammer ausgeführt.

Operatoren geben boolean Werte an die Kontrollstruktur zurück, also 'true' (wahr) oder 'false' (falsch).


Als interger (als Zahl) entsprechen 1 dem true und 0 dem false.
Als string (als Zeichenkette) entsprechen "1" dem true und "" (leer) dem false.
true und false sind nicht casesensitive, also auch so sind TRUE und FALSE richtig geschrieben.

var_dump((bool) "");        // bool(false)
var_dump((bool) "text");    // bool(true)
var_dump((bool) 0);         // bool(false)
var_dump((bool) 1);         // bool(true)
var_dump((bool) -1);        // bool(true)
var_dump((bool) 1.1);       // bool(true)
var_dump((bool) FALSE);     // bool(false)
var_dump((bool) TRUE);      // bool(true)
var_dump((bool) NULL);      // bool(false)
var_dump((bool) array(11)); // bool(true)
var_dump((bool) array());   // bool(false)

Gleich oder identisch

== oder ===

Falls ein Rückgabewert einer Funktion oder Operation 0 sein dürfte, muss der Rückgabewert auf Identität geprüft werden.
Der Test false == 0 gibt nämlich TRUE zurück, da er nicht genau genug unterscheidet.
Der Test false === 0 gibt FALSE zurück, was stimmt, denn 0 ist eben nicht identisch mit false:

$intGesunde = 5;
$intKranke = 5;
$intAnwesende = $intGesunde - $intKranke;
if ($intAnwesende == false) { 
  echo "Ist die Berechnung schief gelaufen?"; 
}
if ($intAnwesende === false) { 
  echo "Die Berechnung ist schief gelaufen!";
} else { 
  echo "Es hatte $intAnwesende Anwesende."; 
}
Ist die Berechnung schief gelaufen?
Es hatte 0 Anwesende.

Konstanten im Vergleich

Wird eine Variable mit einer Konstanten verglichen, sollte die Konstante links des Vergleichsoperators stehen, es sollte also die Konstante mit der Variablen verglichen werden. (Das mache ich selten so, aber es wäre Fehlerresistenter, weil Fehlermeldungen generiert werden.)
Z.B.: if (false == $fp) {...} // $fp = false generierte keine Fehlermeldung
Z.B.: if (7 === $intZwerge) {...} // $intZwerge = 7 generierte keine Fehlermeldung

Logische Operatoren

and, &&, or, ||

Durch logische Operatoren werden Bedingungen differenzierter geprüft. Zusätzliche oder alternative Bedingungen werden in der selben Klammer gestellt:

if ($a == 1 and $b == 1) // und will beide Bedingungen erfüllt haben
if ($a == 1 or $a == 2)  // oder will mindestens eine von beiden erfüllt haben
if ($a == 1 xor $a == 2) // entweder oder will maximal eine von beiden erfüllt haben

Statt 'and' gilt auch &&, statt 'or' gilt auch ||. Bei der Verkettung von mehreren Bedingungen hat sich && besser bewährt!
Bei komplexen Bedingungen mit Rechenoperationen empfiehlt sich ein Klammerpaar zur Abgrenzung des logischen Operators zu den Bedingungen:
if ((komplexe Bedingung) && (komplexe Bedingung)) // beide Bedingungen in Klammern

Ternärer Operator

? :

Der ternäre Operator erlaubt eine sehr knappe Abfrage und wird darum innerhalb von Ausgaben verwendet:

<?php 
$Kontostand = -12360;
echo "Kontostand 31.12.2012: <span style='color:"
     .($Kontostand < 0 ? "red" : "black")
     .";'> $Kontostand</span> CHF"; 
?>
Kontostand 31.12.2012: -12360 CHF

switch - die Fallstudie

switch(), case, break

Mehrere if-Aneinanderrehungen können umgangen werden durch den Vergleich einer Variablen mit mehreren Fällen, der bei Übereinstimmung abgebrochen wird.

Zum Beispiel:

if ($usr == nein) {machetwas;}
elseif ($usr == jein) {machetwas;}
elseif ($usr == ja) {machetwas;}
else {machetwas;}

wird zu:

<?php
switch ($usr){
 case 
"nein":
  echo 
"Zutritt verweigert.";
  break; 
// Abbruch
 
case "jein":
  echo 
"Bitte entscheiden sie sich.";
  break; 
// Abbruch
 
case "ja":
  echo 
"Zutritt erteilt.";
  break; 
// Abbruch
 
default:
  echo 
"Eingabe ungültig.";
}
?>
Eingabe ungültig.

Kontrollschleifen

Siehe Schleife

 


Valid XHTML 1.0 Check den Code.

for, while Schleifen >> << Variable an Seite
Ich bin hier: > PHP Lehrling >>> if, else, switch Kontrollen
 
HTML und XHTML | CSS | JavaScript und DHTML | PHP und MySQL | Andere Sprachen
Letzter Update: 18.05.2012