Diskuze: Refresh při splněné podmínce (ale pouze jednou)

PHP PHP Refresh při splněné podmínce (ale pouze jednou) American English version English version

Aktivity (1)
Avatar
Roman Duchoň:5. srpna 11:07

Ahoj,
mám proměnné:
$tries1Safe - pevně dané číslo
$_SESSION['re­alizedTries1Sa­fe']) - postupně se přičítá při splnění podmínek.

Pak mám následující funkce:

if (($tries1Safe-$_SESSION['realizedTries1Safe'])==1) {
    header("Refresh:0");
}

Jde o to, aby se zobrazovalo správně při výpisu do HTML - tj. aktuální stav

echo "Pokusů na 1 sejf: ".($tries1Safe-$_SESSION['realizedTries1Safe'])."<br>";
echo "Uskutečněné pokusy: ".$_SESSION['realizedTries1Safe']."<br>";

Zkusil jsem: Zkoušel jsem např. závést jakousi novou proměnou, která se měnila dle dané podmínky a různě začlenit změnu té proměnné do kódu, kde se dějou změny těch před tím zmíněných proměnných.
Také jsem zkoušel hledat různé nastavení toho refreshe...

Chci docílit: Vím, že by mi pomohl nějaký dynamický jazyk, ale momentálně bych to potřeboval vyřešit nějak staticky.

Odpovědět 5. srpna 11:07
RD
Avatar
Roman Duchoň:5. srpna 11:13

No a třeba teď to funguje...
To je jak to klasické meme.
Tak bych zatím neřešil

Nahoru Odpovědět 5. srpna 11:13
RD
Avatar
Roman Duchoň:5. srpna 11:29

No...
A nakonec mi tedy nejshůdnější řešení přišlo nacpat

header("Refresh:0");

všude, kde dochází ke změnám.
Co myslíte?

Editováno 5. srpna 11:31
Nahoru Odpovědět 5. srpna 11:29
RD
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:6. srpna 13:42

Nerozumim ani slovu :)
Ve 'chci docilit' mas nejaky blabol.
Co to ma vlastne delat, mi neni vubec jasne.
Ve 'zkusil jsem' je tez nejaky blabol, ktery bez kodu, ktery odpovida textu nedava moc smysl.
header("Refresh:0"); Jsem nikdy nepouzil, netusim, co to udela. A tys to nepopsal. jestli to presmeruje na tu samou stranku, php a to dal presmeruje, tak by uzivateli mohl zobrazit uz jen vysledky php, ktery nikam nepresmeruje. Nebo to cele ukonci uz pri prvnim presmerovani a zobrazi uzivateli jen 1.

Zkus treba nejaky kompletni jednoduchy program, ktery staci ctrl+c, ctrl+v a spustit. Nestacilo by treba ty podminky zkratit na $i++; a $i<50? Vis, jako, pro nas. Nemusis rozepisovat podrobnosti, pokud nejsou potreba.

Ja bych pro presmerovani pouzil tag <meta> nebo javascript window.locati­on.href. V php presmerovavam obvykle jen jednou pomoci header() a obvykle u formulare, aby mi uzivatel omylem 2x neposlal stejna data.

Editováno 6. srpna 13:44
 
Nahoru Odpovědět  +2 6. srpna 13:42
Avatar
Odpovídá na Roman Duchoň
Petr Spěvák:6. srpna 16:14
echo "SORRY JAKO!";

Fakt jsem se snažil pochopit, o co Ti jde. No, takže pokud je realizovaný počet pokusů právě o 1 menší, než celkový povolený počet pokusů, stránka vygenerovaná PHP skriptem se začne zběsile stále dokola refreshovat v intervalu 0 sekund (jak se načte, okamžitě se začne načítat znovu). Další případné zvýšení $_SESSION['re­alizedTries1Sa­fe'] o 1 by ale musel provádět jiný skript zobrazovaný ve stejném prohlížeči, protože ve stránce refreshované po 0 sekundách už uživatel nemá šanci cokoliv zadat (skoro to vypadá, jako by to běželo ve FRAMESETu či dvou nezávislých JavaScriptových boxech atp., ale nechci hádat, to by se nám to poněkud rozvětvilo).

Jinak se dá říct, že "refresh pouze jednou" se provede už tím, že PHP skript stránku vygeneruje a pošle prohlížeči (další refresh by vrátil stejný výsledek, pokud by tam nebylo třeba nějaké odpočítávání času, nebo zpracování něčeho jiného, co se mění nezávisle na tomto skriptu, případně načítání počtu refreshů do session atp. - tím se nám to opět může větvit, takže radši počkám na upřesnění).

Můžeš nějak upřesnit, o co Ti vlastně jde? Jsem si téměř jist, že rozumné řešení nebude problém vymyslet.

Editováno 6. srpna 16:16
 
Nahoru Odpovědět  +2 6. srpna 16:14
Avatar
Roman Duchoň:7. srpna 22:40

No, celé to bylo jen zacyklené, teď už přesně nevím jak a kde, ale začlo to fungovat - šel jsem dál.

Šlo mi hlavně o to, že mám v PHP nějakou logiku, která se vykoná a potřebuji pak zobrazit aktuální stav proměnných.

Tudíž jsem po vykonání příkazů v různých větvích přidal

header("Refresh:0");

Takže vše funguje, nejradši bych se sám označil jako řešitele, ale přijde mi to nevhodné a nevím - je to vůbec správně?
Mluvím právě čistě o jazyku PHP, žádném dynamickém (JS? U něho jsem se ještě nezastavil).

P.S. Přesto díky moc za pozastavení nad dotazem! :)
P.S.2 Když mi někdo nepoví, zda dělám správně, klidně to někdo uzavřete (nebo uzavřu časem sám)

Editováno 7. srpna 22:43
Nahoru Odpovědět 7. srpna 22:40
RD
Avatar
Peter Mlich
Člen
Avatar
Peter Mlich:8. srpna 9:02

Spis, nikdo takove veci nezkousel. Promenou obvykle lidi ulozi do db nebo session. Nepotrebuji zahlcovat server opakovanym refresh. Staci treba jednou za 17s (u chatu), kdyz se nic nedeje.
Kdyz to nikdo nepouziva a nezna duvody, ktere te k tomu vedou, tezko se da posoudit spravnost takoveho zpusobu.

Editováno 8. srpna 9:03
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět 8. srpna 9:02
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 7 zpráv z 7.