(else)if Abfrage bleibt nach erster Abfrage hängen

  • Hi,


    ich möchte mithilfe einer if bzw. elseif-bedingung abfragen, wie viele Klassen zur Auswahl je nach 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 sollen. Dies ist kein Formular, sondern schlichte Textfelder in Button-Form auf die der Nutzer klicken kann und die dann jeweils zur nächsten Auswahl weiterleiten, und dabei eben die abgeschickten Informationen (z.B. ?schule=grundschule im link) auf der nächsten Seite in einer Session abgespeichert werden.


    Zuerst hatte ich dafür nur if-Bedingungen benutzt (ohne else oder elseif) aber das hat nicht funktioniert und die if-bedingungen wurden schlicht ignoriert. Die Sessions werden korrekt abgespeichert und abgerufen (also wenn ich die Session ausgeben lasse, ist auch jedes Mal "grundschule", "hauptschule" etc. drin, daran liegts also nicht). Nach elseif hat es dann etwas besser funktioniert aber er bleibt jetzt jedes Mal nach Förder- und Hauptschule hängen -> Grundschule funktioniert einwandfrei (zeigt 1. - 4. Klasse an), der zweite Fall für Förder- und Hauptschule auch (zeigt 5. - 9. Klasse an) aber alles andere ob Realschule angeklickt wird oder Gymnasium, es wird immer nur die 5. - 9. Klasse angezeigt.


    Ein Beispiel für ein Textfeld:


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


    Dasselbe für die anderen Schulformen


    Dies wird auf der nächsten Seite dann in einer Session abgespeichert:


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



    Und nun soll auf Basis der jeweils ausgewählten Schule auch nur die jeweilige Klassen-Spannweite angezeigt werden per if/elseif-Bedingung (Grundschule = 1.-4. Klasse, Hauptschule = 5.-9. Klasse, Gymnasium 5.-13. etc. etc.) jedoch funktioniert diese if abfrage nur für "grundschule" und "hauptschule" also 5.-9.




    Herzliche Grüße,
    Frank

  • Hey,


    Dein Fehler liegt in dieser Zeile hier


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


    "if" vergleicht so genannte Boolschge-Werte, also nur true oder false und "OR" ist ein boolscher Operator, du bezioehst or hier aber auf dienen Vergleich "=="


    Viel gerede um wenig Inhalt, richtig müsste so sein:


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


    Ein Hinweis für die Zukunft: Fehlervermeidung, nicht Fehlerunterdrückung!


    Lg Kanu

  • Bin gerade etwas müde, weiß also nicht was Du suchst.
    Aber hier hast Du einen Fehler:

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


    Warum:
    (siehe Kommentare)

    PHP
    elseif (
        @$_SESSION['schule'] == "foerderschule" // OK, ausser das @, aber das kann man machen
        OR "hauptschule"  // hier ergibt die bedingung IMMER true zurück, denn ein nicht leerer string "ist etwas", also nicht "flasch"
    )


    ändere das mal in das hier:

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


    und noch besser ohne @

    PHP
    elseif (
        isset($_SESSION['schule'])
        AND ( 
            $_SESSION['schule'] == "foerderschule" 
            OR $_SESSION['schule'] == "hauptschule"  
        )
    )
  • Weil es mir gerade noch auffällt: Ich vermute du beugst mit den "@SESSION..." dem vor, das die SESSION garnicht definiert ist, das solltest du vorher abfangen, zum Beispiel mit einem if um den ganze Block oder so...


    Ups, hat cotton im letzten teil seiner Antwort ja auch schon gezeigt...

  • Danke euch sehr!


    Da lag die Kimme im Korn! Es läuft wieder :)


    Und danke für die Anmerkung wegen der Überprüfung der Session, werde ich einbauen.


    Schönen Abend noch!

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!