Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
Všetko je třeba ošetřovat. //edit A na co to vlastně potřebuješ. Na tohle se daleko častěji hodí me…
Flash_Gordon 09.10.2007 10:34
Flash_Gordon
Pretože pri SESSION si môžem doovliť zabudnúť unset(). Ale m;6no prejdem na session. Len akurát mám…
msx. 09.10.2007 10:41
msx.
Kľudne si môžeš pamätať id editovaného prvku v input type=hidden (alebo v url), len pri zobrazovaní…
los 09.10.2007 10:47
los
Akože? Tomu celkom nerozumiem. Chápem, že ak má právo meniť, tak ho nesmiem použiť, lenže, ak bude v…
msx. 09.10.2007 10:52
msx.
Napr. tak, ako je to spravené tu pri editovaní príspevku: Identifikátor príspevku je v URL, pričom s…
los 09.10.2007 10:59
los
Dobre, takže začínam rozumieť. Ja mám všetko vo formulári, takže v url nevidieť nič. Lenže pri zobra…
msx. 09.10.2007 11:09
msx.
Potrebuješ si pamätať nejaké údaje z predchádzajúcich krokov? Ak áno (a nie je to len nejaká jedna h…
los 09.10.2007 11:25
los
Keď bude v meno1 hodnota 1, tak sa zobrazí formulár na editáciu, keď 2, tak sa obsah formulára zapíš…
msx. 09.10.2007 11:29
msx.
Takže ti vlastne nevadí, ak si niekto sám zmení hodnotu v meno1. V čom je potom problém?
los 09.10.2007 11:32
los
Aha, takže začínam chápať. Hodnoty, ktoré sú skrytými prvkami vo formulári a mohol by ich používateľ…
msx. 09.10.2007 11:46
msx.
Tá hodnota meno1 nemusí byť v session a vlastne nemusí byť vôbec na stránke. Na webovú aplikáciu sa… poslední
los 09.10.2007 13:17
los

Pretože pri SESSION si môžem doovliť zabudnúť unset(). Ale m;6no prejdem na session. Len akurát mám obavy z toho, aby som nenechal niečo nastavené, prípadne niekto nebude klikať v rámci postupu a klikne inde a session ostane nastavené. V rámci postupu myslím napríklad, že :

1. zobrazí sa zoznam
2. vyberie prvok na editáciu
3. potvrdí editované hodnoty

No a ak pri kroku dva klikne úplne inde a nechá to tak, tak sa formulárový prvok vymaže, ale session nie.

Napr. tak, ako je to spravené tu pri editovaní príspevku: Identifikátor príspevku je v URL, pričom sa kontroluje, či daný používateľ môže editovať zadaný príspevok.

Teda, ako zistím, že ho môže/nemôže zmeniť?

To záleží na logike tvojej aplikácie.

Dobre, takže začínam rozumieť. Ja mám všetko vo formulári, takže v url nevidieť nič. Lenže pri zobrazení zoznamu si nastavím skrytý prvok vo formulári s menom meno1 na 1. Potom po výbere položky v zozname sa kontroluje hodnota meno1. Ak je tam 1, tak sa zobrazí formulár na editáciu. Po potvrdení sa v meno1 nastaví nová hodnota alebo v inom skrytom prvku sa nastaví ďalšia hodnota a teda rozhranie vie, že sa postúpilo o krok. Lenže, ak tam niekto zmení id, tak sa to celé zrúti. Ak to bude v url a povedzme, že dám editáciu, tak aby som mohol overiť, či používateľ má právo editovať, musím mať niečo v zálohe podľa čoho to overím. To môže byť session, pretože session nemôže zmeniť, lenže problém vznikne tak, že ak to raz nastavím v session a používateľ sa rozhodne nepotvrdiť editáciu a klikne inde, tak v session ostane nastavená hodnota. Ja to teda dávam do skrytého prvku, ktorý sa vymaže, lenže ten môže užívateľ zmeniť a tým si urobiť, čo sa mu zachce a to je to, o čo mi ide. Neviem, či ja správne chápem teba, ako to chceš overiť, či má právo editovať.

Potrebuješ si pamätať nejaké údaje z predchádzajúcich krokov? Ak áno (a nie je to len nejaká jedna hodnota), tak potom si to ulož do session.

Prečo nastavuješ pri zobrazení zoznamu meno1=1 - čo táto hodnota znamená?
Kvôli čomu program spadne, ak je v meno1 neočakávaná hodnota?

Aha, takže začínam chápať. Hodnoty, ktoré sú skrytými prvkami vo formulári a mohol by ich používateľ zmeniť a je nutné udržať ich v poriadku, treba dať do session. Session si vlastne nastavím až vtedy, keď sa dostanem do editovania, čiže meno1 == 1. Potom pri meno1 == 2 len vytiahnem hodnoty zo session a teda budú chránené.

Lenže teraz otázka:

Zobrazí sa zoznam, čiže meno1 sa akurát nastaví na 1, lenže id ešte nie je uložené v session, pretože ešte si používateľ tlačítkom nevybral položku a teraz nastaví on sám meno1 na 2 a do id dá nejakú hodnotu?

Aha, práve ma napadla odpoveď: Session nie je nastavené a teda pri kontrole meno1 == 2 stačí zamietnuť editáciu, pretože id má byť už v session a tam nie je nič.

NO a teraz ma napadlo, že to by som si mohol hackovať tak vlastný zoznam, pretože to, čo sa nebude dať editovať v id nikdy vlastne nebude, pretože sa v zozname položka s takým id nezobrazí na editáciu (tým myslím zmenu registračných údajov pre prihlasovanie na stránke a podobne). Takže asi preto sme si nerozumeli.

Znamená to, že to čo popisujem je bežpečné, pokiaľ si to používateľ nebude chcieť zabúrať sám? (Prihlasovacie údaje o registrovaných má možnosť editovať len administrátor.)

Tá hodnota meno1 nemusí byť v session a vlastne nemusí byť vôbec na stránke.

Na webovú aplikáciu sa nemôžeš pozerať ako na windows aplikáciu (v Microsofte to tak skúsili a vyšiel z toho ASP.NET). Je to vždy len požiadavka - odpoveď. Vstup od používateľa je v GET (url), POST (vyplnený formulár) alebo COOKIE. Všetky tieto vstupy musíš vždy kontrolovať. Tvoja pamäť je v SESSION - tam si pamätáš informácie ku danému používateľovi.

1. Používateľ chce niečo editovať, tak si vyžiada formulár (=požiadavka GET na /formular.php) - ty mu ten formulár dáš (=HTML s formulárom).
2. Používateľ odošle vyplnený formulár (požiadavka POST napr. tiež na /formular.php) - tak tie hodnoty uložíš a povieš mu, že je to uložené (=redirect na HTML s textom) prípadne mu podáš nový prázdny formulár (=redirect na /formular.php).

Tebe je v podstate jedno, či používateľ odošle vyplnený formulár bez toho, aby si ho predtým vyžiadal. Takéto veci ošetrovať nemusíš. Musíš iba skontrolovať, či je ten formulár vyplnený správne.

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