Matthias Wiesner: flag toggle mit checkbox

Hallo,

kann man bei einer DEselektierten Checkbox die Übergabe ins $_POST -Array erzwingen?
Das wäre sehr nützlich, wenn man eine Checkbox zum togglen eines Flags benutzt. Bsp:

ich habe eine Checkbox, die ein Flag repräsentiert ("Zeige das Bild - Ja/Nein"). Wenn das Flag auf "Ja" gesetzt ist, dann wird die Checkbox mit "checked" vorselektiert. Wenn dann aber die Checkbox deselektiert wird, bzw. das Flag auf "Nein" gesetzt wird, dann wird der Wert (Variable + Wert) nicht ins $_POST - Array übertragen. Ergo wird der Wert, sollte er einmal auf "Ja" gesetzt sein nicht mehr überschrieben.

Viele Grüsse Matthias

P.S.
ich habs dann 'ner statischen Auswertung kurz vorm Update gelöst:
if(!isset($_POST['flag'])) $flag = 0;
O.K. das klappt, aber ich wollte die Sache nicht so hartkodieren...

  1. hi,
    gibst du den checkboxen einen value mit ?

    mfg
    comunicout

    --
    fütter mein ego !
    welcome to electro-smog therapy
    1. gibst du den checkboxen einen value mit ?

      ja, und ich habs nun so gemacht (aus lauter Verzweiflung):
      alle Flag-Variablen (ich weiss nicht, wieviele es noch werden) in der Datenbank bekommen nun den Prefix "flag_"
      Nun überprüfe ich alle Felder der DB und bei denen, wo das "flag_" auftaucht wird dert Wert ermittelt und wenn "1" für JA dann wird der HTML-Code:
      <input name="[Feldname]" type="checkbox" value="1" checked>
      generiert. Bei denen die vom Wert "0" sind - dasgleiche ohne "checked".
      Nach dem Submit überprüfe ich wieder alle Felder der DB-Tabelle. Und im Vergleich mit den geposteten Variablen kann ich die nicht übertragenen Flag-Vars ermitteln. Das sind also die, deren Wert "0" sein sollen. Also baue ich ein temporäres Daten-Array mit allen Post-Vars und füge die nicht geposteten Flag-Vars mit dem Wert "0" hinzu. Das ganze neue Daten-Array schiebe ich in die DB und alles ist fein...

      Viele Grüsse Matthias

      1. Hallo nochmal,

        schau Dir mal das Ergebnis des Query

        show columns from <tablename>;

        an. Damit kann man auch wunderbar leere Datensätze bauen für ein "append" also insert.

        Grüße

        Chris (C)

        1. schau Dir mal das Ergebnis des Query

          show columns from <tablename>;

          jo, hab ich. Zeigt mir die Felder+Eigenschaften an.

          Damit kann man auch wunderbar leere Datensätze bauen für ein "append" also insert.

          Verzeih meine Unwissenheit, aber was kann ich nun damit anfangen? Das Anfügen ist ja nicht das eigentliche Problem. An meiner Lösung stört mich vielmehr die Umbenamung der Flag-Datenbankfelder (Prefix-Vergabe) und dann der Abgleich mit den Postvars. Das ist so als würde man über Peking nach Paris...

          Viele Grüsse Matthias

  2. Hallo Selferaußen,

    nimm doch ein radio mit zwei Alternativen: JA und NEIN

    Dann ist sichergestellt, dass keine Fehler passieren.

    Gruß

    Chris (C)

    1. nimm doch ein radio mit zwei Alternativen: JA und NEIN

      klar, das funktioniert in jedem Fall. Sieht aber nicht schicke aus. und das MUSS doch wohl auch anders gehen...

      Matthias

      1. Ho Matthias,

        klar, das funktioniert in jedem Fall. Sieht aber nicht schicke aus. und das MUSS doch wohl auch anders gehen...

        Nee, das geht erst mit dem nächsten IE, Da kann man dann bunte Haken setzen *ggg*

        Oder Du musst JavaScript einsetzen. Für jede Checkbox baust Du eine Hidde-Variable in Dein Form ein und wenn der Haken verändert wird, schreibst Du eben JA oder NEIN in die passende Hidden-Text-Variable

        LG

        Chris (C)

        1. Hi,

          Nee, das geht erst mit dem nächsten IE, Da kann man dann bunte Haken setzen *ggg*

          Alter Schwede, da kommen ja Zeite auf uns zu onClick="this.style.haekchen.color = melonred" :))

          bye Matthias

  3. Huhu Matthias

    folgender Trick hilft Dir vielleicht weiter:

    <input type="hidden" name="FLAG" value="off">
    <input type="checkbox" name="FLAG" value="on">

    so short und viele Grüße

    lulu

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. <input type="hidden" name="FLAG" value="off">
      <input type="checkbox" name="FLAG" value="on">

      also wie ist das, ich klicke nun auf die Checkbox und dann auf Submit, die ganze Sache geht zum Skript und diese stellt sich die Frage "Welchen Wert nehme ich nun für die Variable 'FLAG'". Ich nehme mal an (zugegeben, ohne dass ich es ausprobiert habe), dass das Skript an diesem Punkt Schwierigkeiten bekommt. Werden beide gleich behandelt, oder überschreibt immer der zweite Wert den ersten? Dann würde es natürlich gehen... hmm, mal ausprobieren.

      Matthias

      1. Huhu Matthias

        ... hmm, mal ausprobieren.

        gute Idee ;-)

        Viele Grüße

        lulu

        --
        bythewaythewebsuxgoofflineandenjoytheday
      2. Huhu Matthias

        wobei noch anzumerken ist, dass der genannte Trick nur mit PHP funktioniert. Perl interpretiert die übergebenen Werte als Array.
        Vermutlich ist das auch "richtiger" [1] so.
        D.h. evtl. funktioniert das mit dem zusätzlichen hidden-field irgendwann nicht mehr, falls das in einer zukünftigen Version von PHP berichtigt wird.
        Also mit Bedacht einsetzen.

        Ansonsten könnte man das ja auch bequem ungefähr so lösen:

        <?php

        $checkboxes = array('HakelMichAnOderLassEsBleiben1', 'HakelMichAnOderLassEsBleiben2');
        $default_value = 'off';
        $checked_value = 'on';

        foreach ($checkboxes as $onebox) {
          $_POST[$onebox] = isset($_POST[$onebox])
                                ? $checked_value
                                : $default_value;
        }

        ?>

        Viele Grüße

        lulu

        [1] werde jetzt mal googeln, dass muss ja irgendwo stehen

        --
        bythewaythewebsuxgoofflineandenjoytheday
        1. huhu lulu (reimt sich ja fast ;)

          $checkboxes = array('HakelMichAnOderLassEsBleiben1', 'HakelMichAnOderLassEsBleiben2');
          $default_value = 'off';
          $checked_value = 'on';

          foreach ($checkboxes as $onebox) {
            $_POST[$onebox] = isset($_POST[$onebox])
                                  ? $checked_value
                                  : $default_value;
          }

          SAUBER: passt, wackelt und hat Luft - wie man so schön sagt. Und ich racker mir was ab mit DB-Felder und Post-Vars-Array Abgleich (siehe mein Eintrag um 16:16 Uhr) Das ganze kann ich dazu noch um beliebig viele Checkboxen erweitern...

          Danke :)
          Matthias