Autor Zpráva
rian_man
Profil
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
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
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
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
už jsem na to příšel..děkuji za rady :)

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: