Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CSS][PHP] Szablon wynikowy pól wyboru typu radio formualrza
Forum PHP.pl > Forum > Przedszkole
sylwekb
Witam

Czy ktoś ma pomysł jak wykonać szablon wynikowy z formularza ze 180 pytaniami, są zawsze 4 odpowiedzi A, B, C, D tylko jedna odpowiedź prawidłowa typu radio, trzy odpowiedzi są nieprawidłowe. Chodzi mi głównie jak wygenerować automatycznie te kwadraciki po zaznaczeniu radio odpowiedniej odpowiedzi A, B, C lub D?





lukasz108min
Gdy ja pisałem coś takiego (tylko była możliwość więcej niż jednej poprawnej odpowiedzi) to w zapleczu porównywałem id wybranych odpowiedzi z id poprawnych odpowiedzi. W tym przypadku można zrobić podobnie, będzie nawet prościej bo wystarczy porównywać z jedną wartością a nie całą tablicą.
sylwekb
Możesz podpowiedzieć jak to zrobiłeś i rzucić przykładowy kod z wystylizowaniem jednej grupy radio z zaznaczeniem? Szukam na ten temat w sieci ale nie mogę znaleźć.
emstawicki
Jaki format wejściowy danych?
Jaki format wyjściowy - czyli sposób prezentacji? (tabela w html, obraz?)
sylwekb
Format wejściowy czyli jak rozumiem chodzi Ci to co mam w kodzie formularza? Dla jednego pytania z 4 odpowiedziami radio dałem takie przykładowe pytanie:

  1. <div class="form-group gcore-form-row" id="form-row-radio1"><label for="radio1" class="control-label gcore-label-left gcore-label-checkbox">1. Jak się nazywasz?</label>
  2. <div class="gcore-input gcore-display-table" id="fin-radio1"><div class="gcore-multiple-column" id="fclmn1"><div class="gcore-radio-item" id="fitem1"><input name="radio1" id="radio1" value="1" class="validate['group:18'] A" title="" style="" data-load-state="" data-tooltip="" type="radio" />
  3. <label class="control-label gcore-label-checkbox" for="radio1">a) Dobrze.</label></div>
  4. <div class="gcore-radio-item" id="fitem2"><input name="radio1" id="radio11" value="2" class="validate['group:18'] A" title="" style="" data-load-state="" data-tooltip="" type="radio" />
  5. <label class="control-label gcore-label-checkbox" for="radio11">b) Anna Nowak.</label></div>
  6. <div class="gcore-radio-item" id="fitem3"><input name="radio1" id="radio12" value="3" class="validate['group:18'] A" title="" style="" data-load-state="" data-tooltip="" type="radio" />
  7. <label class="control-label gcore-label-checkbox" for="radio12">c) Warszawa.</label></div>
  8. <div class="gcore-radio-item" id="fitem4"><input name="radio1" id="radio13" value="4" class="validate['group:18'] A" title="" style="" data-load-state="" data-tooltip="" type="radio" />
  9. <label class="control-label gcore-label-checkbox" for="radio13">d) Dziękuję.</label></div></div></div></div>



Chyba prościej będzie zaprezentować format wyjściowy w tabeli
mariolita
na szybko przygotowałem coś takiego, jak ci bedzie odpowiadal to jeszcze dopracujemy i uproscimy troche. Jak cos to wyjasnie jak ja bym rozwiazal sprawe z pytaniami (dość prosto).

http://textuploader.com/58uqj -> przetestuj kod na przykład na http://phpfiddle.org

sylwekb
Dziękuję za kod ale trochę nie o to chodzi
Może opiszę scenariusz wykonania formularza typu multipage - testu poziomującego z języka polskiego z obowiązkiem zaznaczenia radio na stronie, który już mam przygotowany w Joomla 3.6.2, komponent Chronoforms do tworzenia formularzy
http://fotofantazja.art.pl/testpoziomujacy...est-poziomujacy

1. Strona podanie danych osobowych
2-19 Strony testu - na każdej stronie jest po 10 pytań czyli w sumie 180 pytań wszystkie z obowiązkiem zaznaczenia, 4 odpowiedzi typu radio, zawsze jedna prawidłowa, 3 nieprawidłowe. Na każdej z tych stron musi być możliwość kontynuacji testu lub wysłania testu.

