Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt i brak pomysłu na rozwinięcie go.
Forum PHP.pl > Forum > PHP
mayerboss
Witam, zrobiłem sobie prosty skrypt quizu który pobiera pytania, odpowiedzi i prawidłową odpowiedź z tabeli pyt a następnie losuje pytania oraz odpowiedzi a,b,c,d.
Chciałbym aby po kliknięciu wyślij zliczyło użytkownikowi ilość poprawnych odpowiedzi oraz zapisało to w bazie w tabeli quiz.

  1. <?php
  2. define('IN_PHPBB', true);
  3. $phpbb_root_path = './';
  4. include($phpbb_root_path . 'extension.inc');
  5. include($phpbb_root_path . 'common.'.$phpEx);
  6. $userdata = session_pagestart($user_ip, PAGE_INDEX);
  7. init_userprefs($userdata);
  8. include($phpbb_root_path . 'includes/page_header_quiz.'.$phpEx);
  9.  
  10. $id = htmlspecialchars($_GET['id']);
  11.  
  12. if ($id=='test')
  13. {
  14. $sql = "SELECT userid FROM phpbbsf_quiz WHERE userid = " . $userdata['user_id'] . " LIMIT 1";
  15.  
  16. if( !($result = $db->sql_query($sql)) )
  17. {
  18. message_die(GENERAL_ERROR, 'Could not query users', '', __LINE__, __FILE__, $sql);
  19. }
  20. if($result && mysql_num_rows($result) > 0)
  21. {
  22. $template->assign_block_vars('niema', array('BLAD' => 'Niestety wypełniłeś juz quiz'));
  23. $template->set_filenames(array('body' => 'quiz_ok.tpl'));
  24. $template->pparse('body');
  25. include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
  26. } else
  27. {
  28. $sql = "SELECT * FROM phpbbsf_quiz_pyt ORDER BY RAND() LIMIT 10";
  29.  
  30. if( !($result = $db->sql_query($sql)) )
  31. {
  32. message_die(GENERAL_ERROR, 'Could not query users', '', __LINE__, __FILE__, $sql);
  33. }
  34.  
  35. $template->assign_block_vars('jest', array());
  36.  
  37. while( $row = $db->sql_fetchrow($result) )
  38. {
  39. $pytanie = '<h2>'.$row['pyt'].'</h2>';
  40. srand((float) microtime() * 10000000);
  41. $wejscie = array (
  42. '<input type="radio" value="'.$row['id'].'" name="1" />'.$row['odp1'].'<br>',
  43. '<input type="radio" value="'.$row['id'].'" name="2" />'.$row['odp2'].'<br>',
  44. '<input type="radio" value="'.$row['id'].'" name="3" />'.$row['odp3'].'<br>',
  45. '<input type="radio" value="'.$row['id'].'" name="4" />'.$row['odp4'].'<br>');
  46. $losowe_klucze = array_rand ($wejscie, 4);
  47. $template->assign_block_vars('jest2', array(
  48. 'PYTANIE' => $pytanie,
  49. 'PYTANIE1' => $wejscie[$losowe_klucze[0]],
  50. 'PYTANIE2' => $wejscie[$losowe_klucze[1]],
  51. 'PYTANIE3' => $wejscie[$losowe_klucze[2]],
  52. 'PYTANIE4' => $wejscie[$losowe_klucze[3]]));
  53. $template->set_filenames(array('body' => 'quiz.tpl'));
  54. }
  55.  
  56. $template->pparse('body');
  57. }
  58. } elseif ($id=='quiz')
  59. {
  60. /*
  61. isset bla bla ...
  62.  
  63.  nie mam pomyslu na ten kod */
  64. $pyt1 = $_POST['1'];
  65. $pyt2 = $_POST['2'];
  66. $pyt3 = $_POST['3'];
  67. $pyt4 = $_POST['4'];
  68. $pyt5 = $_POST['5'];
  69. $pyt6 = $_POST['6'];
  70. $pyt7 = $_POST['7'];
  71. $pyt8 = $_POST['8'];
  72. $pyt9 = $_POST['9'];
  73. $pyt10 = $_POST['10'];
  74. $pyt11 = $_POST['11'];
  75. $pyt12 = $_POST['12'];
  76. $pyt... = $_POST['...'];
  77. $pyt100 = $_POST['100'];
  78. $data = date('H:i:s d-m-Y');
  79. /* nie mam pomyslu na ten kod */
  80. $punkty = 0
  81.  
  82. if { $pyt1 == $pobrana_odpowiedz }
  83. $punkty = $punkty + 1;
  84. }
  85.  
  86. $sql = mysql_query("INSERT INTO phpbbsf_quiz (`userid`,`punkty`,`data`) VALUES ('" . $userdata['user_id'] . "','$punkty','$data')");
  87.  
  88. $template->set_filenames(array('body' => 'quiz_ok.tpl'));
  89. $template->pparse('body');
  90. include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
  91.  
  92. /* nie mam pomyslu na ten kod koniec isset */
  93.  
  94.  
  95. } else
  96. {
  97. $template->set_filenames(array('body' => 'quiz_home.tpl'));
  98. $template->pparse('body');
  99. include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
  100. }
  101. ?>
