Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]Rozwiązywanie testu i system sprawdzania...
Forum PHP.pl > Forum > PHP
k0b3
Witam.

Mam do zrobienia system testów z języków obcych. Nie chce go opierać o mysql, nie wiem jak się do tego zabrać. Czytałem coś o tablicach, ale nie wiem jak to wykorzystać. Zrobiłem coś o własną marną wiedzę, wydaje mi się że kod sprawdzania można zamieścić w jednej linijce, a nie jak to ja zrobiłem winksmiley.jpg

Mam kilkanaście różnych pytań w takiej formie (sorki za idiotyczne pytania w "formularzu" poniżej, ale to ma tylko zobrazować zasadę działania) :

<form action.... >
1. Czy słońce jest gorące? |A ›|<- tu jest pole <select name="1">
A. Tak B.Nie

2. Wlazł |A ›| na płotek...
A. Piesek B.Kotek C.Mysz

|Sprawdź test|
</form>

Po kliknięciu sprawdź przechodzi mi do skryptu z systemem sprawdzenia...

  1. <?
  2. $test= $_GET['test'];
  3.  
  4.  
  5. if ($test=="de") {
  6.  
  7. $de1 = $_POST['1'];
  8. $de2 = $_POST['2'];
  9.  
  10. if($de1=='A') {
  11. echo gratulacje;
  12. $del1wyn = 1;
  13. } else {
  14. $del1wyn = 0;
  15. echo blad;
  16. }
  17.  
  18. if($de2=='B') {
  19. echo gratulacje;
  20. $del2wyn = 1;
  21. } else {
  22. $de21wyn = 0;
  23. echo blad;
  24. }
  25.  
  26. $wynik = (($del1wyn + $del2wyn)/2)*100;
  27.  
  28. echo $wynik.'%';
  29.  
  30. }
  31. ?>


Skrypt spełnia swoje założenia, ale wydaje mi się (jak już wspomniałem) za dużo kodu o coś tak małego.
Chciałbym aby skrypty sprawdzający zaznaczał mi poprawnie rozwiązane zadanie przy nim lub też jakiś krzyżyk przy błędnym rozwiązaniu...

Pozdrawiam i z góry dziękuje za pomoc smile.gif
rojmarek
no powinieneś sobie zrobić jakąś tablice, np:

zadania.php:
  1. <?php
  2. $zadania = array();
  3. $zadania[] = array(
  4. "question_begin" => "Czy słońce jest gorące?",
  5. "question_end" => "",
  6. "answers" => array(
  7. "A" => "TAK",
  8. "B" => "NIE"
  9. ),
  10. "correct" => "A"
  11. );
  12. $zadania[] = array(
  13. "question_begin" => "Wlazł ",
  14. "question_end" => " na płotek",
  15. "answers" => array(
  16. "A" => "kotek",
  17. "B" => "młotek"
  18. ),
  19. "correct" => "A"
  20. );
  21. ?>


taka tablice z pytaniami zapisuejesz sobie w mysql, albo w jakimś pliku, a potem ją zczytujesz...
pytania.php:
  1. <?php
  2. include('zadania.php');
  3. foreach ($zadania as $num=>$zad){
  4. echo ($num+1) . ". " . $zad['question_begin'] . "<select name='" . $num . "'>";
  5. foreach ($zad['answers'] as $key=>$answ){
  6. echo "<option value='" . $key . "'>" . $key . ". " . $answ . "</option>";
  7. }
  8. echo $zad['question_end'];
  9. }
  10. ?>


wyniki.php
  1. <?php
  2. include('zadania.php');
  3. foreach ($zadania as $num=>$zad){
  4. echo ($num+1) . ". " . $zad['question_begin'] . $zad['answers']['correct'] . $zad['question_end'];
  5. if ($_GET[$num] == $zad['answers']['correct']) {
  6. echo "OK";
  7. }
  8. else{
  9. echo "Źle! Twoja odpowiedz: " . $zad['answers'][$_GET[$num]];
  10. }
  11. }
  12. ?>


liczenie poprawnych, i dzielenie to juz sobie sam dopisz...
pozdr

edit:
nie ma tych przyciskow formularzy itp, no i nie spawdzane, ale powinno chodzic...
k0b3
cos nie tak... wyswietla sie tresć pierwszego pytania... Drugiego nie ma...
rojmarek
Cytat(kobemat @ 5.04.2007, 22:11:11 ) *
cos nie tak... wyswietla sie tresć pierwszego pytania... Drugiego nie ma...

widocznie jest błąd.
a probowales sam wymyslic co jest nietak?
podpowiem, ze pytanie drugie pokazuje sie w kodzie, jest tylko niewidoczne na stronie

pytania.php:
  1. <?php
  2. echo $zad['question_end'];
  3. ?>

zamień na
  1. <?php
  2. echo "</select>" . $zad['question_end'] . "<br />";
  3. ?>


edit:
w systemie jest jeszcze jeden błąd, ale w sumie z nim system moze działać...
k0b3
A można wiedzieć jaki?

Test źle jest sprawdzany... Czy jest konieczna metoda GET w sprawdzeniu? Można jakość tę funkcje zapisać metodą POST?

Gdy biorę metodą GET (przy którejkolwiek odpowiedzi) dostaje info:

Cytat
1. Czy słońce jest gorące?Zle! Twoja odpowiedz: TAK
2. Wlazl na plotekZle! Twoja odpowiedz: mlotek


Gdy biorę metodą POST, zawsze sie zgadzają...
rojmarek
Cytat(rojmarek @ 5.04.2007, 11:09:09 ) *
zadania.php:
  1. <?php
  2. if ($_GET[$num] == $zad['answers']['correct'])
  3. ?>

strasznie czlowieku leniwy jestes...
błąd jest w cytowanej linijce. przejrzyj strukturę w której trzymane są pytania
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.