[JS] [MySQL] kolejne listy rozwijane po kliknieciu 'wiecej'

0

Na poczatek: z JS wiem tyle ze wiekszosc skryptow sie w headzie umieszcza, wiec w miare lopatologicznie proszę.

Mam baze danych w mysql z relacja wiele do wielu, tabele osoby, kategoria i laczaca... anyway:

Do kazdej osoby moze byc przypisane wiele kategorii, chce stworzyc formularz ktory wyswietli rozwija liste z kategoriami, a jak user kliknie 'dodaj jeszcze jedna kategorie' to pojawi sie jeszcze raz ta sama lista i user bedzie mogl wybrac jeszcze jedna kategorię.

Kod w PHP generujący listę wyglada tak:

Kod:
echo '<select name="kategoria" STYLE="width: 300px">';

$kat = "SELECT * FROM kategoria ORDER BY nazwa ASC";
$result_kat = mysql_query($kat);
while ($row_kat = mysql_fetch_array($result_kat)) {
  echo '<option>'.$row_kat['nazwa'].'</option>';
}
echo '</select>';

a i jak moge odwolywac sie do tych zmiennych, tzn. jak oznaczone beda kategoria1, kategoria 2, itp. oraz w jaki sposob moge wiedziec ile tych kategorii user ostatecznie wybral?

Z gory dzx. za ew. odp.

ps. tu kod w JS podobny do problemu jeżeli ma to komuś ulatwić sprawę ;)

0

Przepraszam jeśli nie zrozumiałem Twojego pytania, ale po przeczytaniu pierwsze co przychodzi mi na myśl to czy nie łatwiej jest zrobić multiselecta zamiast bawić się z dynamicznymi selectami?

0

tak myslalam o multiplu ale tak by bylo mniej bajerancko :-D zartuje oczywiscie...
kategori bedzie okolo 200-300, mogloby byc troche nie wygodnie wybierac z multipla, musialby byc on dosc dlugi = zajmowac wieksza czesc ekranu, a tego z roznych powodow chce uniknac, druga sprawa ze osoba wprowadzajaca dane nie moglaby na pierwszy rzut oka okreslic co i ile wybrala, musialaby przejzec liste.

jezeli nie uda mi sie tak jak bym chciala to zrobie w multiplu

0

No więc, aby było bajerancko niczym z bonda... możesz to zrobić na dwa sposoby (bynajmniej w tej późnej chwili mi tyle przychodzi do pacyny)

pierwszy z nich to umiescić selecta w divie z jakimś tam id, następnie w onchange selecta dać kod w stylu:

document.getElementById(ID_DIVA).innerHTML+=document.getElementById(ID_DIVA).innerHTML;

w ten sposób za każdym razem gdy zostanie coś wybrane z selecta pojawi się kolejny (nie koniecznie musi być to w onchange, możesz dać jakiś przycisk). Potem do selectów możesz się odwołać przez getElementsByTagName...i w pętli nadać im jakieś sensowne name żeby przy wysłaniu formularza połapać się kto jest kto ;)

To tak bardzo ogólnie opisane i zaznaczam że sposób jest dość toporny.

Drugi sposobik to juz wyższa szkoła jazdy i raczej proponował bym jego zastosować bo jest "bardziej profesjonalny ;)"

musisz zastosować funkcje createElement i w jakiejś pętelce przekopiować dane z pierwszego selecta w ten sposób utworzysz drugiego i kolejne, przy tworzeniu możesz im nadawać name dzięki czemu potem po wysłaniu formularza będzie się łatwo dobrać do nich

Ogólnie rzecz biorąc w tej chwili Ci pewnie pomieszałem trochę, wiem że napisałem dość nie jasno i ogólnie ale jest trochę późno a sam siedzę teraz nad projektem :/ Jeśli nie wiesz czegoś to pisz postaram się jakoś pomóc

0

text z dnia wczorajszego nieaktualny, usunelam go z tego postu bo:

pokombinowalam jeszcze troche i mi wyszlo [browar] :D

<script type="text/javascript">
<!--
var x=1;

function dodaj_element(kontener){
        var znacznik = document.createElement("select"); //utworz element select
        znacznik.setAttribute('name', "numer_"+x);
        znacznik.setAttribute('id', "pole_select_"+x);
		
		var kontener = document.getElementById(kontener); //dodaj na koniec
        kontener.appendChild(znacznik); 
		
        wypelnij("pole_select_"+x) //wypelnij
		x++; //zwieksz licznik - x
}

function wypelnij(pole) {
		var text = ["wersja1", "inna kategoria", "trzecia kat", "jakas kat"]; //elementy listy będą pobierane z bazy do tablicy
		for (licznik=0;licznik<text.length;licznik++) { //wypelnij liste
			var opt = document.createElement("option");
        	document.getElementById(pole).options.add(opt);
        	opt.text = text[licznik];
		}
}
//-->
</script>

<form method="post" ACTION="nowy.html">

<fieldset>
<legend>Informacje:</legend>
<div id="Formularz">
<label FOR="wersja">Kategoria:</LABEL><select name="numer_0" id="pole_select_0"><option>lista bezposrednio z bazy</OPTION></SELECT>
</DIV>
<INPUT TYPE="button" NAME="pokaz" VALUE="Jeszcze jedena?" onclick="dodaj_element('Formularz')">
</fieldset>

</FORM>

ale teraz pytanie: co jak user naklika sobie kilka razy te 'pokaz' a potem mu sie odwidzi? Jak usunac ostatni utworzony element?

zaraz poprobuje polaczyc to z pehapem</b>

pokombinowalam jeszcze troche bardziej I DZIALA w FF, jeeeeeeeee! :d

1 użytkowników online, w tym zalogowanych: 0, gości: 1