Autor Zpráva
kudlanka
Profil *
Ahoj vespolek,
nastudoval jsem session, ale něco mi stále uniká:

mám několik kroků rozdělených do několika formulářů, následující krok je vždy přístupný po vyplnění předchozího nějak takhle:

if(!isset($_SESSION[promenna2]) && isset($_SESSION[promenna1])) {
// zobraz formular 2
}

jak zobrazit předchozí formulář v případě, že uživatel klikne na tlačítko Zpět v okně prohlížeče? Zdá se, že v poli $_SESSION zůstane hodnota z předchozího formuláře nastavená.
Leo
Profil
No v poli session (uklada se na serveru) hodnoty zustanou dokud je v nejakem skriptu neprepisete. Ovsem vas problem je nejspis v tom, ze prohlizec stranku zobrazuje z pameti aniz se dotazuje serveru na aktualni stav, takze musite nastavit http hlavicky (pres fci header), ktere zabrani kesovani. Leo
kudlanka
Profil *
Bohužel zákaz cacheování nepomohl.

Při stisku tlačitka Zpět na browseru se nic neděje, při druhém stisku se vrátím o 2 kroky zpět (na místo, kde není použita session).

Potřebuji zobrazit předchozí formulář pro změnu zadaných údajů.
Leo
Profil
To uz zalezi na tom, jak to mate konkretne udelane, a bez blizsi informace tezka rada... Leo
kudlanka
Profil *
Vypadá to asi takhle:

session_start();

// pridani promenny do session
if(isset($_POST[datumod])) {
$_SESSION[datumod] = $_POST[datumod];
}
if(isset($_POST[datumdo])) {
$_SESSION[datumdo] = $_POST[datumdo];
}

.
.
předchozí formuláře
.
.


/* Form - DatumOd */
/****************/
if(!isset($_SESSION[datumod])) { ?>
<form action="" method="post">
<strong>Datum nástupu:</strong><br />
<input class="mandatory" type="text" name="datumod" value="" />
<input type="submit" name="akce" value="X" /><br />
</form>
<? }

/* Form - Datum do */
/****************/
if((!isset($_SESSION[datumdo]) || $_SESSION[datumod] >= $_SESSION[datumdo]) && isset($_SESSION[datumod])) { ?>

<form action="" method="post">
<strong>Datum ukončení:</strong><br />
<input class="mandatory" type="text" name="datumdo" value="" />
<input type="submit" name="akce" value="X" /><br />
</form>
<? }

.
.
Další formuláře
.
.
Ve skriptu se ještě vyskytují jiné formuláře, které volaji jiné skripty a vrací se zpět - proto nemohu použít metodu POST a metoda GET je nepoužitelná pro omezení délky v URL.
Leo
Profil
"Ve skriptu se ještě vyskytují jiné formuláře, které volaji jiné skripty a vrací se zpět - proto nemohu použít metodu POST"

Obecne plati, ze skript, ktery je prijme data z formulare odeslaneho metodou POST by nemel delat vystup do prohlizece, jen zpracovani a presmerovani. Leo
kudlanka
Profil *
Ale to v mém případě imho platí.
Proměnné z $_POSTu si dávám do $_SESSION. Pak kontroluji, které session proměnné jsou nastavené a podle toho zobrazím správný formulář.
V případě, že volám externí skript udělám v něm zpracování dat a předměrování na volající skript. Doposud jsem si vracel potřebné parametry v URL, ale pak jsem narazil na omezení metody GET a proto začal zkoumat session.


Problém je v tom, že kdyz použiji tlačítko Zpět nemůžu kontrolovat proměnné v poli $_SESSION, protože ty jsou pořád nastavená a tím pádem se vlastně nic nestane. A já potřebuji mít možnost znovu editovat data z předchozího formuláře.
WertriK
Profil *
V tech vedrech me napadlo toto;
Udelat si tam vlastni policko "zpet" a predavat POSTEM (treba) promennou "step".

a misto

if(!isset($_SESSION[promenna1])) {
// zobraz formular1
<input type="hidden" name="step" value="2"> - pouze příklad jak by jsi to mohl předávat
}

if(!isset($_SESSION[promenna2]) && isset($_SESSION[promenna1])) {
// zobraz formular 2
<input type="hidden" name="step" value="3">
}

by jsi mel

switch($step):
case "1":
// zobraz formular 1
break;
case "2":
// zobraz formular 2
break;
endswitch;

To by slo, nebo se mylim ? - Jestli se mylim, tak to vysledek tech 35 stupnu....
kudlanka
Profil *
To mě také napadlo, nakonec řeším to tak, že jsem si doplnil hidden proměnnou do formulářú a podle toho jakou obsahuje hodnotu provádím unset($_SESSION[promenna]), ale příjde mi to dost krkolomné...

Myslím, že někde dělám něco špatně a nemohu příjít na to kde a proč.
Toto téma je uzamčeno. Odpověď nelze zaslat.