Autor Zpráva
Mihhc
Profil
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 *
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ý
Mihhc
Profil
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
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
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é.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: