

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?
Ještě se zeptám jinak.
Vypátral jsem: Klasické $_POST v php
se zbavuje jednoduchých lomítek.
Takže například align='left' automaticky převede na align=left
To jsem pořešil přes:
Ale.... to mi zase posílá, jako align%3Dright%3E
Ach jo.... co mi uniká.....?
Jak to převedu zpět?
neviem co presne chces urobit, ale tu mas tabulku na prevodnik:
ref_urlencode.asp
formular prevest na objekt a ten pak jako JSON ulozit do DB, pri nacitani vyskladat formular z JSON objektu...
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![]:(](https://static.poradna.net/images/smiley/evilworry.gif)
- 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
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.
Pokud to chceš takhle prasácky, tak to HTML zkus uložit jako binární data (BLOB)...
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
všechny události by se měli registrovat přímo v JS.
Co misto uvozovek pouzit apostrofy?