problem z sondą

0

mam problem ze zliczaniem poprawnych odpowiedzi w poniższym skrypcie (przerobiłem z wersji mysql).
w przypadku zapytania z limitem działa bez problemu:

 $display = sqlite_query($db, "SELECT * FROM tabela ORDER BY id LIMIT 4");

ale przy losowych pytaniach nie liczy poprawnie:

 $display = sqlite_query($db, "SELECT * FROM tabela ORDER BY RANDOM() LIMIT 4"); 
 
$db = sqlite_open('quiz.db'); 
//$display = sqlite_query($db, "SELECT * FROM tabela ORDER BY id LIMIT 4"); // okreslone rekordy z limitem   
$display = sqlite_query($db, "SELECT * FROM tabela ORDER BY RANDOM() LIMIT 4"); // losowe rekordy
if (!@$_POST['submit']) 
{ 
    echo "<form method=post action=''>";    
    echo "<table border=0>";     
    while ($row = sqlite_fetch_array($display)) 
    {       
        $id = $row["id"];    
        $question = $row["question"];    
        $opt1 = $row["opt1"];    
        $opt2 = $row["opt2"];    
        $opt3 = $row["opt3"];    
        $answer = $row["answer"];  
        echo "<tr><td colspan=3><br><b>$question</b></td></tr>";    
        echo "<tr><td><input type=radio name='q$id' value=\"$opt1\"> $opt1</td></tr><tr><td><input type=radio name='q$id' value=\"$opt2\"> $opt2</td></tr><tr><td><input type=radio name='q$id' value=\"$opt3\"> $opt3</td></tr>";
    }     
    echo "</table>";    
    echo "<input type='submit' value='See how you did' name='submit'>";    
    echo "</form>"; 
} 
elseif ($_POST['submit']) 
{      
    $score = 0;    
    $total = sqlite_num_rows($display);        
    while ($result = sqlite_fetch_array($display)) 
    {                            
        $answer = $result['answer'];            
        $q = "q$result[id]";                    
        $q = trim($q);
        if (@$_POST[$q] == $answer) 
        {                
            $score++;                 
        }        
    }        
    echo "<p align=center><b>You scored $score out of $total</b></p>";    
    echo "<p>";        
} 

w czym tkwi problem, nie mam już pomysłu, help !!!

1

Problem jest w tym, że po SUBMIT jest wykonywane jeszcze raz zapytanie i wtedy już jest inna kolejność rekordów, a nawet zupełnie inne rekordy to mogą być. Więc i odpowiedzi będą inne.
Musiałbyś sobie w tablicy zapisywać pary [idPytania, odpowiedz] (albo dwie tablice), a po submicie brać tylko te rekordy, które masz w idPytania. I dopiero wtedy porównywać odpowiedzi.

0

sorki, ale nie bardzo rozumiem, w przypadku zapytania bez random() - zliczanie działa bez zarzutu, tylko w przypadku zliczania losowych pytań daje błędne wartości. nie bardzo rozumiem więc jak by to miało wyglądać?

0

Kurde. Bez RANDOM() ZAWSZE zwraca w tej samej kolejności. Czyli 1, 2, 3, 4 (odpowiedzi kolejno to: A, B, C, D). Z RANDOM() może ci zwrócić: 4,2,7,3 (odpowiedzi wtedy będą: D,B,X,C). Więc jak chcesz to porównać?? Szczególnie tego X do czego porównasz...

Skąd wytrzasnąłeś te wartości i jakim cudem ???? przecież w bazie masz trzy możliwości odpowiedzi, a u ciebie wyskakują 4. CUD ?!

0

No cóż, skoro tak uważasz, że wolisz czepiać się szczegółów, a nie meritum, to ... sorry. Chciałem ci pomóc, ale to do ciebie nie dociera.

nie czepiam sie tylko jak mogły wyjść 4 losowe odpowiedzi skoro są 3 możliwe opcje w bazie? poza tym stawiam dobrego browara za szybką pomoc w rozwiązaniu problemu i poprawnie działający zmieniony kod :-)

0
shreker napisał(a)

nie czepiam sie tylko jak mogły wyjść 4 losowe odpowiedzi skoro są 3 możliwe opcje w bazie? (...)

To jest właśnie "czepianie się".

shreker napisał(a)

(...) poza tym stawiam dobrego browara za szybką pomoc w rozwiązaniu problemu i poprawnie działający zmieniony kod :-)

Marcin w pierwszym poście napisał jak poprawić błędny kod. Jeżeli czegoś nie rozumiesz to pytaj ale z głową. Jeżeli oczekujesz gotowego kodu to mamy tutaj dział PRACA, tam napisz.

edit: tak btw - pojedyncze znaki interpunkcji w zupełności wystarczają do zaznaczenia pytania.

0

z całym szacunkiem marcinsvr, ale nie czepiam się tylko pokazuje że nie mogły mu takie wyniki wyjść to po pierwsze, po drugie to oczekuję pomocy w powyższym temacie a nie nabijania bezużytecznych postów nic niewnoszących do sprawy :-)
jeżeli jest więc ktoś kto potrafi to zrobić to będę wdzięczny :-)

0

nieaktualne, problem rozwiazany

1 użytkowników online, w tym zalogowanych: 0, gości: 1