| 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: 13 let
|
|||
0