Na e-mail wysyłana wiadomość w postaci html z zaznaczonymi kwadracikami / odpowiedziami na poszczególne 180 pytań oraz podanie poziomu do którego się zakwalifikował np A0. Czy można w przypadku odpowiedzi prawidłowych ustawić jakiś ptaszek, a dla nieprawidłowych odpowiedzi np X?

Czy można do niego dostosować Twój szablon oraz dołączyć funkcjonalność liczenia sumy punktów jak na powyżej przedstawionym zrzucie i przydzielenia wraz z ilością uzyskanych punktów do odpowiedniej grupy poziomu wg poniższego schematu?

SPRAWDZANIE TESTU

Na każdy trymestr przypada 10 pytań. Wypełniający formularz musi mieć 6 poprawnych odpowiedzi aby uznać trymestr za zaliczony.

POZIOM PYTANIA
A0 1-10 strona 2 formularza multipage
A1-1 11-20 strona 3 formularza multipage
A1-2 21-30 strona 4 formularza multipage
A1-3 31-40 strona 5 formularza multipage
A2-1 41-50 strona 6 formularza multipage
A2-2 51-60 strona 7 formularza multipage
A2-3 61-70 strona 8 formularza multipage
B1-1 71-80 strona 9 formularza multipage
B1-2 81-90 strona 10 formularza multipage
B1-3 91-100 strona 11 formularza multipage
B2-1 101-110 strona 12 formularza multipage
B2-2 111-120 strona 13 formularza multipage
B2-3 121-130 strona 14 formularza multipage
B2-4 131-140 strona 15 formularza multipage
C1-1 141-150 strona 16 formularza multipage
C1-2 151-160 strona 17 formularza multipage
C1-3 161-170 strona 18 formularza multipage
C1-4 171-180 strona 19 formularza multipage

Jedna wątpliwość - czy możemy tak zabezpieczyć ten skrypt, by osoba, która np. przez 17 zakładek nie odpowie poprawnie na żadne pytanie, a na 18 zakładce będzie miała wszystkie odpowiedzi poprawne nie została zakwalifikowana jako C1.4? Jednym słowem czy istnieje możliwość dodatkowego warunku który polegałbym na tym, że:
np. na trzeciej stronie mam 7 odpowiedzi dobrych - awansuje na kolejny poziom (spełniam warunek: >5) o ile na poprzedniej zakładce miałem >5 poprawnych odpowiedzi?
pewnie to mało prawdopodobne, by ktoś robił byki w prostych pytaniach, a był geniuszem w trudnych, niemniej można by ewentualnie rozważyć czy istnieje możliwość takiego zabezpieczenia. Mam nadzieję, że teraz jasno wszystko opisałem.

