Verwalten von Checkboxen in einem Formular
Martin
- php
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
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
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