Autor | Zpráva | ||
---|---|---|---|
Mihhc Profil |
#1 · Zasláno: 1. 8. 2012, 15:27:18
Zdravím,
mám stejný problém, jako kolegové: znovu vložení záznamu při refresh prohlížeče Problém - Při aktualizaci stránky se požadavek odešle znovu smazání POSTDATA Bohužel se mi nepovedlo to aplikovat správně. http://mihhc.wz.cz/php/generator_hesel.php - vypsal jsem tam i kod, je to myslím názorné. - ve chvíli když k tomu přidám header, tak se mi vždy pokazí generace. - podle 1 z vláken prý pomůže nasměrovat post na další soubor, ale nechce se mi všechny soubory dělit Jo a prosím berte ohled, že jsem zatím na 32. stránce Linuxsoftu, sice nějaký základy programování mám, ale stejně. OFF-TOPIC: Zatím se k tomu Linuxsoft nedostal, tak bych se chtěl zeptat, jak se předává více parametrů v adrese. > Podle návodu jsem to udělal na první urovni > http://mihhc.wz.cz/index.php?page=kontakty > Ale jak udělat další urovně ??? Například mám složku "php" a v ní další soubory např: "generator_hesel.php" ... tak aby byla adresa "http://mihhc.wz.cz/index.php?topic=php&page=generator-hesel" (ale zaroven fungovala i 1. uroven). Asi sami z toho vidíte, že vůbec v tom nemám jasno. Jelikož na toto se primárně neptám, tak kdyžtak prosím jen o nějaké odkázané čtivo. > Případně i jiný systém, tady je URL taky trochu jiná, rád bych to nejsprávnější řešení, až se odhodlám to pořádně nastudovat.(Ve článku sami píší, že se nejedná o systém pro profesionály.) Předem díky, M. |
||
Iter Profil * |
#2 · Zasláno: 4. 8. 2012, 00:01:21
No ja bych to resil asi tak ze bych si zjistil pocet nacteni stranky
V pripade ze to bude poprve od daneho uzivatele tak by se nic neprovedlo V pripade ze to bude vicekrat tak bych to smazal pres podminku s unset($_POST[]) To me jen tak napadlo urcite by to slo lepe |
||
juriad Profil |
čeho se snažíš docílit?
1. při provedení refreshe vygeneruje další hesla; chceš se zbavit hlášky v prohlížeči "To display this page, Firefox must send information that will repeat any action (such as a search or order confirmation) that was performed earlier." 2. chceš při refreshi zobrazit stránku bez vygenerovaných hesel pro 1. změň metodu z POST na GET (stačí zaměnit tato slova všude) pro 2. odesílej formulář na vygeneruj_heslo.php, tam nebudeš vypisovat nic, jen do SESSION vložíš array s vygenerovanými hesly a header-em přesměruješ na generator_hesel.php v generator_hesel.php budeš zjišťovat obsah SESSION a pokud bude obsahovat vygenerovaná hesla, tak je zobrazíš (a ze SESSION smažeš), jinak nic; zbytek stránky zobrazíš stejně část generator_hesel.php (toto bude zobrazovat hesla ze SESSION) <?php session_start(); var_dump($_SESSION); ?> <h4>Nastavení hesla</h4> <form action='generuj_hesla.php' method="post"> Síla hesla: <select name="sila" style="margin-bottom: 10px;"> <?php for ($i = 4;$i <= 20; $i+=2) { echo "<option value='$i'>".$i."</option>"; } ?> </select><br/> Počet hesel: <select name="pocetHesel" style="margin-bottom: 10px;"> <?php for ($i = 4;$i <= 20; $i+=2) { echo "<option value='$i'>".$i."</option>"; } ?> </select><br/> S českými znaky: <input name="czZnaky" value="true" type="checkbox" style="margin-bottom: 10px;"><br/> <input type="submit" name="odeslano" value="Odeslat" style="margin-bottom: 10px;" /></form> <div id="hesla"> <?php if (isset($_SESSION['hesla']) && count($_SESSION['hesla']) > 0) { ?> <ul> <?php foreach ($_SESSION['hesla'] as $heslo) { ?> <li> <?php echo $heslo; ?> </li> <?php } $_SESSION['hesla'] = array(); ?> </ul> <?php } ?> </div> v generuj_hesla.php budeš mít: <?php session_start(); function pridej_heslo($heslo) { if (!isset($_SESSION['hesla'])) { $_SESSION['hesla'] = array($heslo); } else { array_push($_SESSION['hesla'], $heslo); } } function Pass_Gen($sila, $pocetHesel, $czZnaky = false) { $cisla = range(0, 9); $mala = range("a", "z"); $velka = range("A", "Z"); $ceskeZnaky = array ("á", "č", "ď", "ě", "é", "í", "ň", "ó", "ř", "š", "ť", "ů", "ú", "ý", "ž", "Á", "Č", "Ď", "É", "Í", "Ň", "Ó", "Ř", "Š", "Ť", "Ú", "Ý", "Ž"); if ($czZnaky) { $znaky = array_merge($cisla, $mala, $velka, $ceskeZnaky); } else { $znaky = array_merge($cisla, $mala, $velka); } for ($i = 0; $i < $pocetHesel; $i++) { shuffle($znaky); pridej_heslo( implode("", array_slice($znaky, 0, $sila))); } } if (isset($_POST["odeslano"])) { if ($_POST['sila'] != "" && $_POST['pocetHesel'] != "" && empty($_POST["czZnaky"])) { Pass_Gen ($_POST['sila'], $_POST['pocetHesel']); } elseif ($_POST['sila'] != "" && $_POST['pocetHesel'] != "" && !empty ($_POST["czZnaky"])) { Pass_Gen ($_POST['sila'], $_POST['pocetHesel'], $_POST["czZnaky"]); } else { // tady je problem, asi by byla treba dalsi promenna v SESSION, ktera bude obsahovat chybove hlasky } } // nakonec presmeruj, tady nic nevypisuj! header ("Location: generator_hesel.php"); nyní je skript funkční a ozkoušený |
||
Časová prodleva: 8 dní
|
|||
Mihhc Profil |
#4 · Zasláno: 12. 8. 2012, 17:37:15
juriad:
Díky moc, přesně toto jsem hledal. Trvalo mi jen čas prokousat se na Linuxsoftu k SESSIONS. Počítám, že je prostě problém v rámci 1 strany s refresh a tudíž je lepší někam odkázat.(Bez ohledu že tato okázala hned zase zpět a vypsala obsah session) Tak jen otázka na princip: Je tedy vždy takovýto problém oštřen přesměrováním? Např: Klikenete na "Nákup" > objeví se "Děkujeme za nákup > klikněte na "Pokračovat" nebo "K pokladně". Teď jsem se kouknul na CZC a ten mě nechá na stránce s produktem, tak nevím. |
||
juriad Profil |
#5 · Zasláno: 12. 8. 2012, 18:01:50
Ano, každý dnešní prohlížeč se chová tímto způsobem
Tento vzor je pěkně popsaný na wiki Projdi si také seznam HTTP statusů a sleduj třeba ve Firebugu na kartě síť, co ti přichází ze serveru za informace. Samozřejmě, když záškodník bude chtít, tak ti jakýkoli request může poslat znovu. |
||
panther Profil |
#6 · Zasláno: 12. 8. 2012, 19:06:46
Mihhc:
„Počítám, že je prostě problém v rámci 1 strany s refresh a tudíž je lepší někam odkázat“ tohl není až tak pravda. Vše lze mít na jedné stránce, jen to musíš správně opodmínkovat. Ověření/zpracování scriptu v jednom souboru jako výpis formuláře je technicky (poměrně snadno) možné. |
||
Časová prodleva: 12 let
|
0