Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Zaznaczanie poprawnej odpowiedzi na zielono, a błednej na czerwowo
Bieliq
post 9.02.2010, 13:15:12
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.01.2010

Ostrzeżenie: (0%)
-----


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ć?

Ten post edytował Bieliq 9.02.2010, 13:21:27
Go to the top of the page
+Quote Post
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 19)
Kshyhoo
post 9.02.2010, 13:28:03
Post #2





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




W case z prawidłową odpowiedzią daj echo ze span w kolorze odpowiadającym wynikowi...


--------------------
Go to the top of the page
+Quote Post
Bieliq
post 9.02.2010, 13:36:54
Post #3





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.01.2010

Ostrzeżenie: (0%)
-----


a co przy opcji default?

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

jak to rozwiązać?
Go to the top of the page
+Quote Post
Kshyhoo
post 9.02.2010, 13:41:07
Post #4





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




A ma być w default?


--------------------
Go to the top of the page
+Quote Post
Bieliq
post 9.02.2010, 13:42:53
Post #5





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.01.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Kshyhoo
post 9.02.2010, 13:48:03
Post #6





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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).


--------------------
Go to the top of the page
+Quote Post
Bieliq
post 9.02.2010, 14:02:10
Post #7





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.01.2010

Ostrzeżenie: (0%)
-----


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..

Ten post edytował Bieliq 9.02.2010, 14:16:54
Go to the top of the page
+Quote Post
Kshyhoo
post 9.02.2010, 14:23:32
Post #8





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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. ?>


--------------------
Go to the top of the page
+Quote Post
Bieliq
post 9.02.2010, 14:51:44
Post #9





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.01.2010

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Bieliq 9.02.2010, 14:57:00
Go to the top of the page
+Quote Post
Kshyhoo
post 9.02.2010, 15:00:32
Post #10





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Obrazek ma dotyczyć pytania z quizu?
  1. Treść pytania?: <br /><img src="obraz.gif" alt="obraz" />`Odpowiedź 1`Odpowiedź 2`Odpowiedź 3`Odpowiedź 4


Ten post edytował Kshyhoo 9.02.2010, 15:06:59


--------------------
Go to the top of the page
+Quote Post
Bieliq
post 9.02.2010, 15:06:55
Post #11





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.01.2010

Ostrzeżenie: (0%)
-----


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?

Ten post edytował Bieliq 9.02.2010, 15:09:05
Go to the top of the page
+Quote Post
Kshyhoo
post 9.02.2010, 15:15:06
Post #12





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Tylko pytanie, kiedy Ty chcesz pokolorować odpowiedzi? Po odpowiedzi bezpośrednio? Jeżeli miało by tak być, to jedyne w JS.


--------------------
Go to the top of the page
+Quote Post
Bieliq
post 9.02.2010, 15:19:24
Post #13





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.01.2010

Ostrzeżenie: (0%)
-----


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",

Ten post edytował Bieliq 9.02.2010, 15:22:27
Go to the top of the page
+Quote Post
Kshyhoo
post 9.02.2010, 15:24:25
Post #14





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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...


--------------------
Go to the top of the page
+Quote Post
Bieliq
post 9.02.2010, 15:31:44
Post #15





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.01.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Kshyhoo
post 9.02.2010, 15:36:49
Post #16





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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ć...


--------------------
Go to the top of the page
+Quote Post
Bieliq
post 9.02.2010, 15:40:35
Post #17





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.01.2010

Ostrzeżenie: (0%)
-----


Hmm.. to już chyba troche za trudne dla mnie
Go to the top of the page
+Quote Post
Kshyhoo
post 9.02.2010, 15:51:04
Post #18





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




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...


--------------------
Go to the top of the page
+Quote Post
Bieliq
post 9.02.2010, 15:56:06
Post #19





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 30.01.2010

Ostrzeżenie: (0%)
-----


  1. print('<pre>POST: ');
  2. print_r($_POST);
  3. print('</pre>');


to mam podpiąć pod przycisk sprawdzania odpowiedzi, czy gdzie?
Go to the top of the page
+Quote Post
Kshyhoo
post 9.02.2010, 15:58:17
Post #20





Grupa: Opiekunowie
Postów: 3 855
Pomógł: 317
Dołączył: 4.01.2005
Skąd: że




Wklej to przed końcowym ?>, będziesz wiedział, co przechodzi w $_POST


--------------------
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 01:06