Autor | Zpráva | ||
---|---|---|---|
pema01 Profil |
Ahoj,
mám tady jeden z mnoha začátečnických dotazů. Mám stránku, kde se generují otázky, ovšem nevím, jak předávat informaci o již použitých otázkách do PHP souboru. Napadlo mě uchovávat každé použité ID otázky do pole, ze kterého poté budu ověřovat, zda již vybraná otázka v DB není v poli. Nicméně to by znamenalo, že bych musel dát do URL pole, což je asi nesmysl. Mohl bych generovat nějaký string a pak to parsovat z URL, ale není nějaký inteligentnější a elegantnější způsob? Díky za rady. |
||
mimochodec Profil |
#2 · Zasláno: 23. 1. 2015, 21:40:42
Uchovávej ty hodnoty v session nebo cookie.
|
||
pema01 Profil |
#3 · Zasláno: 23. 1. 2015, 21:49:49
jo to session mě taky napadlo, tak to zkusím
|
||
Martin02 Profil |
#4 · Zasláno: 23. 1. 2015, 22:01:47
pema01:
Jakým způsobem se generují ty otázky? To je máš uložené v databázi a prostě je uživateli popořadě ukazuješ? Pak by stačilo uchovávat jen třeba ID poslední zobrazené otázky... |
||
Corwin Profil |
ahoj, tohle se řeší trochu jinak. na první vstup na stránku vygeneruješ sadu otázek, náhodně seřazenou. informace o sadě si pak uložíš do nové tabulky a jedno ID dáš uživateli do sešny (pokud chceš aby když odejde a vrátí se mohl pokračovat) a nebo jenom do GETu (když chceš sadu zahodit pokud uživatel odejde).
při každém zodpovězení aktualizuješ tabulku a nabídneš příští nezodpovězenou otázku. (velice zjednodušeně) ideáně chceš tedy 2 nové tabulky (v jedné bude info o sadě a v druhé budou ID otázek dané sady, jejich pořadí a odpovědi) ale dá se to zvládnout i v jedné tabulce. |
||
pema01 Profil |
#6 · Zasláno: 25. 1. 2015, 15:04:24
tím "tabulka" myslíš vytvářet vždy pro každou hru specifickou tabulku v DB? nebo jen dvourozměrné pole... Já to mám ve 2 souborech, takže moc nevím, jak informovat další soubor o obsahu již naplněného pole... takže bude asi nejlepší ta tabulka v DB
|
||
Kubo2 Profil |
pema01:
„takže bude asi nejlepší ta tabulka v DB“ To IMHO rozhodne nebude. Maximálne stačí si ukladať údaje do jednej tabuľky. |
||
Keeehi Profil |
#8 · Zasláno: 25. 1. 2015, 20:15:11
pema01:
„vytvářet vždy pro každou hru specifickou tabulku v DB?“ Rozhodně ne. Správný návrh databáze vypadá tak, že ji programátor navrhne, vytvoří a tím celá manimulace se strukturou končí. Aplikace z ní čte a ukládá do ní data, ale nikdy nemění její strukturu přídáváním nebo ubíráním tabulek či sloupců. |
||
Časová prodleva: 7 dní
|
|||
pema01 Profil |
#9 · Zasláno: 1. 2. 2015, 14:18:18
Tak jsem se rozhodl ukládat tabulku do $_SESSION. Provádím to takto:
$i=0; while($data = mysql_fetch_assoc($proved)){ echo $_SESSION[$i]["ID"]=$data["ID"]; echo $_SESSION[$i]["obsah"]=$data["obsah"]; echo $_SESSION[$i]["spravne"]=$data["spravnaOdpoved"]; echo $_SESSION[$i]["0"]=$data["spatnaOdpoved1"]; echo $_SESSION[$i]["1"]=$data["spatnaOdpoved2"]; echo $_SESSION[$i]["2"]=$data["spatnaOdpoved3"]; echo $_SESSION[$i]["napovedaSlovni"]=$data["napovedaSlovni"]; echo $_SESSION[$i]["user"]=$data["user"]; echo " index: ".$i; echo "<br><br>"; $i++; } $_SESSION["kolo"]=0; Ve druhém souboru totiž volám např. $_SESSION[1]["ID"] ale nevypíše se mi vůbec nic. Kód je zde: echo $kolo = $_SESSION["kolo"]; echo $_SESSION[$kolo]["ID"]; echo "<br>"; echo $otazka["otazkaID"]=$_SESSION[$kolo]["ID"]; echo $otazka["obsah"]=$_SESSION[$kolo]["obsah"]; echo $otazka[0]=$_SESSION[$kolo]["spravne"]; echo $otazka[1]=$_SESSION[$kolo]["0"]; echo $otazka[2]=$_SESSION[$kolo]["1"]; echo $otazka[3]=$_SESSION[$kolo]["2"]; echo $spravnaOdpoved = $_SESSION[$kolo]["spravne"]; echo $otazka["napovedaSlovni"]=$_SESSION[$kolo]["napovedaSlovni"]; echo "<br><br>"; Jsou prostě prázdné. V čem je chyba? |
||
Dan Charousek Profil |
pema01:
Máš v tom druhém souboru nastartovanou session? Máš ji nastartovanou i v tom prvním? Není zbytečné do sešny ukládat všechny informace o otázce? Takhle bez hlubšího přemýšlení bych to řešil tím, že bych si uložil buďto: (v případě, že pořadí otázek je pevně dané) ID poslední otázky. $_SESSION['lastQuestion'] = 7; // a poté by se vytáhly otázky z db: SELECT * FROM otazky WHERE id >= 7 // v sešně by poté mohlo být uloženo pole $_SESSION['questionOrder'] = [3, 7, 9 , 6]; // a poté info o poslední otázce: $_SESSION['lastQuestion'] = 7; // tudíž by uživatel dostal otázky 7, 9 a 6 |
||
pema01 Profil |
#11 · Zasláno: 1. 2. 2015, 20:14:42
session_start() mám všude, ale tvá myšlenka není vůbec k zahození... Je to úspornější :-)
|
||
mimochodec Profil |
#12 · Zasláno: 1. 2. 2015, 20:54:01
pema01:
Proč tam máš všude to echo? Do session přiřadíš hodnotu takto: $_SESSION['xx'] = "hodnota";
Echo způsobí, že další pokus o přiřazení do session musí skončit chybou. |
||
pema01 Profil |
no to mám proto abych kontroloval, zda se to tam přidá...
tak jsem to obalamutil tak, že jsem nedával $_SESSION jako dvojrozměrné pole, což tedy asi nelze, ale pouze jednorozměrné se 2 indexy, takže v cyklu jsem naplnil pole takto: $_SESSION[$i."ID"]=$data["ID"]; to funguje. |
||
Časová prodleva: 10 let
|
0