• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

(Else)if Abfrage funktioniert nicht

Franky2207

Neues Mitglied
Hi,

ich möchte mithilfe einer if-bedingung abfragen, welche Schulklassen nach dem Anklicken der jeweiligen Schulform angezeigt werden sollen. Genauer erklärt: Klickt z.B. jemand auf den Button "Grundschule" so wird er zur nächsten Seite weitergeleitet wo dann nur die Klassen 1-4 angezeigt werden. Zuerst hatte ich dafür nur if-Bedingungen benutzt (ohne else oder elseif) aber das hat nicht funktioniert. Die Sessions werden korrekt abgespeichert und abgerufen (also wenn ich die Session ausgeben lasse, ist auch jedes Mal "grundschule", "hauptschule" etc. drin). Nach elseif hat es dann etwas besser funktioniert aber es klappt nur für die erste und zweite if-Bedingung -> Grundschule funktioniert einwandfrei (zeigt 1. - 4. Klasse an), der zweite Fall für Förder- und Hauptschule auch (zeigt 5. - 9. Klasse an) aber danach wird egal ob Realschule angeklickt wird oder Gymnasium weiterhin immer nur noch 5. - 9. Klasse angezeigt anstatt 5.-10. oder 5.-13.

Hier der Code ab den if-Bedingungen (der Teil zwischen PHP sind die HTML Buttons für die angezeigten Klassen):

PHP:
<?php if (@$_SESSION['schule'] == "grundschule"  ) {
?>

<div><p>1. Klasse</p></div>
<div><p>2. Klasse</p></div>
etc. bis 4. Klasse


<?php
}

elseif (@$_SESSION['schule'] == "foerderschule" OR "hauptschule"  ) {
?>

<div><p>5. Klasse</p></div>
<div><p>6. Klasse</p></div>
etc. bis 9. Klasse

<?php
}

elseif (@$_SESSION['schule'] == "realschule" ) {
?>

<div><p>5. Klasse</p></div>
<div><p>6. Klasse</p></div>
etc. bis 10. Klasse

<?php
}
else {
?>

<div><p>5. Klasse</p></div>
<div><p>6. Klasse</p></div>
etc. bis 13. Klasse

<?php
}
?>

Weiß jemand wo das Problem liegen könnte?

Herzliche Grüße,
Frank
 
Werbung:
Wenn Du mit Formularen arbeitest für die Auswahl wäre $_POST sicherlich richtiger als $_SESSION. Zudem wäre es gut, wenn Du das @-Zeichen weglässt, da du damit (zumindest bei älteren PHP-Versionen) auftretende Fehler unterdrückst die dich ggfs. bei deiner Suche weiterbringen würden.
 
Wie threadi schon sagte nehme das @ Zeichen weg und bei der zweiten Bedingung musst du auch sagen
$_session[Schule] == 'hauptschule'

Mir ist nun nicht bekannt das man da nur die Werte rein schreiben kann, aber ich könnte mich auch irren
 
Werbung:
PHP:
<form action="" method="POST">
<input type="radio" name="school" value="grundschule" checked>Grundschule
<input type="radio" name="school" value="realschule">Realschule
<input type="radio" name="school" value="hauptschule">Grundschule
<button type="submit">Absenden</button>
</form>

<?php

if(isset($_POST['school']) AND empty($_POST['school']) === FALSE) {

     switch($_POST['school']) {
           case 'grundschule':
           echo "Du Grundschüler!";
           break;

           case 'realschule':
           echo "Du Realschüler!";
           break;

           default:
           echo "Du kackst wahrscheinlich noch in die windeln!";
           break;
    }
}
?>
 
Hallo zusammen,

danke für die Antworten! Ich glaube, ich hatte mich bei der Problemstellung etwas undeutlich ausgedrückt.
Das sind insgesamt vier Seiten, die hintereinander verlinkt werden.
Auf den ersten drei Seiten wird anhand von Textfeldern abgefragt, welche Schule, Fach und Klasse derjenige auswählen möchte und auf der Letzten wird demjenigen dann eine bestimmte Menge von Lehrerprofilen angezeigt, die zu seiner Auswahl passen (ist für eine kleine Nachhilfevermittlung). Auf der ersten Seite wählt er die Schulform, klickt er nun z.B. auf Grundschule, wird er a) auf die nächste Seite geleitet und b) wird an diese Seite gesendet, dass er eben auf grundschule geklick hat, um das über GET in eine Session abzuspeichern.

Also auf erste Seite kann man anklicken welche Schule man wählt:

HTML:
<p><a href="lehrerwaehlen-fach.php?schule=grundschule">
Grundschule</a></p>
etc.

Dies wird auf der folgenden Seite dann in die Session abgespeichert:

PHP:
if ($_GET['schule'] <> "")
{
           $_SESSION['schule'] = $_GET['schule'];
}

Auf dieser Seite wird nun weiter abgefragt, wieder über Textfelder, welches Fach er denn wählen möchte:

HTML:
<p><a href="lehrerwaehlen-klasse.php?fach=Deutsch">
Deutsch</a></p>
etc.

