Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odpowiednia strona w zależności od podanych wcześniej odpowiedzi.
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
Apox
Chciałem napisać stronę w formie testu wyboru, która po wybraniu odpowiednich odpowiedzi w formularzu i zatwierdzeniu odeśle do odpowiedniej strony zależnie od wcześniej wybranych odpowiedzi. Naszukałem się po sieci, ale nie znalazłem nic co by tak zadziałało.

Jak ktoś nie rozumie o co mi loto podam mały schemacik jak ja bym to widział:

Mamy n pytań z odpowiedziami... (jedna możliwa odpowiedź przy jednym pytaniu)
Pytanie 1
a) Odpowiedź a)
B) Odpowiedź B)
c) Odpowiedź c)

Pytanie 2
a) Odpowiedź a)
B) Odpowiedź B)
c) Odpowiedź c)

...

Pytanie n
a) Odpowiedź a)
B) Odpowiedź B)
c) Odpowiedź c)

No i szukam skryptu, który po zaznaczeniu wszystkich odpowiedzi i zatwierdzeniu sumowałby udzielone odpowiedzi i np. w przypadku gdy odpowiedź a) powtórzy się 6 razy , B) - 7, c) - 2 otwierałby stronę o nazwie a6b7c2.html

Zaznaczam, że dobrze zdążyłem poznać póki co tylko HTML i z tej perspektywy widzę tylko takie rozwiązanie, ale zdaję sobie sprawę, że istnieje jeszcze słabo mi znany PHP, w którym napewno będzie to inaczej wyglądało. Czekam na pomysły.

PS: Terminy mnie gonią ;)
c3zi
Możesz użyć PHP lub JS. Jeśli chodzi o PHP to robisz zwykły formularz, w nim określasz plik do którego zostaną przesłane dane. Następnie w tym pliku robisz obliczenia, po czym odp. używasz funkcji header.
Jeśli chodzi o JS to window.location.replace("test.html")
Apox
Wolałbym użyć JS, ale nie moge wykombinować jak użyć tego window.location.replace("test.html"). Jakaś podpowiedź? Przypominam, że JS i PHP znam tylko szczątkowo i przydałoby się trochę bardziej łopatologicznie.
Cienki1980
Cytat(Apox @ 18.09.2007, 18:13:44 ) *
Wolałbym użyć JS, ale nie moge wykombinować jak użyć tego window.location.replace("test.html"). Jakaś podpowiedź? Przypominam, że JS i PHP znam tylko szczątkowo i przydałoby się trochę bardziej łopatologicznie.

Szczątkowa znajomość PHP i JS to trochę wg mnie mało. O wiele lepiej ( prościej jak dla mnie ) zrobić to w php ( i wystarczą do tego podstawy ) a w JS trzeba by napisać funkcję, która wywoływała by się po zatwierdzeniu formularza.

