Autor Zpráva
Noobos
Profil *
Při pokusu o řešeni těchto dvou problemů berte na vědomí, že mám účet u WEBZDARMA, proto mi neraďte postupy, které tam nefungují.
Mám celkově dva (slovy 2) problémy:

1) Chtěl bych zamezit opakovanému použití skriptů na jedné stránce, např. refreshi; také bych chtěl zamezit funkčnost tlačítka zpět. Jak to mám udělat? Nejde to nějak (z pohledu uživatele) obejít?

2)Chtěl bych mít složku downloads, kde by byly ZIP archivy a chtěl bych, aby nebyly přístupné např. zadáním adresy, ale pouze po provedení srčitého skriptu (řekněme zaplacení). Jak by to šlo provést? Třeba za pomoci .hrtaccess. Důležité je, aby to bylo neošulitelné.

S díky Noobos
temistokles
Profil
tak hned na zaciatok sa mi zda zaujimava kombinacia "WZ" a "po zaplaceni".

ten druhy bol by siel obist tak, ze subory das do priecinku, ktoremu nastavis prava tak, aby sa ku nemu nedalo dostat, ale aby sa ti ku nemu dostali skripty. a ked budes davat niekomu subor tak mu ho posles cez php force-downloadom.

prvy bod by snad siel osetrit javascriptom - ale nikdy to nebude IMHo na sto percent
roberta
Profil
1. nedá sa. tlačítko zpět nevypneš
2. nedá sa. lebo wz
djlj
Profil
Noobos
Ta druhá věc by se dala ošetřit tak, jak píše temistokles, ale mám takový pocit, že se stahované soubory ukládají dočasně do RAM (to opravdu nevím jistě, kdyžtak mě opravte), což není ideální.
Napadá mě spíš, že bys měl soubory uložené v jakékoliv složce a při dotazu na download by se soubor zkopíroval do nějakého dočasně vytvořeného adresáře, odkud by se stáhl, a ten adresář by se po čase automaticky smazal...
souki
Profil
soubor zkopíroval do nějakého dočasně vytvořeného adresáře
jednodušší by možná bylo zamezit zobrazení obsahu složky a soubory přejmenovávat skriptem
Hugo
Profil
Noobos

ad 2) Jde to udělat pomocí .htaccess. Stačí do něj vložit

deny from all


a nikdo (kromě apache) se k těm souborům nedostane. Takže je pak můžeš odesílat uživateli pomocí php.
souki
Profil
nebo http://www.jakpsatweb.cz/server/mod_rewrite/mod-rewrite-priklady.html# zakaz
kdyby si chtěl omezit jen některé soubory
Noobos
Profil *
ad 2) Jde to udělat pomocí .htaccess. Stačí do něj vložit
deny from all
a nikdo (kromě apache) se k těm souborům nedostane. Takže je pak můžeš odesílat uživateli pomocí php.


To vím, ale nevím jak odeslat pomocí PHP uživateli soubor. Jak říkám (no... vlasně jsem to ani neřek) s PHP jsem teoretik-začátečník
jozob
Profil
Noobos
"nevím jak odeslat pomocí PHP uživateli soubor"
1.) mail
2.) HTTP (tuším že niečo takéto: header('Content-Disposition: attachment; filename="subor"');)
Hugo
Profil
Noobos

Tady je to pěkně popsané
http://www.linuxsoft.cz/article.php?id_article=310
Noobos
Profil *
Dobře takže 2) vyřešena!
Chtěl bych ještě odpověd na 1. otázku, kterou jsem bohužel poněkud blbě napsal; správně měla být:

Chci zamezit opakovanému spuštění PHP skriptů, když například uživatel klikne na tlač. zpět (a dostane se na např. registrace.php) a potom klikne na nějaký odkaz (který by se mu vůbec neměl zobrazit). Viděl jsem (zpravidla na on-line hrách) po refreši stránku: PLATNOST STRÁNKY VYPRŠELA, a nevím jak to udělat.
Hugo
Profil
Noobos

Odešli data skriptu (např. zpracuj.php) a po provedení operací uživatele přesměruj na stránku, kde bude výstup toho skriptu (např. zobraz.php).
Anonymní
Profil *
Zdravím, náhodou jsem se dostal na tuhle diskusi a tak se pokusím přispět trochou do mlýna. Pokud teda není pozdě...

Já používám s úspěchem následující metodu odeslání formuláře.

registrace.php (například.. zde je formulář pro registraci uživatele)
- tato stránka se odešle pomocí metody post zase na registrace.php se skrytou proměnnou akce=insert (třeba). Na úplný začítek stránky, ještě než vložím jakýkoliv znak s html (pozor, i prázdná mezera je už html znak) vložím skript, který ošetří proměnné. Příklad souboru registrace.php :

<?PHP
if($akce=='insert'){
if($jmeno && $prijmeni ){
..nejaky insert do databaze..
header("Location: registrace.php?message=Děkujeme za registraci");
exit();
}
else{
header("Location: registrace.php?error=Zadejte prosím všechny položky formuláře");
exit();
}
}
?>
....
<?
if($error)echo'<b style="color: red;">'.$error.'</b>';
elseif($message)echo'<b style="color: green;">'.$message.'</b>';
?>
...
HTML stránka s registračním formulářem
<form action="registrace.php" ...>
<input type="text" name="jmeno" value="<?echo$jmeno;?>">
<input type="text" name="prijmeni" value="<?echo$prijmeni;?>">
<input type="hidden" name="akce" value="insert">
</form>

- Těch ošetření může být samozřejmě potom více. Píšu to velice stroze a z hlavy. Tak sorry za případný překlep.
Stránka se odešle na samu sebe a provede se skript na začátku. Stránka se ale nedočte do konce a přesměruje se opět na registrace.php
Tam se před formulářem objeví nápis s chybou $erroe nebo $message s hláškou o úspěšném vložení nového uřivatele do databáze. Při použití tlačítka ZPĚT se neprovede skript 2x. A to je celé kouzlo. Taky zůstanou vyplněná data ve formuláři při odeslání a uživatel je nemusí zadávat znova (když systém vrátí chybu).

Tak snad je to jednocuché ;-) Kdyžtak kontakt na mě je na http://reference.alsan.cz úplně dole.

ALSA.n
Toto téma je uzamčeno. Odpověď nelze zaslat.