Avatar
Michal Kuba
Redaktor
Avatar
Michal Kuba:

Ahojte!
Mám takovou obecnější otázku, potom bych třeba blíže kódem přiblížil, co přesně potřebuji konkrétně udělat.

Když mám systém založený na MVC a chci editovat inzeráty uživatelů - nechci ale přesměrovávat někam, kde bude v adrese vidět id inzerátu, aby si nějaký chytrák nenapsal jiné ID a needitoval jiný inzerát. V administraci je vypsaný inzerát uživatele a chtěl bych, zda jde nějak jednoduše (nejlépe přes PHP či JS) otevřít mini editor daného obsahu inzerátu přímo v editaci.

-->Žádné přesměrování na jinou stránku, nechci směrovat na podat inzerát ani vytvářet stránku editovat inzerát.

 
Odpovědět 17.5.2015 20:08
Avatar
patrik.valkovic
Šéfredaktor
Avatar
Odpovídá na Michal Kuba
patrik.valkovic:

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.

Nahoru Odpovědět  +2 17.5.2015 20:12
Nikdy neumíme dost na to, abychom se nemohli něco nového naučit.
Avatar
Odpovídá na Michal Kuba
Martin Konečný (pavelco1998):

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:

  1. zobrazení stránky s editací - abys uživateli mohl říct, že tenhle inzerát editovat nelze.
  2. při samotném zpracování editace, protože když budeš mít třeba časové omezení, tak uživatel může stránku zobrazit před uplynutím doby a odeslat formulář až po. Takže je důležité všechny kontroly provést i při zpracování editace.
 
Nahoru Odpovědět 17.5.2015 20:13
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na patrik.valkovic
Michal Kuba:

V administraci to vypisuje pouze inzeráty, které mají stejné jméno v "autor" jaké je v SESSION"jmeno".. to funguje správně..

 
Nahoru Odpovědět 17.5.2015 20:20
Avatar
Odpovídá na Michal Kuba
Michal Šmahel (ceskyDJ):

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>
Nahoru Odpovědět 17.5.2015 21:39
Nejdůležitější je motivace, ovšem musí být doprovázena činy.
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na Michal Šmahel (ceskyDJ)
Michal Kuba:

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 :))

 
Nahoru Odpovědět 18.5.2015 0:18
Avatar
mkub
Redaktor
Avatar
Odpovídá na Michal Kuba
mkub:

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

 
Nahoru Odpovědět 18.5.2015 4:59
Avatar
Michal Kuba
Redaktor
Avatar
Odpovídá na mkub
Michal Kuba:

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?

 
Nahoru Odpovědět 18.5.2015 22:17
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.