W funkcji tej czytasz wszystkie zaznaczone pola odpowiedzi i określasz na tej podstawie ( licząc ilości zaznaczonych pól a,b,c,d ) nazwę pliku który ma się pokazać ...
Nattfarinn
Napisane na szybko i prawdopodobnie bardzo "na około" (nie znam za dobrze JS), ale działające. Nie wymaga przesyłania danych z formularza.


  1.  
  2. function Zlicz()
  3. {
  4. var Odpowiedzi = new Array;
  5. Odpowiedzi['a'] = 0;
  6. Odpowiedzi['b'] = 0;
  7. Odpowiedzi['c'] = 0;
  8. var IloscPytan = document.getElementsByName("pytanie").length;
  9. for(var i = 1; i <= IloscPytan; i++)
  10. {
  11. var Pytania = document.forms['quiz'].elements['pytanie'+i];
  12. for(var j = 0; j < Pytania.length; j++)
  13. {
  14. if(Pytania[j].checked) { Odpowiedzi[Pytania[j].value]++; }
  15. }
  16. }
  17. document.getElementById("licznik").innerHTML = 'a' + Odpowiedzi['a'] + 'b' + Odpowiedzi['b'] + 'c' + Odpowiedzi['c'] + '.html';
  18. // document.location = document.getElementById("licznik").innerHTML;
  19. }
  20.  
  21. <form name="quiz">
  22. <div name="pytanie">
  23. Jak się czujesz? <br />
  24. <label><input type="radio" name="pytanie1" value="a"> Źle</label><br />
  25. <label><input type="radio" name="pytanie1" value="b"> Dobrze</label><br />
  26. <label><input type="radio" name="pytanie1" value="c"> Nie sprawdzałem</label><br />
  27. </div><br />
  28.  
  29. <div name="pytanie">
  30. Jak się czujesz? </br>
  31. <label><input type="radio" name="pytanie2" value="a"> Źle</label><br />
  32. <label><input type="radio" name="pytanie2" value="b"> Dobrze</label><br />
  33. <label><input type="radio" name="pytanie2" value="c"> Nie sprawdzałem</label><br />
  34. </div><br />
  35.  
  36. <div name="pytanie">
  37. Jak się czujesz? </br>
  38. <label><input type="radio" name="pytanie3" value="a"> Źle</label><br />
  39. <label><input type="radio" name="pytanie3" value="b"> Dobrze</label><br />
  40. <label><input type="radio" name="pytanie3" value="c"> Nie sprawdzałem</label><br />
  41. </div><br />
  42. </form>
  43.  
  44. <div id="licznik"> </div>
  45.  
  46. <input type="button" value="Podlicz" onclick="Zlicz()">



Edit: Kod działa w 100% na kopiuj/wklej. Nie przenosi jednak do pliku (wyświetla tylko jego nazwę). Żeby przeniesienie miało miejsce, wystarczy zmienić:

  1. document.getElementById("licznik").innerHTML = 'a' + Odpowiedzi['a'] + 'b' + Odpowiedzi['b'] + 'c' + Odpowiedzi['c'] + '.html';
  2. // document.location = document.getElementById("licznik").innerHTML;


na

  1. document.location = 'a' + Odpowiedzi['a'] + 'b' + Odpowiedzi['b'] + 'c' + Odpowiedzi['c'] + '.html';


Dla samych testów, można też się pozbyć na szybko znaków komentarza (//).

Pozdrawiam!
Apox
Skrypt działa smile.gif Jak skończę stronę to podam link. Podziękowania dla Nattfarinn, który nie dał mi się pomęczyć tongue.gif
varulven
Witam,
i przepraszam na wstępie, że odgrzewam tak starego kotleta, ale właśnie takiego skryptu szukałem winksmiley.jpg
Chciałbym tylko zapytać szanownych forumowiczów, jak należałoby zmodyfikować ów skrypt, by strona wynikowa (czyli ta, na którą przenosi się użytkownik po wypełnieniu testu), była rezultatem zliczonej większości danych typów odpowiedzi.
Czyli mniej więcej tak:

PYTANIE 1:
A. Odp.1
B. Odp.2

PYTANIE 2:
A. Odp.1
B. Odp.2

PYTANIE 3:
A. Odp.1
B. Odp.2

Po wypełnieniu zlicza, których odpowiedzi było więcej ('A' lub 'B') i w zależności od tego przenosi na stronę z wynikami dla "większości 'A'" lub "większości 'B'".

Czy mogę liczyć na pomoc w tej sprawie? Myslę, że ten powyższy skrypt to jest właśnie to, tylko brakuje mu małej modyfikacji.
Niestety tak, jak zakładający ten wątek, jestem nowicjuszem w temacie skryptowym i dopiero co oswoiłem się (mam nadzieję, że wystarczająco) z html-em i css-em.

Z góry dziękuję za jakąkolwiek pomoc i wskazówki!
Pozdrawiam!
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-2024 Invision Power Services, Inc.