Proszę spojrzeć czy moglibyśmy zastosować dla poszczególnych podstron sumowanie i przydzielanie dla poszczególnych poziomów?

  1.  
  2. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    $form->data['radio1'] = 3
  3.     $form->data['radio2'] = 2
  4.     $form->data['radio3'] = 1
  5.     . . .<!--c2--></div><!--ec2-->
  6.  
  7.  
  8. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  9.     $score = 0;
  10.     if ( $form->data['radio1'] == 3 ) [
  11.       $score++;
  12.     }
  13.     if ( $form->data['radio2'] == 1 ) [
  14.       $score++;
  15.     }
  16.     if ( $form->data['radio3'] == 4 ) [
  17.       $score++;
  18.     }
  19.     $form->data['score'] += $score;
  20.     ?><!--c2--></div><!--ec2-->
  21.  
  22. Page 2 of 19 - level A0 questions 1-10
  23.  
  24. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  25.     if ( $form->data['points'] > 0 && $form->data['points'] < 6 ) {
  26.       $form->data['group'] = 'A.0';
  27.     } else if ( $form->data['points'] > 5 && $form->data['points'] < 10 )
  28.       $form->data['group'] = 'A.1.1';
  29.     }
  30.     ?><!--c2--></div><!--ec2-->
  31.  
  32. Next page
  33.  
  34. Page 3 of 19 - level A1.1 questions 11-20
  35.  
  36. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  37.     if ( $form->data['points'] > 0 && $form->data['points'] < 12 ) {
  38.       $form->data['group'] = 'A.1.1';
  39.     } else if ( $form->data['points'] > 11 && $form->data['points'] < 20 )
  40.       $form->data['group'] = 'A.1.2';
  41.     }
  42.     ?><!--c2--></div><!--ec2-->
  43.  
  44. Next page
  45.  
  46. Page 4 of 19 - level A1.2 questions 21-30
  47. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  48.     if ( $form->data['points'] > 0 && $form->data['points'] < 18 ) {
  49.       $form->data['group'] = 'A.1.2';
  50.     } else if ( $form->data['points'] > 17 && $form->data['points'] < 30 )
  51.       $form->data['group'] = 'A.1.3';
  52.     }
  53.     ?><!--c2--></div><!--ec2-->
  54.  
  55. Next page
  56.  
  57. Page 5 of 19 - level A1.3 questions 31-40
  58.  
  59. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  60.     if ( $form->data['points'] > 0 && $form->data['points'] < 24 ) {
  61.       $form->data['group'] = 'A.1.3';
  62.     } else if ( $form->data['points'] > 23 && $form->data['points'] < 40 )
  63.       $form->data['group'] = 'A.2.1';
  64.     }
  65.     ?><!--c2--></div><!--ec2-->
  66.  
  67. Next page
  68.  
  69. Page 6 of 19 - level A2.1 questions 41-50
  70.  
  71. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  72.     if ( $form->data['points'] > 0 && $form->data['points'] < 30 ) {
  73.       $form->data['group'] = 'A.2.1';
  74.     } else if ( $form->data['points'] > 29 && $form->data['points'] < 50 )
  75.       $form->data['group'] = 'A.2.2';
  76.     }
  77.     ?><!--c2--></div><!--ec2-->
  78.  
  79. Next page
  80.  
  81. Page 7 of 19 - level A2.2 questions 51-60
  82.  
  83. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  84.     if ( $form->data['points'] > 0 && $form->data['points'] < 36 ) {
  85.       $form->data['group'] = 'A.2.2';
  86.     } else if ( $form->data['points'] > 35 && $form->data['points'] < 60 )
  87.       $form->data['group'] = 'A.2.3';
  88.     }
  89.     ?><!--c2--></div><!--ec2-->
  90.  
  91. Next page
  92.  
  93. Page 8 of 19 - level A2.3 questions 61-70
  94.  
  95.  
  96. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  97.     if ( $form->data['points'] > 0 && $form->data['points'] < 42 ) {
  98.       $form->data['group'] = 'A.2.3';
  99.     } else if ( $form->data['points'] > 41 && $form->data['points'] < 70 )
  100.       $form->data['group'] = 'B.1.1';
  101.     }
  102.     ?><!--c2--></div><!--ec2-->
  103.  
  104. Next page
  105.  
  106. Page 9 of 19 - level B1.1 questions 71-80
  107.  
  108. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  109.     if ( $form->data['points'] > 0 && $form->data['points'] < 48 ) {
  110.       $form->data['group'] = 'B.1.1';
  111.     } else if ( $form->data['points'] > 47 && $form->data['points'] < 80 )
  112.       $form->data['group'] = 'B.1.2';
  113.     }
  114.     ?><!--c2--></div><!--ec2-->
  115.  
  116. Next page
  117.  
  118. Page 10 of 19 - level B1.2 questions 81-90
  119.  
  120. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  121.     if ( $form->data['points'] > 0 && $form->data['points'] < 54 ) {
  122.       $form->data['group'] = 'B.1.2';
  123.     } else if ( $form->data['points'] > 53 && $form->data['points'] < 90 )
  124.       $form->data['group'] = 'B.1.3';
  125.     }
  126.     ?><!--c2--></div><!--ec2-->
  127.  
  128. Next page
  129.  
  130. Page 11 of 19 - level B1.3 questions 91-100
  131.  
  132. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  133.     if ( $form->data['points'] > 0 && $form->data['points'] < 60 ) {
  134.       $form->data['group'] = 'B.1.3';
  135.     } else if ( $form->data['points'] > 59 && $form->data['points'] < 100 )
  136.       $form->data['group'] = 'B.2.1';
  137.     }
  138.     ?><!--c2--></div><!--ec2-->
  139.  
  140. Next page
  141.  
  142. Page 12 of 19 - level A2.1 questions 101-110
  143.  
  144. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  145.     if ( $form->data['points'] > 0 && $form->data['points'] < 66 ) {
  146.       $form->data['group'] = 'B.2.1';
  147.     } else if ( $form->data['points'] > 65 && $form->data['points'] < 110 )
  148.       $form->data['group'] = 'B.2.2';
  149.     }
  150.     ?><!--c2--></div><!--ec2-->
  151.  
  152. Next page
  153.  
  154. Page 13 of 19 - level B2.2 questions 111-120
  155.  
  156. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  157.     if ( $form->data['points'] > 0 && $form->data['points'] < 72 ) {
  158.       $form->data['group'] = 'B.2.2';
  159.     } else if ( $form->data['points'] > 71 && $form->data['points'] < 120 )
  160.       $form->data['group'] = 'B.2.3';
  161.     }
  162.     ?><!--c2--></div><!--ec2-->
  163.  
  164. Next page
  165.  
  166. Page 14 of 19 - level B2.3 questions 121-130
  167.  
  168. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  169.     if ( $form->data['points'] > 0 && $form->data['points'] < 78 ) {
  170.       $form->data['group'] = 'B.2.3';
  171.     } else if ( $form->data['points'] > 77 && $form->data['points'] < 130 )
  172.       $form->data['group'] = 'B.2.4';
  173.     }
  174.     ?><!--c2--></div><!--ec2-->
  175.  
  176. Next page
  177.  
  178. Page 15 of 19 - level B2.4 questions 131-140
  179.  
  180. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  181.     if ( $form->data['points'] > 0 && $form->data['points'] < 84 ) {
  182.       $form->data['group'] = 'B.2.4';
  183.     } else if ( $form->data['points'] > 83 && $form->data['points'] < 140 )
  184.       $form->data['group'] = 'C.1.1';
  185.     }
  186.     ?><!--c2--></div><!--ec2-->
  187.  
  188. Next page
  189.  
  190. Page 16 of 19 - level C1.1 questions 141-150
  191.  
  192. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  193.     if ( $form->data['points'] > 0 && $form->data['points'] < 90 ) {
  194.       $form->data['group'] = 'C.1.1';
  195.     } else if ( $form->data['points'] > 89 && $form->data['points'] < 150 )
  196.       $form->data['group'] = 'C.1.2';
  197.     }
  198.     ?><!--c2--></div><!--ec2-->
  199.  
  200. Next page
  201.  
  202. Page 17 of 19 - level C1.2 questions 151-160
  203.  
  204. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  205.     if ( $form->data['points'] > 0 && $form->data['points'] < 96 ) {
  206.       $form->data['group'] = 'C.1.2';
  207.     } else if ( $form->data['points'] > 95 && $form->data['points'] < 160 )
  208.       $form->data['group'] = 'C.1.3';
  209.     }
  210.     ?><!--c2--></div><!--ec2-->
  211.  
  212. Next page
  213.  
  214. Page 18 of 19 - level C1.3 questions 161-170
  215.  
  216. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  217.     if ( $form->data['points'] > 0 && $form->data['points'] < 102 ) {
  218.       $form->data['group'] = 'C.1.3';
  219.     } else if ( $form->data['points'] > 101 && $form->data['points'] < 170 )
  220.       $form->data['group'] = 'C.1.4';
  221.     }
  222.     ?><!--c2--></div><!--ec2-->
  223.  
  224. Next page
  225.  
  226. Page 19 of 19 - level C1.4 questions 171-180
  227. <!--c1--><div class='codetop'>Kod</div><div class='codemain'><!--ec1-->    <?php
  228.     if ( $form->data['points'] > 0 && $form->data['points'] < 108 ) {
  229.       $form->data['group'] = 'C.1.4';
  230.     } else if ( $form->data['points'] > 107 && $form->data['points'] < 180 )
  231.       $form->data['group'] = 'C2';
  232.     }
  233.     ?><!--c2--></div><!--ec2-->
  234.  



