Mógłby ktoś pomóc to ogarnąć? Zostało mi mało czasu, a fajny patent z tymi szczegółami.
Wersja do druku
Mógłby ktoś pomóc to ogarnąć? Zostało mi mało czasu, a fajny patent z tymi szczegółami.
Hej.
Z racji Twojej "wyższej" potrzeby, przepisałem dla Ciebie Twój kod. Powinien teraz zwracać to, czego oczekujesz. Pisałem go bez sprawdzania, mogą być błędy składni - mam nadzieję, że jeżeli takie będą, to uda Ci się je poprawić.
Dorzucę parę uwag:
- Zawsze warto "wyciągać" powtarzalne kawałki programu i przekształcenia danych wejściowych w postaci funkcji. Nazwy funkcji powinny dotyczyć Twojej domeny problemu - pisząc np. aplikację dla komisu samochodowego, nie nazywaj funkcji sortującej po cenie samochodu "posortujTablicę", lecz "posortujSamochody".
- Korzystamy tutaj z konstrukcji foreach. Jest to przystosowana wersja pętli for, która operuje na kolekcjach - w tym wypadku tablicy.
- Wartość zwracana funkcji "sprawdzOdpowiedzi" to złożony typ danych. Staraj się zawsze modelować zwracane dane w podobny sposób - słownik (hash) jest dosyć wygodnym sposobem na tworzenie bardziej skomplikowanych typów danych - takich jak tutaj. Zwracamy tak naprawdę cztery odpowiedzi jednocześnie - liczbę błędnych i poprawnych odpowiedzi, oraz odpowiedzi użytkownika i poprawne odpowiedzi.
- Staraj się za wszelką cenę unikać mieszania do PHP elementów składni HTMLa. PHP powinien pracować na Twoich danych. Nie jest stworzony do generowania kodu HTML. W przypadku, gdy musisz wzbogacić stronę o elementy HTML, po prostu zakończ znacznik kodu PHP i zacznij pisać czysty HTML. Jest to czystsze i bardziej eleganckie rozwiązanie.
- Twój "kod HTML", o ile można go tak nazwać nie był poprawnym dokumentem HTML. Stworzyłem dla Ciebie poprawną strukturę.
A oto kod:
No i powodzenia z PHP. Po pewnym czasie stwierdzisz (całkiem zresztą słusznie), że PHP jest bardzo męczącym językiem i istnieją lepsze alternatywy używające wygodniejszych języków programowania, a realizujących podobne funkcje - przetwarzanie żądań Twoich użytkowników. Są to tzw. frameworki sieciowe.Kod PHP:<?php function poprawne($odpowiedz, $poprawna) { return $odpowiedz == $poprawna; } function sprawdzOdpowiedzi($tablicaOdpowiedzi) { /** * Tablica poprawnych odpowiedzi dla pytań. **/ $poprawneOdpowiedzi = Array(2,2,1,3,2,3,3,1,1,2,2,1,2,3,1,1,1,2,2,3,2,1,2,3,2,1,2,2,3,2); /** * Stwórzmy sobie słownik, który będzie nam reprezentował odpowiedź. **/ $wynik = Array( "odpowiedzi" => Array(), "poprawne" => $poprawneOdpowiedzi, "iloscBlednych" => 0, "iloscPoprawnych" => 0, ); foreach($poprawneOdpowiedzi as $indeks => $poprawnaOdpowiedz) { $klucz = "q" . strval($indeks+1); $wynik["odpowiedzi"][] = $_POST[$klucz]; if(poprawne($_POST[$klucz], $poprawnaOdpowiedz)) { $wynik["iloscPoprawnych"]++; } else { $wynik["iloscBlednych"]++; } } return $wynik; } function szczegolyRozwiniete() { return isSet($_GET['szczegoly']) && $_GET['szczegoly'] == 1; } $wynikTestu = sprawdzOdpowiedzi($_POST); ?> <!doctype html> <html> <head> <title>Wyniki Testu</title> <meta charset="UTF-8" /> </head> <body> <section class="results"> <p>Twój wynik to: <?php echo $wynikTestu["iloscPoprawnych"]; ?></p> <p>Liczba poprawnych odpowiedzi: <?php echo $wynikTestu["iloscPoprawnych"]; ?></p> <p>Liczba błędnych odpowiedzi: <?php echo $wynikTestu["iloscBlednych"]; ?></p> </section> <?php if(szczegolyRozwiniete()) { ?> <section class="details"> <ol> <?php foreach($wynikTestu["odpowiedzi"] as $indeks => $odpowiedz) { $wynikowyTekst = ""; $poprawnaOdpowiedz = $wynikTestu["poprawne"][$indeks]; if(poprawne($odpowiedz, $poprawnaOdpowiedz)) $wynikowyTekst = "<strong>Poprawnie.</strong> Odpowiedź: $odpowiedz"; else $wynikowyTekst = "<strong>Błędnie.</strong> Odpowiedź: $odpowiedz, Powinno być: $poprawnaOdpowiedz."; ?> <li><?php echo $wynikowyTekst; ?></li> <?php } ?> </ol> </section> <?php } else { ?> <section class="details"> <p><a href="?szczegoly=1">Pokaż szczegóły</a></p> </section> <?php } ?> </body> </html>
Niemniej jednak, życzę Ci wszystkiego dobrego na "programistycznej stronie życia" :).
Przydatne linki:
http://me.veekun.com/blog/2012/04/09...of-bad-design/
http://stackoverflow.com/questions/1...input-with-php (Trochę o walidacji [sprawdzaniu] danych, które wysyła Ci użytkownik. Ten kod akurat tego nie potrzebuje (za bardzo), aczkolwiek brakuje mu tego i jest to bardzo ważna rzecz.)
Pozdrawiam
Killavus