adrianozo
W czym jest problem? Zliczenie poprawnych odpowiedzi czy zapisanie ich do bazy danych?
mayerboss
Nie mam poprostu pomysłu na sprawdzenie czy odpowiedź jest prawidłowa czy też nie.
Pytania w bazie mam zapisane w takiej formie

id, pytanie , odpowiedz 1, odpowiedz 2, odpowiedz 3, odpowiedz 4, poprawna odpowiedz.

Skrypt losuje z pośród 100 pytań 10, i przy wysłaniu formularza chciałbym aby do tabeli quiz z punktami wpisało zsumowane punkty poprawnych odpowiedzi.
Jeżeli pytanie id=1 && poprawna_odpowiedz=2 to
$punkty= $punkty + 1, jeżeli poprawna_odpowiedź != 2 idź dalej.

Nie chciał bym robić 100* $_post['(liczba)'] i 100 ifów dla każdego sprawdzenia.
CuteOne
A słyszoł ty o pętli? Tak czy siak musisz porównać każdą odpowiedź z tą z bazy danych
mayerboss
Niestety, muszę w jakiś sposób sprawdzić czy odpowiedź jest prawidłowa czy też nie.
Pętla.. myślałem o tym ale skończyło się tylko na while.. i dalej pustka w głowie.

Cytat
Z php nie jestem bóg wie kim i nie znam się na tym aż w takim stopniu, jestem tzw. samoukiem i czasami potrzebuje fachowej porady z wyjaśnieniem jak dla laika.
Wicepsik
  1. for($i=0;$i<101;$i++){
  2. if($_POST[$i] == $pobrana_odpowiedz) $punkty++;
  3. }
mayerboss
Nadal nie wiem jak to rozwiązać.

  1. elseif ($id=='quiz')
  2. {
  3. $data = date('H:i:s d-m-Y');
  4. $punkty = 0;
  5.  
  6. for($i=0;$i<101;$i++){
  7.  
  8. $sql = "SELECT * FROM phpbbsf_quiz_pyt WHERE id='$1' LIMIT 1";
  9.  
  10. while( $row2 = $db->sql_fetchrow($result) )
  11. {
  12. $odp = $row2['poprawna'];
  13. if($_POST[$i] == $odp)
  14. {
  15. $punkty = $punkty + 1;
  16. }
  17. }
  18. }
  19. $sql = mysql_query("INSERT INTO phpbbsf_quiz (`userid`,`punkty`,`data`) VALUES ('" . $userdata['user_id'] . "','$punkty','$data')");
  20.  
  21. $template->set_filenames(array('body' => 'quiz_ok.tpl'));
  22. $template->pparse('body');
  23. include($phpbb_root_path . 'includes/page_tail.'.$phpEx);
  24.  
  25. }
CuteOne
Zapisz sobie do bazy poprawne odpowiedzi [ oddzielone ; ] dla każdego quizu np.
  1. $row = $db->sql_fetchrow($result);
  2.  
  3. $explode = explode(';', $row['odpowiedz']);
  4.  
  5. for($i=0;$i<count($explode);$i++) {
  6.  
  7. if($exp[$i] == $_POST['odpowiedz'.$i]) $punkty++;
  8. }
  9.  
  10. mysql_query("INSERT INTO phpbbsf_quiz (`userid`,`punkty`,`data`) VALUES ('" . $userdata['user_id'] . "','$punkty','$data')");
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.