Masz pomysł jak dokładnie zrobić coś takiego?
mariolita
OK. Może od początku. Ja bym zrobił tak:

W bazie danych (między innymi byłyby kolumny: pytanie, odpowiedz1, odpowiedz2, odpowiedz3, odpowiedz_prawidlowa).

Przy załadowaniu strony/trymestu na przykład pierwsza strona/trymestr chcę aby mi wyciągnął pierwsze dziesięć czyli na przykład: select * from pytania LIMIT 0, 10 ORDER BY id DESC (to tylko przykład)

teraz bym zastosował while`a i zmieszał pytania do każdej odpowiedzi ale zapisując prawidłowe odpowiedzi w takim ciągu na przykład: ABCADBCACD i to zapisał na przykład w sesji czy ciastkach i po zatwierdzeniu zbierasz odpowiedzi z dziesięciu pytań czyli znow będziesz miał ciąg dziesięciu liter (chyba że nie zablokujesz tej możliwości)

i teraz whilem bym porównał litery pierwsza do pierwszej, drugą do drugiej itd itp;

zmienna na przykład błąd definiujesz na 0 i każda porównana pozytywnie litera to + a negatywna to -

w taki sposób będziesz miał ile prawidłowych odpowiedzi jest i w ten sposób też nie bedzie możliwości ściągania
sylwekb
Z założeniem kolumn w bazie danych nie będzie problemu ale z napisaniem tego kodu to dla mnie jest czarna magia.
mariolita
jeśli odpowiada ci moj tok myślenia to mogę wieczorem posiedzieć i napisac co nieco
sylwekb
Bardzo bym prosił. Czy spojrzałeś na projekt pytań i odpowiedzi zamieszczonych w linku? Jeśli potrzeba to dam Ci dostęp do panelu administracyjnego CMS-a i warstwy programistycznej gdzie się zamieszcza skrypty żeby wszystko było spójne z tymi pytaniami jeśli tak się da zrobić? W zasadzie pytania i odpowiedzi z testu się nie zmienią tylko została najtrudniejsza rzecz czyli sprawdzanie i przydzielanie do grup oraz ten szablon z kwadracikami i przydzieleniem do grupy np A0, A.1.1. itp, który ma być wysyłany na e-mail jako potwierdzenie wypełnienia i do admina.

Jeszcze napisz jakie założyć tabele i kolumny w phpmyadminie jeśli potrzeba. Czy tylko te które napisałeś czy jeszcze jakieś?
mariolita
czy taki test bedzie mozna wypelnic tylko raz i czy bedą rozne zestawy pytań?

jesli jeden zestaw to bym stworzyl dwie tabele, jedną z pytaniami/odpowiedziami (na przykład: pytanie, odpowiedzNiepoprawna1, odpowiedzNiepoprawna2, odpowiedzNiepoprawna3, odpowiedzPoprawna)

a druga tabela powinna chyba zawierać użytkowników i zdobyte punkty czyli na przykład: imię, nazwisko, punktyZaTrymestr1, dataWypelnieniaTestuTrymestr1, itd itp - w zależności co potrzebujesz i na przykład puste pole w punktyZaTrymestr1 będzie oznaczało że użytkownik nie brał udziału jeszcze w tym trymestrze lub jeśli będzie liczba/cyfra z punktami to znaczy że brał udział. Czy użytkownik będzie mógł powtórzyć test? czy użytkownik będzie mógł przejść do dalszego trymestru bez rozwiazania poprzedniego?

ja nie chce żadnych haseł, jak stworzysz tabele to mi screena pokaz na priv a ja co niego przygotuje i wyjaśnie ci jak działa, jak zainstalować żebyś za bardzo nie szedł na łatwizne bo się niczego nie nauczysz smile.gif
sylwekb
To będzie tylko jeden zestaw pytań wypełniany raz. Wszystkie 180 pytań podzielone na 18 stron już jest typu multipage. Jak może zauważyłeś na stronie to jest formularz typu multipage z możliwością wysłania zakończenia zaznaczania na kążdym poziomie chyba, że tak nie można to dopiero na koniec formularza multipage,
1 strona dane osobowe, potem 18 stron po 10 pytań na stronie, 4 odpowiedzi do wyboru, jedna prawidłowa 3 nieprawidłowe. Każda strona odpowiada kolejnemu poziomowi od A0 itp jak podałem wcześniej to się nie zmienia. Aby zaliczyć każdą stronę czyli poziom inaczej trymestr trzeba uzyskać minimum 6 pkt aż do końca formularza. Czyli punkty 1-5 nie zalicza poziomu, 6-10pkt zalicza. Każda prawidłowa odpowiedź 1 pkt, nieprawidłowa 0 pkt.
Wszystkie radio mam walidowane więc każdy powinien coś zaznaczyć nawet jeśli zaznaczy nieprawidłową odpowiedź. Za chwilę zakładam tabele i podeślę screen czy tak może być.

I najważniejsze jak wymienić dane między poszczególnymi stronami multipage formularza aby pamiętało i sumowało, że poprzedni trymestr został wypełniony?
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.