If-Entscheidung mit 2 möglichen Variablenwerten

Hi liebe Community,

eines Vorweg: Da ich für ein großes Unternehmen arbeite kann ich euch keine Quelltexte geben, Datenschutz. Ihr müsst ein wenig mehr eure Fantasie bemühen als sonst. TUt mir Leid :wink:

Habe folgendes Problem bei einem Skript.

ich habe eine Variable $suchkategorie, die, je nach übergebenem Wert im switch-case, unterschiedliche Inhalte hat.
Jetzt möchte ich unterschiedliche Select-Strings haben, je nachdem, ob nach IP-Adresse Oder Hostname gesucht wird, oder nach Seriennummer, Systembetreuer etc.

Das ganze sieht bisher so aus:

if ($suchkategorie == „tcpipaddress“ || „dnsname“) {
Anweisungen
} else {
Anweisungen}

Aber irgendwie kümmert es ihn nicht ob es ne IP, n DNS name oder eben eine Seriennummer, ein Betreuer etc ist.
Er spuckt IMMER alles raus was er an Infos hat.

nimmt er das „|| ‚dnsname‘“ nicht?

Mit freundlichen Grüßen

ZeroEnna

Hallo

eines Vorweg: Da ich für ein großes Unternehmen arbeite kann
ich euch keine Quelltexte geben, Datenschutz. Ihr müsst ein
wenig mehr eure Fantasie bemühen als sonst. TUt mir Leid :wink:

Oha!

ich habe eine Variable $suchkategorie, die, je nach
übergebenem Wert im switch-case, unterschiedliche Inhalte hat.
Jetzt möchte ich unterschiedliche Select-Strings haben, je
nachdem, ob nach IP-Adresse Oder Hostname gesucht wird, oder
nach Seriennummer, Systembetreuer etc.
Das ganze sieht bisher so aus:

if ($suchkategorie == „tcpipaddress“ || „dnsname“) {
Anweisungen
} else {
Anweisungen}

Aber irgendwie kümmert es ihn nicht ob es ne IP, n DNS name
oder eben eine Seriennummer, ein Betreuer etc ist.
Er spuckt IMMER alles raus was er an Infos hat.
nimmt er das „|| ‚dnsname‘“ nicht?

Oje! Wenn Du drei Operatoren auf einer Zeile hast,
musst Du mal schauen, was die „Präzedenz“ ist.
(http://www.phpbuilder.com/manual/en/language.operato…)
Präzedenz von == ist höher als ||, daher folgende
Bedeutung:

 $a = $suchkategorie == "tcpipaddress"
 $b = $a || "dnsname"
 if($b) {
 ...

Korrekt wäre hier wahrscheinlich:

 if($suchkategorie=="tcpipaddress" || $suchkategorie=="dnsname") {
 ...

Besser: einen Hash (assoziatives Array) mit
den Schlüsselwörtern als Keys und den geforderten
Funktionen als Elemente (Funktionstabelle):

$globaler\_parameter = 3;

$table = Array(
 'tcpipaddress' =\> create\_function('$param', '
 global $globaler\_parameter;
 return $param + 0.5\*$param\*$param - $globaler\_parameter;'
 ), 
 'dnsname' =\> create\_function('$param', '
 global $globaler\_parameter;
 return $param - 0.5\*$param\*$param + $globaler\_parameter;'
 ),
 // ... weitere keys eingeben 
);

$suchkategorie = 'tcpipaddress';
$parameter = 21;

if(array\_key\_exists($suchkategorie, $table)) {
 $resultat = $table[$suchkategorie]( $parameter );
}
else {
 $resultat = "'$suchkategorie' gibbs nich!";
}

echo $resultat;

Grüße

CMБ

Hallo ZeroEnna,

mit dem Codestück

if ($suchkategorie == "tcpipaddress" || "dnsname") {

fragst Du ab, ob die Variable suchkategorie dem logischen Vergleich von den beiden Zeichenketten „tcpipaddress“ und „dnsname“ (=> False) entspricht. Du meinst aber wahrscheinlich eher

if (($suchkategorie == "tcpipaddress") ||
 ($suchkategorie == "dnsname")
 ) {

nicht wahr :smile: ?

MfG Georg V.

Vieln Dank Euch beiden. Ihr hab tmir beide sehr geholfen. Werde den Quellcode morgen anpassen, wenn ich wieder auf der arbeit bin.