Bieliq
9.02.2010, 13:15:12
Witam, mam takie coś:
switch ($_POST[zad1])
case "1": c //* odpowiedź poprawna
$tab[0]=1
break;
default:
$tab[0]=0
break;
To jest prosty test wyboru z czterema możliwymi odpowiedziami, tylko jedna prawidłowa. Chciałbym żeby po sprawdzeniu całego testu, poprawnie zaznaczone odpowiedzi świeciły się na zielono, natomiast te złe na czerwono, jak to zrobić?
Kshyhoo
9.02.2010, 13:28:03
W case z prawidłową odpowiedzią daj echo ze span w kolorze odpowiadającym wynikowi...
Bieliq
9.02.2010, 13:36:54
a co przy opcji default?
wtedy będą na czerwowo wszystkie złe?
jak to rozwiązać?
Kshyhoo
9.02.2010, 13:41:07
A ma być w default?
Bieliq
9.02.2010, 13:42:53
Właściwie to nie wiem nawet czy dobrze użyć w tym wypadku switch'a, no ale tak to zrobilem.
Tak, bo jeśli wybierzemy inną opcję niż poprawną, np. A to żeby się świeciła na czerwono.
Kshyhoo
9.02.2010, 13:48:03
Jak chcesz to w case zrobić to:
case: poprawny;
span na ziolono
case: błędny;
span na czerwono
default możesz pominąć albo wstawić tam np. informację, że musi udzielić odpowiedzi - wszystko zależy od informacji przychodzącej, której nie znamy... bo nie wkleiłeś żadnego kodu. Pozostaje tylko zgadywać (wróżki mają w tym roku słabe branie).
Bieliq
9.02.2010, 14:02:10
Na początku było tak: 69 pytań, duuużo zmiennych
<?php
function spr() {
$kol = "";
$kol2 = "";
$kol3 = "";
...
...
$kol69 = "";
$zla = "";
$zla2 = "";
$zla3 = "";
$poprawne = 0;
switch($_POST['zad1'])
{
case "1":
$zla = "<font color=red>";
break;
case "2":
$zla2 = "<font color=red>";
break;
case "3":
$poprawne++;
$kol = "<font color=green>";
break;
case "4":
$zla3 = "<font color=red>";
break;
echo "<b><center>Część 1</b></center><br> <form action=index.php method=POST>
<b>Zadanie 1.</b><br><br>
Treść zadania 1<br>
<input type=radio name=zad1 value=1>$zla A. Odpowiedź 1.</font><br>
<input type=radio name=zad1 value=2>$zla2 B. Odpowiedź 2.</font><br>
<input type=radio name=zad1 value=3>$kol C. Odpowiedź 3.</font><br>
<input type=radio name=zad1 value=4>$zla3 D. Odpowiedź 4.</font><br><br>
//69 pytań, a nastepnie
<center><input type=submit value=SPRAWDŹ></center>
</form>";
echo "<br><center>ILOŚĆ POPRAWNYCH ODPOWIEDZI: $poprawne</center>";
return;
}
@spr();
?>
Ale uznałem że to jest kiepskie rozwiązanie, w dodatku jesli nie zostanie rowiązany cały test to podświetlanie tych odpowiedzi nie ma sensu. WIęc chciałem to przerobić na inny sposób żeby pokazywało mi po sprawdzeniu poprawną odpowiedź i ją podświetlało na zielono, a gdy zaznaczona błędna to na czerwono. Było za dużo tych zmiennych, więc zrobiłem to przy użyciu tabeli:
switch ($_POST[zad1])
case "1": c //* odpowiedź poprawna
$tab[0]=1
break;
default:
$tab[0]=0
break;
Ale nadal nie wiem jak to zrobić żeby działało jak chce. Jestem początkujący i nie umiem sobie z tym poradzić..
/ wiem że to jest strasznie kiepskie, ale nie śmiejscie się ze mnie..
Kshyhoo
9.02.2010, 14:23:32
Lepszym wyjściem było by pobieranie pytań z tablicy umieszczonych w pliku i oddzielonych jakimś znakiem. Wpierw jest pytanie, potem dobra odpwiedź i kilka błędnych.:
Cytat
Treść pytania 1?`Odpowiedź 1`Odpowiedź 2`Odpowiedź 3`Odpowiedź 4
Treść pytania 2?`Odpowiedź 1`Odpowiedź 2`Odpowiedź 3`Odpowiedź 4
Treść pytania 3?`Odpowiedź 1`Odpowiedź 2`Odpowiedź 3`Odpowiedź 4
Później ładujesz te pytania do skryptu quizu, masz gotowca i przeanalizuj go sobie dobrze:
<?
$pytania = file("test.txt");
$k5 = "Jesteś geniuszem!";
$k4 = "Bardzo dobrze.!";
$k3 = "Mogło być lepiej!";
$k2 = "Jesteś cienki!";
$k1 = "Totalne dno!";
$f = $_POST["f"];
$wyniki = $_POST["wyniki"];
if ($wyniki>0) {
$ile = count($pytania); $dobre=0; for ($o=0; $o<$ile ;$o++) if ($f[$o]==1) $dobre++;
$srednia = sprintf("%2d",($dobre/$ile)*100
); echo "<center>Poprawne odpowiedzi: $dobre z $ile. "; echo "Zaliczone $srednia procent testu.<p>"; if ($srednia<=25
) echo $k1; if ($srednia>25
&& $srednia<=50
) echo $k2; if ($srednia>50
&& $srednia<=75
) echo $k3; if ($srednia>75
&& $srednia<=99
) echo $k4; if ($srednia==100
) echo $k5; } else {
echo "<form action=\"quiz.php\" method=\"post\">"; echo "<input type=\"hidden\" name=\"wyniki\" value=\"1\" />"; for($i=0;$i<$ile;$i++) {
$tmp = $pytania[$nr];
$pytania[$nr] = $pytania[count($pytania)-1
]; $pytania[count($pytania)-1
] = $tmp; for ($b=1;$b<=count($pyt)-1;$b++) $odp[]="<input type=radio name=\"f[$i]\"
value=\"$b\" />$pyt[$b]<br />";
for($io=0;$io<$ileodp;$io++) {
$tmp=$odp[$nr];
$odp[$nr]=$odp[count($odp)-1
]; $odp[count($odp)-1
]=$tmp; }
}
echo "<center><input type=submit value=\" Gotowe! \" /></center></form>"; }
?>
Bieliq
9.02.2010, 14:51:44
To mi ratuje tyłek, choć chciałem to zrobić po swojemu. Dzięki wielkie, wytnę część z ocenianiem procentowym wyniku i powinno być ok.
Mimo to mam jeszcze jedno pytanie, czy da się dołączyć do tego obrazek? Np. gdy pytanie bazuje na .jpg'u

W którym to miejscu zrobić?
Już wiem, wielkie dzięki jeszcze raz za pomoc.
Kshyhoo
9.02.2010, 15:00:32
Obrazek ma dotyczyć pytania z quizu?
Treść pytania?: <br /><img src="obraz.gif" alt="obraz" />`Odpowiedź 1`Odpowiedź 2`Odpowiedź 3`Odpowiedź 4
Bieliq
9.02.2010, 15:06:55
Tak, już wiem że trzeba go wrzucić do test.txt w to miejsce gdzie ma się wyświetlić.
ps. da się przy użyciu tego skryptu pokolorować te odpowiedzi?
Kshyhoo
9.02.2010, 15:15:06
Tylko pytanie, kiedy Ty chcesz pokolorować odpowiedzi? Po odpowiedzi bezpośrednio? Jeżeli miało by tak być, to jedyne w JS.
Bieliq
9.02.2010, 15:19:24
No właśnie tak myślałem że się nie da.. To by nie miało sensu przy js, bo można by wydedukować ze źródła strony która odpowiedź jest prawidłowa..
Edit: nie ma sensu w tym momencie już kolorowanie, bo nie wyślwietla się treść pytania i odpowiedzi po kliknięciu w "GOTOWE",
Kshyhoo
9.02.2010, 15:24:25
Wcale nie. Zauważ, że dobra odpowiedź trzymana jest w tablicy $pyt[0] o indeksie 0. Wystarczy przejąć kliknięcie na tę opcję i kolorować. Mija się to jednak z celem, bo ktoś może źle odpowiedzieć, zaznaczy mu się na czerwono. Wtedy będzie próbował dalej, aż natrafi na zielono ;p Oczywiście, że można zablokować radio po oddaniu pierwszej odpowiedzi. Ale to wszystko JS...
Bieliq
9.02.2010, 15:31:44
Przydało by się żeby po kliknięciu w "gotowe" wyświetlało oprócz ilości poprawnych odpowiedzi równiez pytania, czyli cały plik test.txt, dopiero później można coś myśleć z wyróznieniem wybranej odpowiedzi.
No nie, blokowanie radio po kliknięciu mija się z celem, każdy przecież może się pomylić, albo zmienić zdanie i wtedy nie móglby juz zmienić swojej odpowiedzi.
Kshyhoo
9.02.2010, 15:36:49
Ale można po zatwierdzeniu formularza, wyświetlić pytania i udzielone odpowiedzi, odpowiednio je zaznaczając. Odpowiedzi możesz wrzucić np. w sesje i porównać...
Bieliq
9.02.2010, 15:40:35
Hmm.. to już chyba troche za trudne dla mnie
Kshyhoo
9.02.2010, 15:51:04
Dlaczego. Sesje nie są trudne. Ostatecznie możesz wrzucić też to w POST. Tak możesz sprawdzać, co masz w tablicach globalnych:
Otrzymasz tablicę zaznaczonych wyników, np.:
Cytat
[wyniki] => 1
[f] => Array
(
[0] => 1
[1] => 3
[2] => 2
[3] => 2
[4] => 2
)
Możesz również w podobny zapamiętać rozmieszczenie pytań i łatwo je porównać. potem już tylko kolorowanie - zielone, jeżeli zgodne, czerwone, niezgodne...
Bieliq
9.02.2010, 15:56:06
to mam podpiąć pod przycisk sprawdzania odpowiedzi, czy gdzie?
Kshyhoo
9.02.2010, 15:58:17
Wklej to przed końcowym ?>, będziesz wiedział, co przechodzi w $_POST
Bieliq
9.02.2010, 16:05:35
Wypluwa
Cytat
POST: Array
(
[quiz_php] => 1
[f] => Array
(
[0] => 3
)
)
Wydaje mi się że tu jest coś nie tak, co z tym dalej zrobic?
Kshyhoo
9.02.2010, 16:09:53
Dobrze pokazuje. Widzisz to, co przekazuje formularz, czyli "quiz_php" o wartości "1", czyli, ze formularz został wysłany i tablicę z pytaniami - jedno pytanie ([0] => 3). Dodaj kilka pytań a będziesz miał więcej wartości.
Bieliq
9.02.2010, 16:22:52
(
[quiz_php] => 1
(
[0] => 3
)
)
To jest na stronie z testem, można to ukryć?
Po kliknięciu w gotowe wyświetla to:
(
[wyniki] => 1
(
[0] => 1
[1] => 2
[2] => 3
[3] => 3
[4] => 4
[5] => 3
[6] => 4
[7] => 2
)
)
Rozumiem że to są opcje które zaznaczyłem, jak to porównać z tymi poprawnymi?\ i wyświetlić je z kolorkiem?
Kshyhoo
9.02.2010, 16:34:19
To wysyła formularz i odbiera skrypt. Ten kod używasz tylko do testów, żeby móc podpatrzeć, co przechodzi przez $_POST. Pomocne jest to do kodowania i debugowania. Jak widzisz, wyniki przekazywane są jako tablica, kluczem jest numer pytania a wartością zaznaczona odpowiedź. Trzeba by wyciągnąć i przekazać listę pytań (kolejność wyświetlana jest losowo) oraz listę odpowiedzi (również kolejność losowa). Wszystko to tablice...
Bieliq
10.02.2010, 08:40:40
Ok, czyli gdy:
Cytat
[nr_indexu] = 1
to odpowiedź zaznaczona jest prawidłowa.
zastosowanie triku z <pre>$_POST</pre> z użyciem $pytania wyrzuca tak jakby zawartość pliku test.txt, zamiast ułożonych pytań tak jak w teście (po kolei z polami radio). Jak wyświetlić te pytania jak z pierwszej strony?
Wiem już (chyba, nie wiem czy dobrze)jak porównać dwie tablice, np.
if($_POST == *)
{
$z = '<font color="green">Poprawna Odpowiedź</font>';
}
else
{
$z = '<center><font color="red">Niepoprawna Odpowiedź</font></center>';
}
Tylko nie wiem jaka tablica przechowuje poprawne odpowiedzi (*)oraz jak wyświetlić te pytania po sprawdzeniu.
Byłbym wdzięczny jeśli ktoś potrafił by mi pomóc. Z góry dziękuję.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.