Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno PHP, jQuery, Databáze.. dotaz pro pokročilejší

Zdarec.

Mám HTML dokument, který obsahuje hromadu javascriptového kódu a
hlavně hromadu políček. Tyto políčka se navíc dynamicky přidávají.

Požadavkem také je, aby se uživatel kdykoliv mohl vracet k takto rozpracovanému HTML dokumentu.

Protože není snadné takové hodnoty ukočírovat, napadlo mě obalit celý složitý formulář do tagu.

A následně použít metodu: $('#myForm').html(), která vlastně pošle celou část HTML,
tak jak je přes Ajax.
No a potom se uloží v DB.
S tím problém není.

Ale narazil jsem, jak správně zapsat do databáze tuto html část.

Nejprve jsem použil PHP funkci mysql_real_escape_string, přes kterou se mi úspěšně podařilo
vkládat formuláře.

Bohužel funkce odstraňuje některé uvozovky, což vede k tomu, že na prvcích nefunguje JavaScript.

Například, mám:

...apend('<tr onkeyup="calculate(this)" ..... 

A on mi tam vyzobavá nutné uvozovky ".
Takové HTML následně není ani validní, ani funkční.

Nemá někdo zkušený nápad, jak vhodně takový kód "propašovat" do databáze, a pak ho dostat i ven?

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
::) formular prevest na objekt a ten pak jako JSON ulozit do DB, pri nacitani vyskladat formular z…
MaSo 23.03.2015 19:13
MaSo
Díky za nápad. Uvidím, možná to nakonec takto udělám. Ale těch hodnot je tam fakt moc, chtěl jsem s… nový
Flash_Gordon 23.03.2015 20:36
Flash_Gordon
Nevím, co se všechno zrodí až na klientovi, ale pokud by se jednalo jenom o inputy a hodnoty, pak mi… nový
hynajs 24.03.2015 08:58
hynajs
Pokud to chceš takhle prasácky, tak to HTML zkus uložit jako binární data (BLOB)... nový
MaSo 24.03.2015 09:10
MaSo
Neukládej HTML do DB, je to fakt prasárna. jQuery umí vytáhnout data z formuláře a pak už jenom stač… nový
martin.developer 24.03.2015 10:19
martin.developer
Co misto uvozovek pouzit apostrofy? poslední
krata-mobil 24.03.2015 15:53
krata-mobil

Díky za nápad. Uvidím, možná to nakonec takto udělám.

Ale těch hodnot je tam fakt moc, chtěl jsem se tomuto vyhnout.

Moje idea byla tato:

Dát formu ID, třeba takhle:

<form id="myForm">
<select name="single">
<option>Single</option>
<option>Single2</option>
</select>
<br>
<select name="multiple" multiple="multiple">
<option selected="selected">Multiple</option>
<option>Multiple2</option>
<option selected="selected">Multiple3</option>
</select>
<br>
<input type="checkbox" name="check" value="check1" id="ch1">
<label for="ch1">check1</label>
<input type="checkbox" name="check" value="check2" checked="checked" id="ch2">
<label for="ch2">check2</label>
<br>
<input type="radio" name="radio" value="radio1" checked="checked" id="r1">
<label for="r1">radio1</label>
<input type="radio" name="radio" value="radio2" id="r2">
<label for="r2">radio2</label>
</form>

No a s jQuery lze zavolat:

$( "#myForm" ).html();

Což vlastně vyvolá celou HTML strukturu výše (včetně inputů + jejich aktuálních hodnot).
A právě tuhle část jsem chtěl přenášet a ukládat do databáze.

Nicméně narazil jsem na dvě chyby ]:(

- IE8 nepoužívá u atributů uvozovky.
To vede k tomuhle průšvihu:

<input type=radio name=radio value=radio 1 />

- Dále nefungují handlery (události) těchto funkcí. OMG !

Ach jo! Tak krásně jsem si to vymyslel.....

Nemá nějaká duše nápad, jak to rychle a elegantně udělat?

//Editace

Tady jsem našel fakt pěknou věc, která by mi mohla píchnout:
yLPY3

Nevím, co se všechno zrodí až na klientovi, ale pokud by se jednalo jenom o inputy a hodnoty, pak mi opravdu připadá nejspolehlivější vyzobat Javascriptem ty inputy.
Chyb typu

- IE8 nepoužívá u atributů uvozovky.
To vede k tomuhle průšvihu:

<input type=radio name=radio value=radio 1 />

může být více a na některé by kód nemusel být připraven (konkrétně téhle by nebylo těžké předcházet). Pak bys mohl mít v té databázi zmatky.
Osobně bych také ty rozpracované formuláře radši ukládal do XML souborů - asi by šly lépe srovnávat. V té databázi asi nepřečteš nic.
Neznám ale všechny souvislosti.

Neukládej HTML do DB, je to fakt prasárna. jQuery umí vytáhnout data z formuláře a pak už jenom stačí ty data uložit třeba jako JSON.
Taktéž existuje ještě plugin pro naplnění formuláře z JSON dat.

Jinak sice nevím jak dlouho ty data máš držet, ale možná bych se zamyslel nad tím spíše použít session než-li přímo databázi.

BTW: V HTML kódu by se určitě neměli objevovat věci jako

onkeyup="calculate(this)"

všechny události by se měli registrovat přímo v JS.

var object = document.getElementById("foo"); // V jQuery $("#foo")

object.addEventListener("keyup", handler); // pro moderní prohlížeče
object.onkeyup = handler; // IE8 a starší
object.bind("keyup", handler); // jQuery

Zpět do poradny Odpovědět na původní otázku Nahoru