Das wird auf der darauffolgenden Seite auch wieder in eine Session abgespeichert, genau wie oben. Und das funktioniert alles wunderbar (auch die Sessions) bis zur dritten Seite mit den Klassen, wo nun eben nur die Klassen angezeigt werden sollen (über if bzw. elseif Abfragen), die zur jeweiligen Schulform, die am Anfang gewählt wurde, passen. Da wird nun nur bei if schule = grundschule korrekt die ersten vier Klassen ausgegeben und über elseif die Klassen 5-9 für Förder- oder Hauptschule, aber sonst funktioniert da nichts, die Klassen 5-9 werden auch für Gymnasium, Gesamtschule, Berufsschule etc. ausgegeben obwohl es die identische elseif Abfrage ist!
Also im Code steht ja ... elseif (schule = realschule) { -> klassen 5-10), aber trotzdem, nur 5-9.
Fehler kommen keine und die Session gibt bei echo session xx auch jeweils die richtig abgespeicherte variable wieder (grundschule, realschule, gesamtschule etc.)

Darf man vielleicht nur einmal elseif benutzen? Aber das würde keinen Sinn machen oder?
Zumindest wäre es dann logisch warum nur if... elseif.. funktioniert und nicht das folgende elseif..

Sorry für den langen Text :(
 
Zuletzt bearbeitet:
Wie schon erwähnt

PHP:
elseif ($_SESSION['schule'] == "foerderschule" OR $_SESSION['schule'] == "hauptschule" ) {

du hast folgendes stehen
PHP:
elseif ($_SESSION['schule'] == "foerderschule" OR "hauptschule" ) {
 
Werbung:
Oha es klappt! Ich hätte niemals gedacht, dass das Fehler war! Danke dir!

Hab vor allem nicht verstanden, warum das dann die nachfolgenden elseif-Bedingungen lahm legt und nicht die, die es bedingt (also Förder- und Hauptschule).

Aber jetzt funktioniert's, also besten Dank noch mal!
 
Trotzdem ist es ratsam soetwas nicht per SESSION, sondern wenn man ein Formular benutzt per POST oder GET zu verarbeiten.
 
Werbung:
Trotzdem ist es ratsam soetwas nicht per SESSION, sondern wenn man ein Formular benutzt per POST oder GET zu verarbeiten.

So wie ich ihn verstanden habe, dann hat er mehrere Formulare, also ist das mit Session doch ok?
Die zwei einzigen Möglichkeiten die ich noch kenne wäre ein Formular, aber mit Javascript Formular steps einbauen, oder er setzt bei den nächsten Formulare ein input hidden mit den Werten aus dem vorigem Formular.

Eins ist mir noch eingefallen, er könnte die GET Parameter auch immer erweitern.

Oder versteh ich es nun falsch?

Oha es klappt! Ich hätte niemals gedacht, dass das Fehler war! Danke dir!

Hab vor allem nicht verstanden, warum das dann die nachfolgenden elseif-Bedingungen lahm legt und nicht die, die es bedingt (also Förder- und Hauptschule).

Aber jetzt funktioniert's, also besten Dank noch mal!

Ich versuche es mal zu erklären, bin da nicht wirklich gut drin, aber dein
OR "hauptschule"
war für die if bedingung immer true. Und der Rest ist halt nur Logik. Sprich wenn (ich kürz es etwas ab)
Schule == grundschule war geht er in die erste if und aufgrund der elseif nicht mehr weiter. Wenn Schule == foerderschule war lief auch noch alles, weil es vor der Bedingung OR "hauptschule" stand. Denn wenn die erste Bedingung zutrifft, prüft er alle anderen Bedingungen nicht mehr, was auch logisch sein sollte bei einem OR bei AND ist es natürlich was anderes.

Da nun aber "hauptschule" nun immer als true erkannt wurde, ging er halt nicht mehr weiter in die nächste elseif. Ich hoffe das ist etwas verständlich, ansonsten nookie, erklär du es mal :p

EDIT: Noch ein Ratschlag, Formulare würde ich immer mit POST abschicken, bzw. ich persönlich hab es mir so angeeignet. Wenn ich was mit GET abschicke dann will ich es auch irgendwie speichern können als bookmark zum Beispiel, wie ne Suche oder ein Filter.
 
Es reicht
PHP:
if (!empty($_POST['school'])) {
Aus der Doku zu empty
Ich weiß das es reicht, allerdings empfinde ich dies als die bessere und schönere Variante, vorallem wenn noch jemand anders über deinen Quellcode schaut. Jenkins rät auch dazu ("=== FALSE"), allerdings nur wenn du es auch so konfiguriert hast.
 
Ich benutze auch stets POST anstatt GET bei Formularen, allerdings ist dies kein Formular. Die jeweiligen Infos werden nur im Link weitergesendet, oder geht das dort auch per POST?
Also z.B. ->
HTML:
<ahref="lehrerwaehlen-klasse.php?schule=hauptschule">

Auf der nächsten Seite fange ich das "schule=hauptschule" über GET dann auf und packe es in die Session:

HTML:
if ($_GET['schule'] <> "")
{           
$_SESSION['schule'] = $_GET['schule'];
}

Am Ende habe ich dann drei Sessions (für Klasse, Fach und Schule) und sortiere mithilfe der If- bzw. elseif-Bedingungen dann die Profile.

Grüße!
 
Werbung:
Zurück
Oben