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?

Předmět Autor Datum
Ještě se zeptám jinak. Vypátral jsem: Klasické $_POST v php se zbavuje jednoduchých lomítek. Takže…
Flash_Gordon 23.03.2015 18:20
Flash_Gordon
neviem co presne chces urobit, ale tu mas tabulku na prevodnik: ref_urlencode.asp
wam_Spider007 23.03.2015 19:03
wam_Spider007
::) 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…
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…
hynajs 24.03.2015 08:58
hynajs
Pokud to chceš takhle prasácky, tak to HTML zkus uložit jako binární data (BLOB)...
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č…
martin.developer 24.03.2015 10:19
martin.developer
Co misto uvozovek pouzit apostrofy? poslední
krata-mobil 24.03.2015 15:53
krata-mobil

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:

file_get_contents("php://input");

Ale.... to mi zase posílá, jako align%3Dright%3E

Ach jo.... co mi uniká.....?

Jak to převedu zpět?

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