Aloha ;)
wollte dieses nun bei mir einbauen, hab es so gemacht:
if(isUserLoggedIn($mysqli) === FALSE) { header('Location: login'); } $object = userDaten($mysqli, session_id()); elseif ( $object->user_type == 'administrator') { header('Location: index'); }
Da sind auf jeden Fall Syntaxfehler drin. Deine Definition von $object steht außerhalb des if-Anweisungsblocks, obwohl nachher ja noch ein else (hier elseif) folgen soll. Wenn du ein if und ein else kombinieren willst, müssen diese natürlich zusammenstehen.
Welche Bedeutung sollte der folgende Anweisungsblock losgelöst auch haben?
elseif (
$object->user_type == 'administrator') {
header('Location: index');
}
Ein "ansonsten" ohne "wenn" ist schlicht und ergreifend bedeutungslos. Deshalb darf zwischen if-Block und else-Block auch nichts anderes stehen.
Aber auch logisch musst du grundsätzlich überlegen, was du erreichen willst. Ich schätze, $object soll gefüllt werden, sofern der User eingeloggt ist, unabhängig davon ob man administrator ist oder nicht.
In den if-Abfragen bisher gibt es aber noch gar keinen Strang, der diese Bedingung erfüllt (denn bisher waren die beiden einzigen abgefragten/abgefangenen Fälle die Fälle "User ist nicht eingeloggt" und "User eingeloggt und Administrator". Du brauchst aber "User ist Administrator".
In dem Fall ist die elseif-Kurzschreibweise eher ungeeignet, es ginge aber auch:
if(isUserLoggedIn($mysqli) === FALSE) {
//Fall: nicht eingeloggt
header('Location: login');
} elseif ($object->user_type == 'administrator') {
//Fall: eingeloggt als Administrator
header('Location: index');
$object = userDaten($mysqli, session_id());
} else {
//Fall: eingeloggt, nicht als Administrator
$object = userDaten($mysqli, session_id());
}
Siehst du, warum das ungünstig ist? Hier wird eine Aktion an zwei Stellen ausgeführt, das ist besonders wartungstechnisch unsinnvoll. Besser ist hier, elseif nicht in Kurzschreibweise, sondern ausgeschrieben zu verwenden:
if(isUserLoggedIn($mysqli) === FALSE) {
//Fall: nicht eingeloggt
header('Location: login');
} else {
//Fall: eingeloggt
if ($object->user_type == 'administrator') {
//Fall: ...als Administrator
header('Location: index');
$object = userDaten($mysqli, session_id());
}
$object = userDaten($mysqli, session_id());
}
Mit dieser Version hast du weiterhin alle Vorteile.
Anmerkung: Ich bin mir nicht ganz sicher, ob du das wolltest wie oben... Oben habe ich angenommen, dass im Fall "eingeloggt als Administrator" das $object auch definiert werden soll. Falls nicht, ist es natürlich unproblematisch, die erste Variante zu benutzen, z.B. so:
if(isUserLoggedIn($mysqli) === FALSE) {
//Fall: nicht eingeloggt
header('Location: login');
} elseif ($object->user_type == 'administrator') {
//Fall: eingeloggt als Administrator
header('Location: index');
} else {
//Fall: eingeloggt, nicht als Administrator
$object = userDaten($mysqli, session_id());
}
Grüße,
RIDER
Camping_RIDER a.k.a. Riders Flame a.k.a. Janosch Zoller Erreichbar meist Mittwochs ab 21 Uhr im Self-TS (ts.selfhtml.org) oder sonst - wenn online - auf dem eigenen TeamSpeak-Server (fritz.campingrider.de). # Facebook # Twitter # Steam # YouTube # Self-Wiki # ch:? rl:| br:> n4:? ie:% mo:| va:) js:) de:> zu:) fl:( ss:| ls:[