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
Uchovávej ty hodnoty v session nebo cookie.
pema01
Profil
jo to session mě taky napadlo, tak to zkusím
Martin02
Profil
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
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
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ů.
pema01
Profil
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;
v tomto souboru nahrávám tedy otázky do $_SESSION, které vypisuji a vypisují se správně. Jenže pak v jiném souboru ouha.
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
(pokud by bylo pořadí otázek generováno náhodně) informace o pořadí otázek:
// 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
session_start() mám všude, ale tvá myšlenka není vůbec k zahození... Je to úspornější :-)
mimochodec
Profil
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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