NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
Avatar
katrincsak
Člen
Avatar
katrincsak:8.4.2015 11:42

Ahoj,

trápím se už několik hodin s přesměrováním. Prolezl jsem zdejší forum, ale nenašel jsem co zřejmě potřebuji. Našel jsem např. CURL..ale ten asi problém neřeší.

  • Mám formulář ze kterého odesílám data do DB, jakmile je odešlu vše je OK..Jakmile dám znovu odeslat..vše je OK..Ale jakmile refreshnu stránku, data se znovu nahrajou duplicitně...
  • Řešení je načíst stránku znovu s informací, že se data načetli.. Jak?

Ani použít nemohu...Ale řešilo by to jen z 50%

header('Location: http://');

Tohle je řešení, ale nevypíšu informaci...

echo '<script>
window.location.replace("' . Nastaveni::URL_2 .'");
</script>';

Tohle by teoreticky mohlo být řešení, ale nepodařilo se mi to spustit. Nastavil bych časovač, že se ukáže zpráva a po 2s zmizí a dojde k refreshnutí s kombinací výše scriptu.

echo '<script>window.setTimeout(code, [delay]);</script>';
  • Je nějaká možnost to přesměrovat tak jak mám v plánu, nebo jinak sofistikovaně? Ten script se mi líbí už jen z logiky, že to neblokuje procesy na serveru. Protože PHP je už vykonané.

zpracování formuláře:

if(isset($_POST['odeslat']) AND ($_POST['odeslat']))
{
  if($_POST['jmeno'] AND $_POST['popis'])
  {
    $obsah->changelogInsert($_POST['jmeno'], $_POST['popis']);
  }
  else
    echo "Nevyplnil jsi vše co je potřeba! ";
}

Odeslání do DB:

public function changelogInsert($jmeno, $popis)
{
        $jmeno = htmlspecialchars($jmeno);
        $popis = htmlspecialchars($popis);

        try{
                Databaze::dotaz("
                INSERT INTO `changelog` (`id`, `datum`, `jmeno`, `popis`)
                VALUES(?, ?, ?, ?)"
                , array('', date("d.m.Y"), $jmeno, $popis));

                echo '<script>
                                window.location.replace("' . Nastaveni::URL_3 .'");
                        </script>';
        }
        catch (PDOException $e){
                echo "Něco se stalo, kontaktuj administrátora!";
        }
}

Děkuji za pomoc ;-)

Editováno 8.4.2015 11:44
 
Odpovědět
8.4.2015 11:42
Avatar
Odpovídá na katrincsak
Martin Konečný (pavelco1998):8.4.2015 11:58

Zdar,

použij sessions.
Po odeslání formuláře ulož do session zprávu a poté na stránce dej podmínku - pokud zpráva v sessions existuje, vypiš ji a vyresetuj.

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
8.4.2015 11:58
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na katrincsak
Martin Konečný (pavelco1998):8.4.2015 12:00

A nemá smysl používat htmlspecialchars, když data vkládáš. Použij to až při výpisu.
Můžeš si i ušetřit volání funkce date(), aktuální čas si DB umí vložit sama pomocí funkce NOW().
A ID si taky umí vložit sama díky auto increment. Sloupec s ID pak vůbec do seznamu sloupců vypisovat nemusíš.

Databaze::dotaz("
  INSERT INTO `changelog` (`datum`, `jmeno`, `popis`)
  VALUES(NOW(), ?, ?)"
, array($jmeno, $popis));
Nahoru Odpovědět
8.4.2015 12:00
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
katrincsak
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
katrincsak:8.4.2015 12:29

Taková blbost a nenapadne mě.. :D Já přemýšlel spíše nad hidden input.

echo $_SESSION['info'];
unset($_SESSION['info']);

Databaze::dotaz jsem tedy upravil, děkuji. A ten "AUTO_INCREMENT" používám, ale myslel jsem že musím zachovat výpis struktury. Hned je to přehlednejší, lepší a jednodušší.

Opět děkuji za super výpomoc ;-)

 
Nahoru Odpovědět
8.4.2015 12:29
Avatar
katrincsak
Člen
Avatar
Odpovídá na Martin Konečný (pavelco1998)
katrincsak:8.4.2015 12:31

Je nějaký rozdíl v tom, jestli to budu mít volně před vykonáním scriptu, nebo jestli v podmínce? Jen jestli to může mít i nějaké vedlejší chyby v opačném případě.

Myslím si, že když mám ošetřený zbytek že to nad scriptem asi nevadí bez podmínky.

echo $_SESSION['info'];
unset($_SESSION['info']);


if(isset($_POST['odeslat']) AND ($_POST['odeslat']))
{
Editováno 8.4.2015 12:34
 
Nahoru Odpovědět
8.4.2015 12:31
Avatar
Odpovídá na katrincsak
Martin Konečný (pavelco1998):8.4.2015 12:37

Pokud ten klíč info nebude v sessions existovat, pak ti PHP bude házet notice. Je lepší hodit to do podmínky :)

Nahoru Odpovědět
8.4.2015 12:37
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
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 6 zpráv z 6.