ich kritzel schonmal meine überlegungen zu den 2 select-boxen nieder ^^
grunsätzlicher aufbau schwebt mir folgendermaßen vor:
HTML:
<td><select name="taetigkeit" onselect="javascript:changeSelect();"...>...</select></td>
<td>
<div id="produkt0">Tätigkeit wählen</div>
<div id="produkt1" style="display:none"><select name="produkt1"...>...</select></div>
<div id="produkt2" style="display:none"><select name="produkt2"...>...</select></div>
...
<div id="produktn" style="display:none"><select name="produktn"...>...</select></div>
</td>
joa, sinn des ganzen und erklärung:
du baust EIN select für die tätigkeit, al optionen kommen da alle in der db enthaltenen tätigkeiten - wie gehabt. jede tätigkeit hat eine id (also in der db, aus der tabelle taetigkeiten) - genau diese wird als value übergeben. beim absenden des formulars kann man dann ganz easy die id auswerten (zudem soll die ja eh gespeichert werden ^^). so, desweiteren wird die id nun hier noch genutzt: bei den produkt selects. bis auf den default teil mit dem produkt0 (das wird "hardcoded" ausgegeben - beachte: KEIN display:none - also sichtbar) werden hier dann die produkte für jede tätigkeit gebaut. daher auch produkt.tätigkeit-ID als name. die db-id beginnt immer bei 1, daher kann man gemütlich die 0 als default nehmen. wenn man mal irgendwann die tätigkeit mit der id1 löscht, dann wird für die auch kein select mehr gebaut und es sähe von der reihenfolge eben so aus: produkt0 produkt2... ich will damit nur verdeutlichen, dass das KEINE zählvariable sein soll, sondern eben der index der tätigkeit, für die diese produkt-select-box gebaut ist.
gut, wir haben nun also in tabellen-zelle 1 unsere eine selectbox mit den tätigkeiten und in der 2. haben wir für jede tätigkeit ein div das jeweils eine selectbox für die produkte (für die jeweilige tätigkeit gefiltert) enthält. und von all diesen ist nur eine sichtbar - by default produkt0.
die tätigkeiten selectbox hat dann diesen aufruf für onselect - also wenn ich was aus tätigkeiten auswähle, wird unsere changeselect funke aufgerufen. und die soll folgendes tun: sie ließt (sofern das geht - ich hoffs ^^) die tätigkeiten selectbox aus - jede einzelne vorhandene option. sie ließt sie dessen value aus und sofern diese option die selektierte ist, wird das div mit der id produkt+value (wir erinnern uns, der value ist die tätigkeiten-id, und aus produkt und dieser id wurden die namen (später fürs auswerten des gesendeten formulars) und id's (für die auswertung per js) gebildet) derart manipuliert, dass nun display:block gilt. somit wird dieses div angezeigt. ist es NICHT die selektierte option, wird display auf none gesetzt (und damit das div wieder versteckt). damit wäre dann der wechsel auch geschafft.
was wir dafür noch brauchen, ist eine "verknüpfungs tabell" in der db. weis nich, ob du die schon hast. das wäre die tabelle (nennen wir sie mal taetigkeiten_produkte), in der eigentlich nur 3 spalten stehn: id, taetigkeiten-id und produkt-id. für jede tätigkeit werden für alle betreffenden produkte zeilen angelegt. hmm, blöd zu beschreiben - bsp ^^
wir haben die tätigkeiten 1 und 2 und die produkte 1 2 und 3. für tätigkeit 1 kann man produkte 1 und 2 wählen, für tätigkeit 2 allerdings dann die produkte 2 und 3. in tabellenform sähe es dann so aus:
1|1|1 // id1: zu tätigkeit1 gehört produkt1
2|1|2 // id2: zu tätigkeit1 gehört produkt2
3|2|2 // id3: zu tätigkeit2 gehört produkt2
4|2|3 // id4: zu tätigkeit2 gehört produkt3
jetzt müsste man quasi immer select * from taetigkeiten_produkte where taetigkeiten_id = "aktuelle tätigkeiten id". bzw eben erweitert, dass man auch den produktnamen hat: "SELECT * FROM taetigkeiten_produkte AS tp, produkte AS p WHERE tp.taetigkeiten_id = $taet_id AND p.ID = tp.produkt_id;" so glaub ich. dann kann man di zeile in etwa so bauen:
PHP:
echo '<div id="produkt'.$row['taetigkeiten_id'].'"><select name="produkt'.$row['taetigkeiten_id'].'">...</select></div>';
// bzw eben
echo '<option value="produkt'.$row['taetigkeiten_id'].'">'.$row['bezeichnung'] /* oder wie die spalte mit dem produktnamen in der produkte-tabelle heisst ^^ */ .'</option>';
aber ich würds warscheinlich eher so machen (man sollte immer versuchen, db-anfragen zu minimieren):
PHP:
// tätigkeiten-select bauen
$sql_t = "select * from taet...";
<select name="taetigkeiten" onselect...>
<option value="0">---------</option> // default-ausgabe
while(row...) {
<option value="row_t[id]">row_t[name]</option>
// also hier eben die options bauen, ABER zusätzlich hier schon die produkt-selecs bauen und in ner variable speichern
$sql_p = select * from teat_prod...;
$selectbox[$row_t[id]] = <div name="produkt0" style="display:none"><select name="produkte.$row_t[id]"...>
while(row_p...)
$selectbox[$row_t[id]] += <option value="row_p[id]">row_p[name]</option>
$selectbox[$row_t[id]] += </select></div>
}
</select>
// produkt-selects bauen
<div name="produkt0">Tätigkeit wählen</div> // default-ausgabe
foreach($selectbox as $sb)
echo $sb;
// und hier eben diese erstellten variablen wieder ausgeben und in die tabellen-zelle einfügen
ich hoffe mal, es kommt raus, was ich meine. problem bis hierhin: für eine eingabezeile funzt das sicher, für mehrere mit integration ins js... müssmer mal schauen. abe das wäre so die basis als ausgangspunkt
