kleinemax: Problem mit der switch Verzweigung

Also ich wollte(sollte) für unsere Schule eine Art...wie soll ich es nennen?
Naja Schulkompass machen der einem nach Eingabe zeigt wo sich ein Raum befindet. Das ganze in php integriert in html.
Dazu habe ich zwei Eingabefelder eins für das Haus A oder B und noch eins für den Raum. Dann soll über switch herausgefunden werden welcher Raum eingegeben wurde.
Dem entsprechend wird dann eine Flash-ani gestartet in der gezeigt wird wo der Raum ist (Flash ist noch nicht fertig ;) ).

Mein Prob ist nun das
1. Entweder mein Xampp nicht richtig bei mir funktioniert denn egal welche Eingabe ich mache ergibt bei mir nix aus aber in der schule funktioniert es mit Xampp 0_o.
Hab die kompass.php im Ordner htdocs drin.
2. Naja und in der Schule funktioniert die Verzweigung nicht so richtig denn er gibt egal welchen raum ich eingeben immer "eg haus b ganz vorne" aus?

Könnt ihr mir helfen, sprich meinen Quelletext bitte kontrollieren, denn wie so oft hat der Lehrer sowie so keine Ahnung von PHP hat aber gesagt 'Mach mal!'.....

Quelltext(nur der wichtige teil):
---------------------------------------------------------------------
<form action=
"<?php echo $PHP_SELF; ?>" method="post">
Gebäude (A/B) - Raumnummer<br>
<input type="text" name="gebaeude" size="3">-<input type="text" name="raum" size="4"><br>
<input type="submit" value="Suchen">&nbsp;&nbsp;&nbsp;&nbsp;
<input type="reset" value="Felder löschen">
</form>

<?php

if ($gebaeude == A){
  echo "Haus A gewählt";
   }
 elseif ($gebaeude == B){
  echo "Haus B gewählt";
         switch ($raum)
         {
         case 1 && 2: echo "eg haus b ganz vorne";
          break;
         case 11 && 12: echo " 1og haus b ganz vorne";
          break;
         case 21 && 22: echo "2og haus b ganz vorne";
          break;
         case 31 && 32: echo "3og haus b ganz vorne";
           break;
          case 3 && 6: echo " eg haus b Haupteingang";
          break;
         case 13 && 16: echo "1og haus b Haupteingang";
          break;
         case 23 && 26: echo "2og haus b Haupteingang";
           break;
         case 33 && 36: echo "3og haus b haupteingang";
          break;
         case 113 && 115 && 116: echo "1og haus b haupteingang";
          break;
         }
   }
?>

