Autor | Zpráva | ||
---|---|---|---|
rian_man Profil |
#1 · Zasláno: 20. 4. 2012, 12:27:52
Dobrý den, poradil by mi někdo, jakým způsobem vyřešit následující problém? Mám formulář, ve kterém bude 20 náhodně vybraných otázek z databáze. Na začátku si vygeneruju náhodných 20 ID, které uložím do session. Poté se podle ID vytahují z otázky z databáze. Vše funguje v pořádku, dokud nedám vyhodnotit formulář, v tu chvíli se totiž vygenerují ID nová a tudíž se vypíšou jiné otázky. Jak ošetřit, aby ID vygenerovaná na začátku zůstala stejná po celou dobu a mohlo tak po odeslání dojít ke kontrole testu?? Děkuji za jakýkoliv tip.
<? session_start(); $spojeni=MySQL_Connect("localhost","e090110","heslo"); $databaze=MySQL_Select_DB("e090110",$spojeni); function generuj(){ $i=0; $sql1 = "SELECT * FROM test ORDER BY RAND () LIMIT 20"; $vypis1 = mysql_query($sql1) or die ("Chyba připojení!"); while($zaznam = MySQL_Fetch_Array($vypis1)){ $id[$i]= $zaznam['id']; $_SESSION[$i]=$id[$i]; $i++;}}?> <html><head></head><body> <? if (empty($_POST)){ for ( $i=0; $i<=20;$i++){ $sql2 = "SELECT * FROM test where id='$_SESSION[$i]'"; $vypis2 = mysql_query($sql2) or die ("Chyba připojení!"); while($zaznam = MySQL_Fetch_Array($vypis2)){ $otazky[$i] = $zaznam["otazka"]; $moznosti[$i] = array($zaznam["a"], $zaznam["b"], $zaznam["c"]); shuffle($moznosti[$i]); $a=$moznosti[$i][0]; $b=$moznosti[$i][1]; $c=$moznosti[$i][2];?> <form name='test' action='<?php echo $_SERVER['PHP_SELF'];?>' method='POST' > <fieldset id="radia"><legend id="otazka"><b><?echo $otazky[$i]?></b></legend> <input type="radio" name="<?echo $_SESSION[$i]?>" value="<?echo $a?>"><?echo $a?> <input type="radio" name="<?echo $_SESSION[$i]?>" value="<?echo $b?>"><?echo $b?> <input type="radio" name="<?echo $_SESSION[$i]?>" value="<?echo $c?>"><?echo $c?> </fieldset> <?}} ?> <input type="submit" name="odeslat" value="Vyhodnotit"><input type="reset" value="Vymazat"> </form> <? }else{ for ( $i=0; $i<=20;$i++) { $sql3 = "SELECT * FROM test where id='$_SESSION[$i]'"; $vypis3 = mysql_query($sql3) or die ("Chyba připojení!"); while($zaznam = MySQL_Fetch_Array($vypis3)){ $otazky[$i] = $zaznam["otazka"]; $spravne[$i] = $zaznam["a"]; echo $_SESSION[$i]." - "; echo $otazky[$i]."<br>"; echo $spravne[$i]."<br>";}}} ?> </body> </html> |
||
mimochodec Profil |
#2 · Zasláno: 20. 4. 2012, 12:33:04
rian_man:
„Jak ošetřit, aby ID vygenerovaná na začátku zůstala stejná po celou dobu a mohlo tak po odeslání dojít ke kontrole testu?“ Generuj ID jen v případě, že formulář nebyl odeslán. |
||
Hologos Profil |
#3 · Zasláno: 20. 4. 2012, 12:34:44
Nejlepší by bylo, kdyby sis místo 20 sessions udělal jednu, ve které bude pole.
Tzn $_SESSION['otazky'], v kódu před generováním pak zavoláš if(!isset($_SESSION['otazky'])) generuj(). Ve funkci generuj stačí přidat jeden index -> místo $_SESSION[$i] psát $_SESSION['otazky'][$i] |
||
rian_man Profil |
#4 · Zasláno: 20. 4. 2012, 13:40:49
mimochodec:
„Generuj ID jen v případě, že formulář nebyl odeslán.“ něco jsem zkusil, ale jak potom dostanu ta ID do části else, kde má být vyhodnocení?? |
||
rian_man Profil |
#5 · Zasláno: 20. 4. 2012, 15:46:16
už jsem na to příšel..děkuji za rady :)
|
||
Časová prodleva: 12 let
|
0