Autor Zpráva
Lkor
Profil *
Dobrý den,

potřebuji formulář s dynamickým vytvářením prvků (prvky se vytvoří kliknutím na tlačítko). Něco podobného jsem našel na netu, ale problém nastal s odesíláním údajů z těchto dynamicky vytvořených inputů, textareí do databáze. Při stisku tlačítka "odeslat" se totiž Javascriptově vytvořené dynamické prvky refreshují a přemazají. Tudíž do databáze se už nic nepošle. Prosím Vás tedy o rady, jestli nevíte co s tím. Předem dík moc.

P.S.: Posílám ukázku dynamicky vytvořených prvků ve formu.
http://www.zaachi.com/cs/items/dynamicke-pridavani-elementu-formulare.html
AM_
Profil
S dynamickým vytvářením prvků formuláře pracuji také a při odesílání se nic nerefreshuje ani nemaže. Chybu tedy máš zřejmě jinde.
Zkus si ve skriptu pro zpracování vypsat
print_r($_POST);
popř. _GET, podle toho, jakou metodou odesíláš.
Lkor
Profil *
A to ty dynamické prvky také tvoříš pomocí JS? Protože já mám problém, že při odeslání se ten JS přemaže a tudíž všechny dynamické prvky se zruší a není co posílat. Hodil bys mi sem pls nějaký stručný příklad jak to řešíš? Dík moc
AM_
Profil
spíš ty pošli, jak to řešíš :) ano, pomocí JS, a nic se nepřemazává. Jestli dobře chápu tvůj popis, tvrdíš, že při odeslání formuláře se neodešlou ty prvky,které jsi přidal pomocí JS. V tom prostě problém není, hledej chybu jinde (špatné zpracování na straně PHP nebo si v JS ty prvky házíš mimo ten formulář nebo tam děláš nějaké kejkle navíc, které to ruší).
Lkor
Profil *
JS část:
<script type="text/javascript">

var num_of_lines = 0;

function plus(element){

num_of_lines ++;

var y = document.getElementById( element );

var option1 = document.createElement('OPTION');
option1.setAttribute('value', 'prvni');

var option2 = document.createElement('OPTION');
option2.setAttribute('value', 'druha');

var option3 = document.createElement('OPTION');
option3.setAttribute('value', 'treti');

var option4 = document.createElement('OPTION');
option4.setAttribute('value', 'ctvrta');

var txt1 = document.createTextNode("Modul A");
option1.appendChild(txt1);

var txt2 = document.createTextNode("Modul B");
option2.appendChild(txt2);

var txt3 = document.createTextNode("Modul C");
option3.appendChild(txt3);

var txt4 = document.createTextNode("Modul D");
option4.appendChild(txt4);

var select = document.createElement('select');
select.setAttribute('name', 'select[]' );
var text = document.createTextNode('Modul: ');

var p = document.createElement('span');
p.setAttribute('id', 'span1_' + num_of_lines );

var br = document.createElement('br');

select.appendChild(option1);
select.appendChild(option2);
select.appendChild(option3);
select.appendChild(option4);

p.appendChild(text);
p.appendChild(select);
p.appendChild(br);

y.appendChild(p);
}

function minus(element){
if( num_of_lines < 1 )
return;

var d = document.getElementById( element );
var olddiv = document.getElementById( 'span1_' + num_of_lines );
num_of_lines--;
d.removeChild(olddiv);

}
</script>

<form action="?vytvoreni=true" method="post" id="form" name="form">
<table id="table1">
<tr><td colspan="2" align="center">PŘÍDAVNÉ MODULY</td></tr>
<tr><td><a href="#" onclick="plus('table1'); return false;">Přidat modul</a></td>
<td> / <a href="#" onclick="minus('table1'); return false;" >Odebrat modul</a></td>
</tr></table>
<input type="submit" value="Vytvořit vrátník" name="tlacitko" />
</form>
AM_
Profil
Asi není úplně dobře, když do elementu <table> vnořuješ element <span>, měl bys to buď cpát jinam, než do té tabulky, nebo vytvářet i řádky. Jinak tu chybu nevidím, buď ji přehlížím, nebo je chyba až na straně zpracujícího PHP, ale to, co tu řešíš, bys měl mnohem spíš řešit přes vlastnost "multiple"
Lkor
Profil *
Jenže multiple mi nevyřeší možnost, že chci mít dva moduly A...

Hmm... a jak řešíš ty ten zápis dynamickejch tlačítek do DB?
AM_
Profil
Tady by se ti mělo předat pole $_POST['select'][(index)], které postupně projdeš. Řeší se to úplně stejně, jako kdyby tam byly napevno, protože to taky úplně stejně funguje, pořád říkám to samé, problém je zřejmě v něčem jiném :)
Lkor
Profil *
To jsem blázen, funguje to... a to jsem to zkoušel několikrát... :) A dík moc za ochotu. :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: