Reklama
Strona 2 z 2 PierwszaPierwsza 12
Pokazuje wyniki od 16 do 17 z 17

Temat: PHP - pomoc w rozszerzeniu opcji.

  1. #16
    Avatar Zakon
    Data rejestracji
    2011
    Położenie
    Bydgoszcz/Katowice
    Wiek
    29
    Posty
    1,888
    Siła reputacji
    14

    Domyślny

    Mógłby ktoś pomóc to ogarnąć? Zostało mi mało czasu, a fajny patent z tymi szczegółami.

  2. #17
    Avatar Killavus
    Data rejestracji
    2005
    Położenie
    Wrocław
    Wiek
    32
    Posty
    915
    Siła reputacji
    19

    Domyślny

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

    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

  3. Reklama
Reklama

Informacje o temacie

Użytkownicy przeglądający temat

Aktualnie 1 użytkowników przegląda ten temat. (0 użytkowników i 1 gości)

Podobne tematy

  1. Odpowiedzi: 2
    Ostatni post: 15-06-2016, 23:28
  2. Matura z matematyki i fizyki na rozszerzeniu.
    Przez Ikkaku w dziale Szkoła i nauka
    Odpowiedzi: 12
    Ostatni post: 09-05-2014, 00:11
  3. cofniecie opcji dysku z pendrive'a
    Przez Pytoo w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 1
    Ostatni post: 28-04-2014, 19:03
  4. Skrypt PHP - przesyłanie danych z formularza php do pliku .txt
    Przez Żarówa2SR w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 1
    Ostatni post: 24-10-2012, 17:06
  5. Nie mogę ustawić opcji DirectX9
    Przez Toxik w dziale Sprzęt i oprogramowanie
    Odpowiedzi: 4
    Ostatni post: 04-04-2012, 08:06

Zakładki

Zakładki

Zasady postowania

  • Nie możesz pisać nowych tematów
  • Nie możesz pisać postów
  • Nie możesz używać załączników
  • Nie możesz edytować swoich postów
  •