![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 19 Dołączył: 25.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Witam, mam następujący problem. Chciałbym zrobić quiz, w którym każde pytanie miałoby przynajmniej jedną (ale nie maksymalnie) dobrą odpowiedź).
Na przykład w quizie ze znajomości angielskiego dane mogłyby wyglądać tak: -------------------------------------------------------------------------- Pytanie: rzucać, Odpowiedź: to throw lub to cast Pytanie: śpiewać, Odpowiedź: to sing Pytanie: malować, Odpowiedź: to paint Pytanie: kupić: Odpowiedź: to buy lub to purchase lub to get -------------------------------------------------------------------------- Przykład może nieco naciągany, ale chodziło mi tylko o pokazanie idei. Doszedłem do wniosku, że najlepiej (najefektywniej) będzie przechowywać te dane w bazie w następującej postaci: ID-----Pytanie-----------Odpowiedź 1------rzucać-------------to throw 2------rzucać-------------to cast 3------śpiewać-----------to sing 4... itd. Czyli każda kombinacja pytanie/odpowiedź w osobnym rekordzie tej samej tabeli. Według mnie to najlepszy pomysł, ale jako że stawiam pierwsze kroki to bardzo możliwe, że się mylę. Chciałbym to teraz wyciągnąć z tej tabeli do zmiennej PHP w jakiejś łatwej do obsługi postaci. Najlepiej tak, żeby pytania się nie powtarzały a odpowiedzi nie poginęły. Bo mogę sobie na przykład zrobić: Kod SELECT * FROM tabela Wtedy pytania będą się powtarzać. Mogę taką tablicę obrobić potem w PHP, ale wydaje mi się to mało efektywne (najlepiej chyba aby jak najwięcej pracowała przy tym baza). Jak z kolei dam: Kod SELECT * FROM tabela GROUP by Pytanie to poginą mi odpowiedzi. A może w dwóch tabelach to jakoś rozmieścić, porobić jakieś złączenia? Znam już podstawy SQL i PHP, brakuje mi po prostu wyobraźni, jak to najefektywniej "rozegrać". Z góry dzięki za pomoc. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 220 Pomógł: 19 Dołączył: 25.04.2009 Ostrzeżenie: (0%) ![]() ![]() |
Dzięki za odpowiedzi.
Pomysł fifi209 na razie najbardziej do mnie przemawia. Jest na pewno dużo bliższy optimum (a może nawet jest optymalny - mam za małą wiedzę praktyczną żeby to w 100% stwierdzić). Co do ; i explode to nie napisałem w pierwszym poście, że będzie jeszcze edytor tych quizów gdzie użytkownik będzie wpisywał pytania i odpowiedzi. Tu może pojawić się problem z wrażliwością na ten znak oddzielający ( ; ) ale myślę, że będzie stosunkowo łatwy w obejściu. W uzupełnieniu napiszę jeszcze z grubsza jak to wszystko miało w zamyśle wyglądać żeby dać Wam jakieś pojęcie. Sporą część mam już zresztą oprogramowaną - chciałem po prostu pomysłu na optymalne rozwiązanie na linii baza/php. Tak więc mamy edytor tych quizów gdzie użytkownik może dodawać pytanie i odpowiedź do niego (domyślnie jedną, ale opcjonalnie więcej). Pomijam tu już identyfikatory poszczególnych quizów, tworzenie quizów itd - bo to w tym miejscu nieistotne i nie mam z tym problemu. Następnie użytkownik może "zagrać" w taki quiz. I nie wiem czy quiz to dobre słowo, bo nie jest to typowy test wyboru tylko wyświetla się pytanie i trzeba wpisać odpowiedź. Tak więc w bazie chce przechowywać tylko pytanie + poprawną odpowiedź (odpowiedzi). Użytkownik wpisuje swoją i skrypt je porównuje. A jeszcze bardziej szczegółowo wygląda to tak, że 1) użytkownik wybiera quiz, 2) skrypt łączy się z bazą i na podstawie id quizu wybiera id-y pytań (które są zapisywane w tablicy) 3) w trakcie grania w quiz z tablicy pobierany jest id pytania (metodą array_pop()) 4) na postawie id pytania pobierana jest z bazy treść pytania i odpowiedź (odpowiedzi) I właśnie w punkcie 4 pojawia się ten problem. Bo na razie mam to dla pojedynczej odpowiedzi i chciałbym zmienić na parę możliwych (ale nie jest to test wyboru, tylko otwarty!) Jeśli po tym uzupełnieniu coś Wam się jeszcze nasuwa to podzielcie się swoimi uwagami. Ten post edytował qrzysztof 25.04.2009, 16:07:10 |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 4 655 Pomógł: 556 Dołączył: 17.03.2009 Skąd: Katowice Ostrzeżenie: (0%) ![]() ![]() |
Co do ; i explode to nie napisałem w pierwszym poście, że będzie jeszcze edytor tych quizów gdzie użytkownik będzie wpisywał pytania i odpowiedzi. Tu może pojawić się problem z wrażliwością na ten znak oddzielający ( ; ) ale myślę, że będzie stosunkowo łatwy w obejściu. Jeśli po tym uzupełnieniu coś Wam się jeszcze nasuwa to podzielcie się swoimi uwagami. Odbierasz dane od użytkownika i zapisujesz np. Kod $zmienna = $_POST['pierwszy'].';'.$_POST['drugi']; Obok jeszcze czy to poprawna odpowiedź czy nie, za pomocą checkbox'ów. @topic Pomysł z like jest jak najbardziej nieudany. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Przy udzielaniu odpowiedzi dostarczaj skryptowi id pytania i niech ten pobierze odpowiedzi i jest exploduje i następnie wyszuka za pomocą in_array" title="Zobacz w manualu PHP" target="_manual |
|
|
![]() ![]() |
![]() |
Aktualny czas: 5.10.2025 - 12:29 |