Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Zaznaczanie poprawnej odpowiedzi na zielono, a błednej na czerwowo
Forum PHP.pl > Forum > Przedszkole
Bieliq
Witam, mam takie coś:

  1. switch ($_POST[zad1])
  2. case "1": c //* odpowiedź poprawna
  3. $tab[0]=1
  4. break;
  5. default:
  6. $tab[0]=0
  7. 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
W case z prawidłową odpowiedzią daj echo ze span w kolorze odpowiadającym wynikowi...
Bieliq
a co przy opcji default?

wtedy będą na czerwowo wszystkie złe?

jak to rozwiązać?
Kshyhoo
A ma być w default?
Bieliq
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
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
Na początku było tak: 69 pytań, duuużo zmiennych

  1. <?php
  2. function spr() {
  3.  
  4. $kol = "";
  5. $kol2 = "";
  6. $kol3 = "";
  7. ...
  8. ...
  9. $kol69 = "";
  10. $zla = "";
  11. $zla2 = "";
  12. $zla3 = "";
  13.  
  14. $poprawne = 0;
  15.  
  16. switch($_POST['zad1'])
  17. {
  18. case "1":
  19. $zla = "<font color=red>";
  20. break;
  21. case "2":
  22. $zla2 = "<font color=red>";
  23. break;
  24. case "3":
  25. $poprawne++;
  26. $kol = "<font color=green>";
  27. break;
  28. case "4":
  29. $zla3 = "<font color=red>";
  30. break;
  31.  
  32. echo "<b><center>Część 1</b></center><br>
  33. <form action=index.php method=POST>
  34. <b>Zadanie 1.</b><br><br>
  35. Treść zadania 1<br>
  36. <input type=radio name=zad1 value=1>$zla A. Odpowiedź 1.</font><br>
  37. <input type=radio name=zad1 value=2>$zla2 B. Odpowiedź 2.</font><br>
  38. <input type=radio name=zad1 value=3>$kol C. Odpowiedź 3.</font><br>
  39. <input type=radio name=zad1 value=4>$zla3 D. Odpowiedź 4.</font><br><br>
  40.  
  41. //69 pytań, a nastepnie
  42.  
  43. <center><input type=submit value=SPRAWDŹ></center>
  44. </form>";
  45.  
  46. echo "<br><center>ILOŚĆ POPRAWNYCH ODPOWIEDZI: $poprawne</center>";
  47.  
  48. return;
  49. }
  50.  
  51. @spr();
  52.  
  53. ?>


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:

  1. switch ($_POST[zad1])
  2. case "1": c //* odpowiedź poprawna
  3. $tab[0]=1
  4. break;
  5. default:
  6. $tab[0]=0
  7. 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
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:
  1. <?
  2. $pytania = file("test.txt");
  3.  
  4. $k5 = "Jesteś geniuszem!";
  5. $k4 = "Bardzo dobrze.!";
  6. $k3 = "Mogło być lepiej!";
  7. $k2 = "Jesteś cienki!";
  8. $k1 = "Totalne dno!";
  9.  
  10. $f = $_POST["f"];
  11. $wyniki = $_POST["wyniki"];
  12. srand((double)microtime()*1000000);
  13.  
  14. if ($wyniki>0) {
  15. $ile = count($pytania); $dobre=0;
  16. for ($o=0; $o<$ile ;$o++) if ($f[$o]==1) $dobre++;
  17. $srednia = sprintf("%2d",($dobre/$ile)*100);
  18. echo "<center>Poprawne odpowiedzi: $dobre z $ile. ";
  19. echo "Zaliczone $srednia procent testu.<p>";
  20. if ($srednia<=25) echo $k1;
  21. if ($srednia>25 && $srednia<=50) echo $k2;
  22. if ($srednia>50 && $srednia<=75) echo $k3;
  23. if ($srednia>75 && $srednia<=99) echo $k4;
  24. if ($srednia==100) echo $k5;
  25. echo "</center>";
  26. } else {
  27. echo "<form action=\"quiz.php\" method=\"post\">";
  28. echo "<input type=\"hidden\" name=\"wyniki\" value=\"1\" />";
  29. $ile = count($pytania);
  30. for($i=0;$i<$ile;$i++) {
  31. $nr = array_rand($pytania);
  32. $tmp = $pytania[$nr];
  33. $pytania[$nr] = $pytania[count($pytania)-1];
  34. $pytania[count($pytania)-1] = $tmp;
  35. $pyt = explode("`", array_pop($pytania));
  36. echo "<p><b>"; echo $i+1; echo ". $pyt[0] </b><br>";
  37. for ($b=1;$b<=count($pyt)-1;$b++)
  38. $odp[]="<input type=radio name=\"f[$i]\"
  39. value=\"$b\" />$pyt[$b]<br />";
  40. $ileodp=count($odp);
  41. for($io=0;$io<$ileodp;$io++) {
  42. $nr=array_rand($odp);
  43. $tmp=$odp[$nr];
  44. $odp[$nr]=$odp[count($odp)-1];
  45. $odp[count($odp)-1]=$tmp;
  46. echo array_pop($odp);
  47. }
  48. }
  49. echo "<center><input type=submit value=\" Gotowe! \" /></center></form>";
  50. }
  51. ?>
Bieliq
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 questionmark.gif W którym to miejscu zrobić?


Już wiem, wielkie dzięki jeszcze raz za pomoc.
Kshyhoo
Obrazek ma dotyczyć pytania z quizu?
  1. Treść pytania?: <br /><img src="obraz.gif" alt="obraz" />`Odpowiedź 1`Odpowiedź 2`Odpowiedź 3`Odpowiedź 4
Bieliq
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
Tylko pytanie, kiedy Ty chcesz pokolorować odpowiedzi? Po odpowiedzi bezpośrednio? Jeżeli miało by tak być, to jedyne w JS.
Bieliq
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
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
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
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
Hmm.. to już chyba troche za trudne dla mnie
Kshyhoo
Dlaczego. Sesje nie są trudne. Ostatecznie możesz wrzucić też to w POST. Tak możesz sprawdzać, co masz w tablicach globalnych:
  1. print('<pre>POST: ');
  2. print_r($_POST);
  3. print('</pre>');

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
  1. print('<pre>POST: ');
  2. print_r($_POST);
  3. print('</pre>');


to mam podpiąć pod przycisk sprawdzania odpowiedzi, czy gdzie?
Kshyhoo
Wklej to przed końcowym ?>, będziesz wiedział, co przechodzi w $_POST
Bieliq
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
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
  1. POST: Array
  2. (
  3. [quiz_php] => 1
  4. [f] => Array
  5. (
  6. [0] => 3
  7. )
  8.  
  9. )


To jest na stronie z testem, można to ukryć?

Po kliknięciu w gotowe wyświetla to:

  1. POST: Array
  2. (
  3. [wyniki] => 1
  4. [f] => Array
  5. (
  6. [0] => 1
  7. [1] => 2
  8. [2] => 3
  9. [3] => 3
  10. [4] => 4
  11. [5] => 3
  12. [6] => 4
  13. [7] => 2
  14. )
  15.  
  16. )


Rozumiem że to są opcje które zaznaczyłem, jak to porównać z tymi poprawnymi?\ i wyświetlić je z kolorkiem?
Kshyhoo
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
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.

  1. if($_POST == *)
  2. {
  3. $z = '<font color="green">Poprawna Odpowiedź</font>';
  4. }
  5. else
  6. {
  7. $z = '<center><font color="red">Niepoprawna Odpowiedź</font></center>';
  8. }


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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.