</body>
</html>
---------------------------------------------------------------------
THX im Voraus ;)

  1. Hello out there!

    switch ($raum)
             {
             case 1 && 2: echo "eg haus b ganz vorne";
              break;
             case 11 && 12: echo " 1og haus b ganz vorne";
              break;

    Es können nicht Fall 1 UND Fall 2 gleichzeitig eintreten. Was du meinst, ist eine ODER-Verknüpfung.

    switch ($raum) {  
      case 1:     // fall thru  
      case 2:  echo "eg haus b ganz vorne"; break;  
      case 11:    // fall thru  
      case 12: echo " 1og haus b ganz vorne"; break;  
    }
    

    See ya up the road,
    Gunnar

    --
    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
    1. Naja ich wollt den Quelltext kurz halten und die Räume die da mit 'und' verknüpft sind liegen genau nebeneinander.
      Siehe: http://hhg-erfurt.de/hhg/kompass/images/grundrisse/eg.jpg
      So würde es halt kürzer sein und weniger Arbeit machen.

      Aber wenn du mir damit sagen willst das switch mit zwei möglichen Bedingungen in jedem Fall nicht klar kommt, werde ich das natürlich ändern. ;)

      Danken tue ich dir auf jeden Fall
      Daumen hoch
      MFG der kleineMax

      1. Hello out there!

        Naja ich wollt den Quelltext kurz halten und die Räume die da mit 'und' verknüpft sind liegen genau nebeneinander.

        Niemand kann gleichzeitig in Raum 1 UND in Raum 2 sein, nur in Raum 1 ODER Raum 2.

        (Hm, ich war auch schon in vier US-Bundesstaaten gleichzeitig. OK, die Türschwelle ...)

        See ya up the road,
        Gunnar

        --
        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
        1. Moin Gunnar,

          Hm, ich war auch schon in vier US-Bundesstaaten gleichzeitig.

          dieses Erlebnis ging damals an mir vorbei, weil die Zeit bis zum Ende der Reise allmählich knapp wurde. Aber eigentlich hatte ich das Four Corners Monument auch als Etappenziel vorgesehen...

          Schönen Tag noch,
           Martin

          --
          Wer im Glashaus sitzt, sollte Spaß am Fensterputzen haben.
          1. Hello out there!

            dieses Erlebnis ging damals an mir vorbei, weil die Zeit bis zum Ende der Reise allmählich knapp wurde. Aber eigentlich hatte ich das Four Corners Monument auch als Etappenziel vorgesehen...

            Naja, gibt ja in der Gegend auch wirklich lohnendere Ziele: Marlboro County – äh Monument Valley, Valley of the Gods, Mesa Verde N.P., paar Meilen nördlich Canyonlands N.P. und Arches N.P., paar Meilen westlich Bryce Canyon N.P. Tip: Route 12 vom Bryce Canyon N.P. zum Capitol Reef N.P.

            Um den Kreis zu den Verzweigungen zu schließen: Eigentlich müsste man dort an jeder Weggabelung in beide Richtungen fahren, weil’s dort überall beeindruckend schön ist.

            See ya up the road,
            Gunnar

            --
            “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
            1. Hi Gunnar,

              Naja, gibt ja in der Gegend auch wirklich lohnendere Ziele: Marlboro County – äh Monument Valley, Valley of the Gods, Mesa Verde N.P., paar Meilen nördlich Canyonlands N.P. und Arches N.P., paar Meilen westlich Bryce Canyon N.P. Tip: Route 12 vom Bryce Canyon N.P. zum Capitol Reef N.P.

              dem kann ich mich vorbehaltlos anschließen, selbst wenn ich von den Highlights, die du aufzählst, auch noch nicht alle gesehen habe. Ein Argument, die Gegend nochmal irgendwann zu bereisen.
              Eigentlich hat mir sogar der größte Teil des kargen Utah sehr gut gefallen; am schönsten fand ich allerdings den Zion NP und das verträumte kleine Wüstenstädtchen Page am Lake Powell (wobei Page selbst schon zu Arizona gehört).
              Durch das Monument Valley konnten wir damals bei meiner ersten USA-Reise (1992) noch einfach so nach Lust und Laune durchfahren; sechs Jahre später haben sie da schon Gebühren kassiert.

              Um den Kreis zu den Verzweigungen zu schließen: Eigentlich müsste man dort an jeder Weggabelung in beide Richtungen fahren, weil’s dort überall beeindruckend schön ist.

              Das hätte ich nicht besser formulieren können.

              So long & thanks for all the fish,
               Martin

              --
              Fettflecke werden wieder wie neu, wenn man sie regelmäßig mit etwas Butter einschmiert.
            2. Hallo!

              Um den Kreis zu den Verzweigungen zu schließen: Eigentlich müsste man dort an jeder Weggabelung in beide Richtungen fahren, weil’s dort überall beeindruckend schön ist.

              War noch nicht dort. Aber das klingt nach einem Anwendungsfall für Backtracking! :-)

              mfg
                frafu

        2. echo $begrüßung;

          Naja ich wollt den Quelltext kurz halten und die Räume die da mit 'und' verknüpft sind liegen genau nebeneinander.

          Niemand kann gleichzeitig in Raum 1 UND in Raum 2 sein, nur in Raum 1 ODER Raum 2.

          Das Problem ist hier nicht die UND/ODER-Logik. Hier findet seitens PHP folgendes statt:

          switch (testausdruck) {
              case ausdruck1:
              case ausdruck2:
              ...
            }

          Im konkreten Fall ist ausdruck1 1 && 2. Das wird von PHP erst einmal ausgerechnet. Ein Ausdruck a && b ergibt entweder true oder false. 1 wird ebenso wie 2 durch Typumwandlung zu true. true && true ergibt true. Das gleiche passiert mit allen anderen Zahlenwerten ungleich 0.

          Das switch-Statement sieht also so aus:

          switch (testausdruck) {
              case true:
              case true:
              ...
            }

          Wenn als testausdruck etwas übergeben wird, dass bei einem Vergleich mit true ein true ergibt, ist die Bedingung des ersten case-Falles erfüllt.

          echo "$verabschiedung $name";

          1. Hello out there!

            Das Problem ist hier nicht die UND/ODER-Logik. Hier findet seitens PHP folgendes statt: […]

            Dass der PHP-Code was völlig anderes tat als der kleinemax wollte, war mir auch klar.

            Aber der kleinemax wollte schon das Falsche, nämlich eine UND-Verknüfung, wo ODER angesagt ist.

            See ya up the road,
            Gunnar

            --
            “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
  2. Hi,

    ist dir register_globals ein Begriff? Du arbeitest offenbar mit der alten Einstellung "on", das solltest du dir abgewöhnen.

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hi,

      ist dir register_globals ein Begriff? Du arbeitest offenbar mit der alten Einstellung "on", das solltest du dir abgewöhnen.

      MfG
      Rouven

      »»

      Hm OK ich werdma kucken. Das basiert auf einem alten Beispiel für Felder und ich denke das dort einiges nicht mehr up2date ist.

      Danke

  3. Ich bins gleich nochma.

    OK dann hab ich das richtig verstanden. Es geht einfach nicht!:
    »»Aber wenn du mir damit sagen willst das switch mit zwei möglichen »»Bedingungen in jedem Fall nicht klar kommt, werde ich das natürlich »»ändern. ;)

    Doch nun hab ich noch ein prob...

    Ich wollt das blos eben in Xampp testen aber irgend wie funzt das ganze net, also Xampp schon localhost lauft und auch auch bei Status sind alle wichtigen Sachen an.

    Doch wenn ich miene datei testen will kommt das:
    http://img219.imageshack.us/img219/74/unbenannt2gk.jpg
    NIX genau! (Fragezeichen sind von mir)
    Dabei müsste da stehen: "Haus B gewählt eg haus b ganz vorne" (Testeingabe war: B und 1)
    Kann mir jemand erklären wieso das nicht geht? Könnte es daran liegen das in meiner Xampp Version PHP 5.1.1 läuft, sicher nicht oder?

    Hier nochmal der Quelltext:
    ---------------------------------------------------------------------
    <html>
    <head>
    <title>kompass</title>
    <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="../css/neu.css">
    </head>
    <body>
    <h2>Der Schulkompas</h2>
    <p>
    <font color="#0925F0" aligne="Center">
    Finden sie den richtigen Weg zu jedem Raum.
    <br><br>
    +++Wir machen den Weg frei+++
    </font>
    </p>

    <p>

    <form action=
    "<?php echo $PHP_SELF; ?>" method="post">
    Gebäude (A/B) - Raumnummer<br>
    <input type="text" name="gebaeude" size="3">-<input type="text" name="raum" size="4"><br>
    <input type="submit" value="Suchen">&nbsp;&nbsp;&nbsp;&nbsp;
    <input type="reset" value="Felder löschen">
    </form>

    <?php

    if ($gebaeude == A){
      echo "Haus A gewählt";
       }
     elseif ($gebaeude == B){
      echo "Haus B gewählt";
             switch ($raum)
             {
             case 1:
             case 2: echo "eg haus b ganz vorne";
              break;
             case 11:
             case 12: echo " 1og haus b ganz vorne";
              break;
             case 21:
             case 22: echo "2og haus b ganz vorne";
              break;
             case 31:
             case 32: echo "3og haus b ganz vorne";
               break;
             case 3:
             case 6: echo " eg haus b haupteingang";
              break;
             case 13:
             case 16: echo "1og haus b haupteingang";
              break;
             case 23:
             case 26: echo "2og haus b haupteingang";
               break;
             case 33:
             case 36: echo "3og haus b haupteingang";
              break;
             case 113:
             case 115:
             case 116: echo "1og haus b haupteingang";
              break;
             }
       }
    ?>

    </body>
    </html>
    ---------------------------------------------------------------------

  4. if ($gebaeude == A){
      echo "Haus A gewählt";
       }

    1. Du solltest auf GET, POST und COOKIE-Daten lieber über die so genannten "Superglobals" zugreifen, das funktioniert auch, wenn in der PHP-Konfiguration  "register globals" auf "off" steht, im Gegensatz zur Verwendung des Formularfeldnamens.
    Statt $gebaeude also lieber $_POST['gebaeude'].

    2. Du vergleichst $gebaeude an dieser Stelle mit der Konstante A. Du möchtest aber mit dem String "A" vergleichen.
    Korrekt sähe das ganze so aus:

      
    if ($_POST['gebaeude'] == "A") {  
        echo "Haus A gewählt.";  
    } elseif ($_POST['gebaeude'] == "B") {  
        echo "Haus A gewählt.";  
        switch ($_POST['raum']) {  
            case 1:  
            case 2:  
                echo "eg haus b ganz vorne";  
                break;  
            case 11:  
            case 12:  
                echo "1og haus b ganz vorne";  
                break;  
                // etcetera  
            default:  
                // hier kannst Du angeben, was passiert,  
                // wenn bisher kein break aufgetreten ist.  
                echo "kein gültiger Raum gewählt.";  
        }  
    } else {  
         echo "kein gültiges Haus gewählt.";  
    }  
    
    

    Ich hoffe, das hilft Dir erst mal weiter.
    Ansonsten empfehle ich Dir als immerwährend sprudelnder Quell von PHP-Weisheit das PHP-Manual.

    1. Danke Danke Danke jetzt ist Licht im Dunkeln. Und das große schöne PHP-Manuel kenn ich ;).
      Doch manchmal ist das einfach zuviel Weisheit für so einen "kleinen" Max wie mich.

      Danke an alle und ich werde morgen sehen ob es funktioniert.
      Gute Nacht euch allen.