Diskuze: Drobná editace
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 8 zpráv z 8.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
V administraci musíš mít stejně nějaké ověření, o kterého
uživatele se jedná. Pochybuji že vypisuješ všem uživatelům všechny
inzeráty. Jaký by byl problém udělat stejné ověření i u stránky s
editací?
Jinak jistě, že to jde, ale ověřování musíš mít stejně i po tom
odeslání - nemůžeš se spoléhat, že ti data pošle jen ten uživatel,
kterému se stránka zobrazila.
Ahoj,
není důvod nenechávat přesměrování na URL s ID inzerátu. Na té
stránce musíš vždycky otestovat, jestli daný inzerát patří danému
uživateli. Pokud patří, pak je v podstatě jedno, jestli si změní číslo v
URL, holt si edituje (svoji vlastní vinou a úmyslně) jiný inzerát - ale
pořád svůj.
Musíš u toho pořešit i další kontroly, např. pokud máš nějaké
časové omezení, kdy daný inzerát může editovat atd. Ty kontroly by měly
proběhnout 2x, a to při:
V administraci to vypisuje pouze inzeráty, které mají stejné jméno v "autor" jaké je v SESSION"jmeno".. to funguje správně..
ID dej do URL a při vypisování stránky s editací ověříš, jestli to
ID patřík tomu uživateli. Pokud ne, vrátíš ho zpět s nepovoleným
přístupem.
Ještě by to šlo trochu netradičně a to přes formulář. Tlačítko bude
patřit formuláři, který bude obsahovat skryté pole s ID. Stejně bych to
ale nechal ověřit. Výhoda je v tom, že to nedáváš do URL a neplete to
uživatele a navíc tím odradíš nějaké ty uživatele od zaměnění.
<form method="POST" action="Odkaz na tu stránku.php">
<input type="hidden" value="ID inzerátu" name="id" />
<input type="submit" value="Editovat" />
</form>
Už proces ověřování mám, vytáhnu si i z db příslušný inzerát, ale nemohu to nastrkat už do šablony :/ Už ale při podávání jsem musel nastavit jako value například pole titulku toto:
<?php if(isset($_POST['titulek']))echo htmlspecialchars($_POST['titulek']); ?>
aby když vyskočí chybová hláška, aby v tom formuláři něco zůstalo..
jenže když právě teď vytahuju inzerát z db:
$nactiInzerat=$spravceInzeratu->nactiInzerat($parametry[0]);
$inzerat = array(
'titulek' => $nactiInzerat['titulek'],
'text' => $nactiInzerat["text"],
'kategorie' => $nactiInzerat["kategorie"],
'upresneni' => $nactiInzerat['upresneni_' . $_POST['kategorie']],
'mesto' => $nactiInzerat["mesto"],
tak to do těch polí nevyplní to co má, i když nastavím něco takového:
<?php if(isset($inzerat['titulek'])) echo $inzerat['titulek']; ?>
Jen dodám, že na verzi bez MVC mi to bez problému vypisovalo vše, ať už
to házelo chybu při přidávání inzerátu nebo když jsem načítal data pro
editaci z db.
Na to mi stačilo toto:
<?= htmlspecialchars($titulek) ?>
jenže to jsem ani pole nepoužíval, každé pole z formuláře jsem měl uložené např:
$titulek=$_POST['titulek']
nebo když jsem načítal:
$titulek=$nactenyInzerat['titulek']
vidíte tam nějakou jasnou chybu hned po shlédnutí kodů? díky
doporucil by som ti session pouzivat na celom webe - pokial je prihlaseny
spravca, tak mu povol editaciu clanku, pokial nie je prihlaseny, tak mu umozni
sa prihlasit
dalej ked pouzijes session, nastav u coockies cas,po ktory bude platna a po
vyprsani platnosti ho okamzite odhlas, ked nezaregistrujes ziadnu aktivitu
(prenos dat, klikanie,...)
pomocou javascriptu dokazes skryt aj adresu v browseri,
dalsia moznost je vygenerovat tzv. temporary ID, ktore sa pouzije v URL a bude
vygenerovane nahodne a nikde by sa neukladalo
Takže si mám inzerát udělat jako SESSION a při vytahování z databáze to uložit do aktuální SESSION? To je zajímavé
A jak mám tedy udělat to časové omezení. Nejde to přes PHP? Asi na to přímo funkce neexistuje, že?
Zobrazeno 8 zpráv z 8.