Lily: switch case Problem

Hi, ich habe einen Code geschrieben, der überprüfen soll, ob eine checkbox leer ist. Wenn die checkbox leer ist, dann soll sie den Inhalt no bekommen. Wenn es nicht leer ist, dann soll die checkbox den Wert behalten (yes), den sie per value= mitbekommt.

Wenn jetzt z.B. $_POST['mo'] nicht leer ist, die value also yes, dann wird es richtig in die Datenbank eingetragen. Wenn $_POST['mo'] und $_POST['di'] die value yes mit übermittelt bekommen haben, das wird auch für jedes Feld richtig yes eingetragen.

Wenn aber $_POST['mo'] leer ist, also den Wert no bekommt, dann hat auch $_POST['di'] den Wert no, obwohl ich es beim testen eigentlich ausgewählt habe, es also yes sein müsste.

  
switch (true) {  
case empty($_POST['mo']):  
    $_POST['mo'] = "no";  
case empty($_POST['di']):  
    $_POST['di'] = "no";  
case empty($_POST['mi']):  
    $_POST['mi'] = "no";  
case empty($_POST['do']):  
    $_POST['do'] = "no";  
case empty($_POST['fr']):  
    $_POST['fr'] = "no";  
case empty($_POST['sa']):  
    $_POST['sa'] = "no";  
case empty($_POST['so']):  
    $_POST['so'] = "no";  
case empty($_POST['wo1']):  
    $_POST['wo1'] = "no";  
case empty($_POST['wo2']):  
    $_POST['wo2'] = "no";  
case empty($_POST['wo3']):  
    $_POST['wo3'] = "no";  
case empty($_POST['wo4']):  
    $_POST['wo4'] = "no";  
}  

Das ist mir unerklärlich.

Hoffe, dass mir jemand weiterhelfen kann.

Grüße!

  1. Hallo Lily,

    dir fehlt die break Anweisung am Ende von jedem case

    switch (true) {
    case empty($_POST['mo']):
        $_POST['mo'] = "no";

    break;

    Gruß,

    Dieter

    1. Hoi.

      dir fehlt die break Anweisung am Ende von jedem case

      switch (true) {
      case empty($_POST['mo']):
          $_POST['mo'] = "no";
            break;

      Kann man so ein 'umgekehrtes switch' wirklich benutzen?

      1. Kann man so ein 'umgekehrtes switch' wirklich benutzen?

        Es sieht komisch/ungewöhnlich aus, da ja "normalerweise" anstelle dem "true" ein dynamischer Wert steht, aber diese Konstruktion ist zulässig.
        Ich hatte diesen Aufbau selbst auch schonmal verwendet.

        Allerdings würde ich für diese Aufgabe eher ein Array mit den Werten und eine Schleife verwenden, um die POST-Variablen zu setzen - sieht so recht "unDRY" aus..

        1. Und es wird dann auch jedes Case ausgefuehrt in dem die Bedingung True ist? Eigentlich genial. *Erleuchtung*

          *Lily nen zusammengerollte Zeitung reich und die Augen zumach*

          1. echo $begrüßung;

            Und es wird dann auch jedes Case ausgefuehrt in dem die Bedingung True ist?

            Nein. Es werden bei einem switch immer die Statments des ersten case ausgeführt, das auf die switch-Bedingung passt und dann alle nachfolgenden unabhängig von den anderen case-Ausdrücken, wenn nicht irgendwo ein break im Weg steht.

            echo "$verabschiedung $name";

            1. hoi,

              Nein. Es werden bei einem switch immer die Statments des ersten case ausgeführt, das auf die switch-Bedingung passt und dann alle nachfolgenden unabhängig von den anderen case-Ausdrücken, wenn nicht irgendwo ein break im Weg steht.

              puh... Ich fing schon an merkwuerdige switch Konstrukte zu sehen... Das rettet mir dann doch mein Weltbild.

        2. Kann man so ein 'umgekehrtes switch' wirklich benutzen?

          Es sieht komisch/ungewöhnlich aus, da ja "normalerweise" anstelle dem "true" ein dynamischer Wert steht, aber diese Konstruktion ist zulässig.
          Ich hatte diesen Aufbau selbst auch schonmal verwendet.

          Allerdings würde ich für diese Aufgabe eher ein Array mit den Werten und eine Schleife verwenden, um die POST-Variablen zu setzen - sieht so recht "unDRY" aus..

          Erst einmal aber vielen Dank für die vielen Antworten!

          Wie wolf es Vorgeschlagen hat habe ich es jetzt so gemacht:

            
          $post = array("mo", "di", "mi", "do", "fr", "sa", "so", "wo1", "wo2", "wo3", "wo4");  
            
          foreach ($post as $value) {  
          if  (!isset($_POST[$value])) {  
          $_POST[$value] = "no";  
          }  
          }
          

          Sieht wirklich sehr viel übersichtlicher aus. Danke für den Vorschlag!

          1. P.S. Sorry meinte natürlich worf ;)

      2. Hallo,

        switch (true) {
        case empty($_POST['mo']):

        Kann man so ein 'umgekehrtes switch' wirklich benutzen?

        in PHP schon, und AFAIK in Javascript auch. In C wäre das allerdings ein Syntaxfehler, da sind als case-Ausdrücke nur Konstanten zulässig.

        So long,
         Martin

        --
        Ich liebe Politiker auf Wahlplakaten.
        Sie sind tragbar, geräuschlos, und leicht wieder zu entfernen.
          (Loriot, deutscher Satiriker)
  2. Hi!

    *Lily uebers Knie leg* Du sollst Dir doch die Dokumentation anschauen bevor Du was programmierst!

    Ein switch duerfte fuer deine Belange kaum von nutzen sein.

    (war natuerlich nur ein ganz liebes verklopfen... *pfeif*)

    Sollte ich mich irren und man kann so ein 'umgedrehtes switch' wirklich benutzen darfst Du mir gern auch eine verpassen.