Martin: Verwalten von Checkboxen in einem Formular

Guten Morgen

Ich hoffe dass mir jemand bei folgendem Problem helfen kann (nachdem ich schon Tage nach einer Lösung gefandet habe und schon nahe am Verzweifeln bin):

Also ich bin gerade dabei ein Formular zu erstellen bei dem man u.a. auch einige checkboxen (Interessensgebiete) ankreuzen kann. (Das aus ganz Userfreundlichen Gründen weil Benutzer dieses Formulars die Gebiete eher ankreuzen als all diese Gebiete eintippen)

Das schwierige ist das dieses Formular auch nachträglich bearbeitet werden kann (sprich neue Gebiete hinzufügen oder bestehende wieder entfernen) Beim wiederaufrufen des Formulars sollten dann natürlich die Gebiete wieder angekreuzt sein die gespeichert sind.

Mein bisheriger Ansatz (als Ergebnis meiner bisherigen Recherchen):

3 Tables: 1 für den Benutzer (ID, Name, etc), 1 für die Gebiete (ID, Bezeichnung), 1 Zwischentable (benutzerid, gebietid)

Ich stell mir vor das beim Speichern dieses Formulars eine Zeile in der Zwischentable angelegt wird mit einer Referenzid des Benutzers und einer des Gebiets. Bei der Ausgabe les ich dann die Zeilen zu einem bestimmten Benutzer mit den gespeicherten Gebieten aus.

Ich hoffe ich hab die momentane Situation verständlich erklärt!? Die Frage ist jetzt ist dieser Ansatz noch richtig und wie schaut die Umsetzung dazu aus??

Ich erwarte mir keinen fertigen Code (nicht das ich falsch verstanden werde) aber zumindest hilfreiche Anleitungen oder Quellen damit ich die Aufgabe bewältigen kann.

Mfg Martin

  1. Hello,

    3 Tables: 1 für den Benutzer (ID, Name, etc), 1 für die Gebiete (ID, Bezeichnung), 1 Zwischentable (benutzerid, gebietid)

    Und die Gebiete kannst Du doch ausgeben:

    Mit einem Select das Array der Gebiete sammeln

    $_gebiet[idx]['ID']
                   ['BEZEICHNUNG']

    aus der Zwischentabelle

    while ($_rec = mysql_fetch_assoc($res))
    {
      $_usergebiet[$_rec['ID']] = true;
    }

    idx wird von (while $_gebiet[]=mysql_fetch_assoc($res)) durchgezählt.

    Dann kannst Du doch die möglichen Gebiete im Formular ausgeben:

    if (is_array($_gebiet))
      foreach($_gebiet as $key => $_val)
      {
        $checked = '';
        if (isset($usergebiet[$_val['ID']]
        {
          $checked = ' checked="checked"';
        }
        $ckeck .= "<p class="check"><input type="checkbox"\n".
                  "                          name="check[gebiete][{$_val['ID']}]"\n".
                  "                          value="{$_val['ID']}$checked"\n".
                  ">{$_val['BEZEICHNUNG']}</p>\n";
      }

    und an der entsprechnden Stelle kannst Du nachher $check ausgeben

    Im Post-Script kommt das dann so an:

    $_POST['check']]'gebiete'][<ID>] == <ID>        wobei <ID> für den Wert der ID steht

    Abfragen kannst Du das dann so:

    if (is_array($_POST['check']]['gebiete']))
      foreach ($_POST['check']]'gebiete'] as $key => $val)
      {
        if($key = $val)
        {
          $values .= ' .....   # Aufbau der Values für das Insert in die Zwischentabelle
        }
      }

    Je nachdem, wie kritisch das System ist, muss man natürlich noch einen Respinse/Request-Vergleich durchführen. Das bedeutet, dass alle Daten, die an das Formular augegeben werden, in die Session geschrieben werden und vom User nur Daten ausgewählt werden können, die in der Session stehen, also ihm zur Auswahl angeboten worden sind.

    Harzliche Grüße aus http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau
    1. Hallo Tom

      Vielen Dank für deine Antwort.

      Momentan ist das ein wenig viel auf einmal, aber ich werd deine Antwort Stück für Stück umsetzen (probieren)

      Mfg Martin