[ Insider_m @ 14.10.2011. 09:31 ] @
Radim quiz u koje prikazujem prasanje, ispod svake prasanje po nekoliko odgovora kao radio buttons.
Logika je sljedna:

Code:
{foreach $question as $q}
       Question: {$q.question_name}
       <input type="hidden" name="question-id[]" value="{$q.question_id}" /> //ovdje cuvam id od prasanje
        {foreach $answer as $a}
                 {if $q.question_id == $a.question_id}
                          <input type="radio" name="answer-id{$q.question_id}" class="answer" value="{$a.answer_id}"/>{$a.answer_name}
                          <input type="hidden" name="correct[]" value="{$a.answer_correct}" />
                  {/if}
         {/foreach}
{/foreach}


u tabeli za svako prasanje imam polje answer_correct. njegovi vrjednosti bi mogao biti 1 i 0. svako tocno prasanje je 1.

u ovom slucaju, koliko vkupno odgovora ima od sva prasanja (pr. 4 prasanja i svako po 4 odgovora bi imao 16 elemenata u array) toliko puta bi se prosljedio pole hidden name="correct". a ja hocu da za svakog izabranog radio button od svako prasanje, samo u tom slucaju za istu tu vrjednost da se prosljedi i hidden polju i da uzmem 1 ili 0 odnosno dali je tacno ili netacno
[ dakipro @ 14.10.2011. 09:41 ] @
Ako dobro razumem sta ti treba, mozes JSom da setujes vrednost svakom hidden polju, odnosno samo menjas "disabled" u zavisnosti da li ti polje treba ili ne.
Inace, u PHPu mozes da filtriras sigurno poslata polja po IDju pitanja (tako sto ce hidden polje da ima za kljuc ID pitanja name="correct[{$q.question_id}]").
Mada iskreno ne vidim zasto uopste imas to hidden polje u formama ako ono ima bilo kakvu ulogu u odluci da li je odgovor ispravan ili ne. Te podatke cuvas ili u sesiji ako ti trebaju prilikom trenutnog prikaza, ili samo u bazi imas za svaki odgovor flag da li je tacan ili ne.
Ako te nisam dobro razumeo, pojasni malo sta tacno pokusavas da uradis, mozda moze problem i da se zaobidje
[ ColdKeyboard @ 14.10.2011. 09:44 ] @
Sta ti znaci prasanje?

Nemoj nikada ostavljati podatke na korisnickoj strani. Generisi neki jedinstveni ID za svakog korisnika koji ce biti kriptovan
sa recimo md5() algoritmom, onda taj key sacuvas u bazu u tabelu korisnika a korisniku upises cookie sa istim jedinstvenim ID-om.

Onda svaki put kada treba da vrsis neko racunanje (poslat je tacan/pogresan odgovor, novo pitanje, trajanje kviza i sl.) trazit ces u bazi
unos koji ima isti jedinstveni key kao sto korisnik ima u cookie-u i onda mijenjas taj unos.

Nema veze sto si ti polje za obiljezavanje tacnog odgovora stavio kao hidden, korisnik i dalje moze da uradi View-Source i da
iscita sva sakrivena polja i na osnovu njih uvijek da tacan odgovor. Zato pitanja i odgovore drzis u posebnoj tabeli i onda
kada korisnik da odgovor, on ti proslijedi njegov odgovor i redni broj pitanja u data bazi, onda ti u php-u provjeris da li je odgovor
tacan ili ne, osvjezis drugu tabelu gdje drzis koliko ko ima tacnih/pogresnih odgovora i to je to.
[ Insider_m @ 14.10.2011. 11:00 ] @
@dakipro
imam 4 tabele:

quiz: quiz_id, quiz_name
questions: quiz_id, question_id, question_name
answers: question_id, answer_id, answer_name, correct

results: user_id, quiz_id, question_id, answer_id, correct

za to sto si rjekao da postavim flag, to i imam u tabelu, pole 'correct' mogu da ima vrejdnosti 0 ili 1 (ako prasanje je tacno, 1)

quiz je prikazan na jedno stranu, i so $_POST['submit'] sva odgovora zapisujem u tabelu:

Code:

if(isset($_POST['submit-quiz'])) {
        foreach($_POST['question-id'] as $q_id) {
                $answer_id = $_POST['answer-id'.$q_id];
                $sql = "INSERT INTO results (user_id, quiz_id, question_id, answer_id,  correct)
                        VALUES ('$user->user_id', '" . $_GET['quiz_id'] . "', '$q_id', '$answer_id', 'TU MI FALI VRJEDNOST')";
                        $db->query($sql);
        }
}


nije mi jasno kako uzmeti ta vrjednost/flag od tabelu answers za proveru dali je odgovor tacan ili ne

i evo jos jedan put logiku prikazivanja (koristim smarty template engine)

Code:

{foreach $question as $q}
        Question {$q@iteration}: {$q.question_name}</p>
        <input type="hidden" name="question-id[]" value="{$q.question_id}" />
        {foreach $answer as $a}
              {if $q.question_id == $a.question_id}
                  <input type="radio" name="answer-id{$q.question_id}" class="answer" value="{$a.answer_id}"/><label>{$a.answer_name}</label>
               {/if}
         {/foreach}
{/foreach}


@ColdKeyboard
ja sam pomislio sa hidden da rjesim taj probljem ali sad vidim da tako nije ispravno
[ ivan.a @ 14.10.2011. 16:57 ] @
Nisam siguran da sam sve razumeo, ali poželjno je da proveru tačnih odgovora vršiš server-side, a ne client-side (mada možeš da koristiš javascript/ajax tehniku u kombinaciji sa .php call-om, što je možda najbolja varijanta)...

[Ovu poruku je menjao ivan.a dana 14.10.2011. u 18:12 GMT+1]
[ Zlatni_bg @ 15.10.2011. 02:52 ] @
Citat:
ColdKeyboard:
Nemoj nikada ostavljati podatke na korisnickoj strani. Generisi neki jedinstveni ID za svakog korisnika koji ce biti kriptovan
sa recimo md5() algoritmom, onda taj key sacuvas u bazu u tabelu korisnika a korisniku upises cookie sa istim jedinstvenim ID-om.


Samo bih se nadovezao na ovo, nemoj nikako da stavis da ti taj jedinstveni ID bude broj poput 1,2,3... vec uzmi neku rec, vezi je za neki broj, nesto vec smisli... i obavezno u cookie-ju cuvaj tako enkriptovan string... Jer ukoliko se nadje neko pametan i krene da radi md5 bruteforce svog korisnickog ID-a koji ce procitati iz svog kolacica, odmah ce naci pocetni ID i posle ce moci da "bude" bilo koji korisnik, jer je lako izmeniti sadrzaj cookie-ja. Moci ce manje-vise da ti napravi haos na sajtu. Ili jednostavno stavi da ti se taj ID generise tako sto se odredi nasumicno 20ak slova.