Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ PHP _ skrypt do odpytywania

Napisany przez: dentopolis 19.11.2019, 19:05:12

cały czas pracuję nad kolejnymi funkcjami skryptu do odpytywania. działające funkcje: wybranie ucznia z bazy, wybranie kategorii, wybranie zakresu stopnia trudności pytań od łatwych (wszystkie)/od średnich (średnie i trudne)/ od trudnych (trudne), wybranie kolejności zadawanych pytań: rosnąco/malejąco/losowo, wybranie sposobu zadawania pytań: pytanie jest pytaniem/odpowiedź jest pytaniem/losowo. http://dentopolis.org/pytajnik/

mam natomiast najważniejsze pytanie żeby skrypt działał tzn. kiedy wybrane zostają w pliku index.php określone parametry testu, odczywytane są one za pomocą GET przez poniższy kod w test.php. jak zmienić mój kod żeby zapamiętany został wybrany zakres pytań i pozostałe parametry odpytywania? chcę żeby po kliknięciu któregokolwiek przycisku oceny "trudne", "wiem", "łatwe" zapisał odpowiedź i wczytał kolejne pytanie zgodnie z tymi parametrami testu.

  1. <?php
  2. http://www.php.net/session_start();
  3. ?>
  4. <!doctype html>
  5. <html lang="pl-PL">
  6. <head>
  7. <meta charset="utf-8">
  8. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  9. <script src="jquery/jquery.min.js"></script>
  10. <script src="bootstrap/js/bootstrap.bundle.min.js"></script>
  11. <link rel="stylesheet" href="bootstrap/css/bootstrap.min.css">
  12. <link rel="icon" href="favicon.png" type="image/png">
  13. <script>
  14. function checkanswer() {
  15. var x = document.getElementById("answer");
  16. if (x.style.display === "none") {
  17. x.style.display = "block";
  18. } else {
  19. x.style.display = "none";
  20. }
  21. }
  22. </script>
  23. <title>pytajnik</title>
  24. </head>
  25. <body>
  26. <form action="answer.php" method="get">
  27. <?php
  28.  
  29.  
  30. $user=$_GET['user'];
  31. $category=$_GET['category'];
  32. $questions=$_GET['questions'];
  33. $ask=$_GET['ask'];
  34. $order=$_GET['order'];
  35. $type=$_GET['type'];
  36.  
  37.  
  38. switch ($questions):
  39. case ($questions == 'hard'):
  40. #echo $questions;
  41. break;
  42. case ($questions == 'average'):
  43. # echo $questions;
  44. break;
  45. case ($questions == 'simple'):
  46. # echo $questions;
  47. break;
  48. endswitch;
  49.  
  50.  
  51.  
  52. switch ($order):
  53. case ($order == 'random'):
  54. #echo $order;
  55. $orderx=' RAND()';
  56. break;
  57. case ($order == 'ascending'):
  58. #echo $order;
  59. $orderx=' `pytajnik_pytania`.`id` ASC';
  60. break;
  61. case ($order == 'descending'):
  62. #echo $order;
  63. $orderx=' `pytajnik_pytania`.`id` DESC';
  64. break;
  65. endswitch;
  66.  
  67. ?>
  68.  
  69. <div style="text-align:center;">
  70. 1/30 40%
  71. <br/>
  72.  
  73. <?php
  74. $servername = "#############";
  75. $username = "#############";
  76. $password = "#############";
  77. $dbname = "#############";
  78.  
  79. $conn = new mysqli($servername, $username, $password, $dbname);
  80.  
  81. mysqli_set_charset( $conn, 'utf8' );
  82. if ($conn->connect_error) {
  83. http://www.php.net/die("Connection failed: " . $conn->connect_error);
  84. }
  85. $sql = "SELECT * FROM `pytajnik_pytania` ORDER BY $orderx";
  86. $result = $conn->query($sql);
  87.  
  88. if ($result->num_rows > 0) {
  89. while($row = $result->fetch_assoc()) {
  90.  
  91. $questionid = $row['id'];
  92. $question = $row['question'];
  93. $answer = $row['answer'];
  94.  
  95. }
  96.  
  97.  
  98. http://www.php.net/echo "<hr/>";
  99. http://www.php.net/echo "<div class='row' style='height:150px;'>";
  100. switch ($ask):
  101. case ($ask == 'question'):
  102. http://www.php.net/echo "<div class='col'>";
  103. http://www.php.net/echo $question;
  104. http://www.php.net/echo "</div>";
  105. http://www.php.net/echo "<div class='col'><div id='answer' style='display:none;'>";
  106. http://www.php.net/echo $answer;
  107. http://www.php.net/echo "</div></div>";
  108. break;
  109. case ($ask == 'answer'):
  110. http://www.php.net/echo "<div class='col'>";
  111. http://www.php.net/echo $answer;
  112. http://www.php.net/echo "</div>";
  113. http://www.php.net/echo "<div class='col'><div id='answer' style='display:none;'>";
  114. http://www.php.net/echo $question;
  115. http://www.php.net/echo "</div></div>";
  116. break;
  117. case ($ask == 'both'):
  118. $var = http://www.php.net/rand(1,2);
  119. if($var == 1)
  120. {
  121. http://www.php.net/echo "<div class='col'>";
  122. http://www.php.net/echo $question;
  123. http://www.php.net/echo "</div>";
  124. http://www.php.net/echo "<div class='col'><div id='answer' style='display:none;'>";
  125. http://www.php.net/echo $answer;
  126. http://www.php.net/echo "</div></div>";
  127. }
  128. else
  129. {
  130. http://www.php.net/echo "<div class='col'>";
  131. http://www.php.net/echo $answer;
  132. http://www.php.net/echo "</div>";
  133. http://www.php.net/echo "<div class='col'><div id='answer' style='display:none;'>";
  134. http://www.php.net/echo $question;
  135. http://www.php.net/echo "</div></div>";
  136. }
  137. break;
  138. endswitch;
  139. http://www.php.net/echo "</div>";
  140. } else {
  141. }
  142. ?>
  143.  
  144. <?php
  145. $con=mysqli_connect("#############","#############","#############","#############");
  146. $sql="SELECT * FROM `pytajnik_pytania` INNER JOIN `pytajnik_odpowiedzi`";
  147. if ($result=mysqli_query($con,$sql))
  148.  
  149. {
  150.  
  151. $rowcount=mysqli_num_rows($result);
  152. # echo $rowcount;
  153.  
  154. }
  155. #mysqli_close($con);
  156. ?>
  157.  
  158.  
  159.  
  160. <br/><br/><br/>
  161.  
  162. <button type='button' class='btn btn-primary btn-block' onclick='checkanswer()'>odpowiedź</button>
  163.  
  164. <br/>
  165.  
  166. <div class="row">
  167. <div class="col"><button type='submit' name="odpowiedz" value="1" class='btn btn-danger btn-block'>trudne</button></div>
  168. <div class="col"><button type='submit' name="odpowiedz" value="2" class='btn btn-warning btn-block'>wiem</button></div>
  169. <div class="col"><button type='submit' name="odpowiedz" value="3" class='btn btn-success btn-block'>łatwe</button></div>
  170. </div>
  171.  
  172. </div>
  173. <?php
  174. $con=mysqli_connect(""#############";",""#############";",""#############";",""#############";");
  175.  
  176. if (http://www.php.net/isset($_GET["submit"])){
  177. $SQL ="INSERT INTO pytajnik_odpowiedzi (`id`, `session`, `datetime`, `questionid`, `button`, `user`) VALUES (NULL, $session, $datetime, $questionid, $button, $user)";
  178. $result = http://www.php.net/mysql_query($SQL);
  179. }
  180. ?>
  181. </form>
  182. </body>
  183. </html>



Napisany przez: Tomplus 20.11.2019, 09:33:02

Pytanie, dlaczego INSERT dodajesz na koniec kodu? a nie na początku?
W takim wypadku może okazać się że użytkownikowi wyświetli się dwa razy to samo pytanie.

A co do powrotu do strony z pytaniem to:

  1. http://www.php.net/header("Location: stronaZpytaniem");



Napisany przez: dentopolis 20.11.2019, 09:39:03

okay, wiem jak powrócić ale wtedy zapytanie sql powinno być inne i wykluczyć już wyświetlone pytania

Napisany przez: viking 20.11.2019, 10:02:14

Zależy jak chcesz to zrobić? Czy globalnie dla użytkownika - wtedy tworzysz nową tabelkę typu wyświetlone_pytania a do selecta dodajesz ...where id_pytania not in(select id from wyświetlone_pytania where user_id=?), czy wystarczy per sesja - wtedy do tablicy w sesji typu $_SESSION['wyswietlone_pytania'] dodajesz id pobranego pytania i w zapytaniu ...where id_pytania not in(?); gdzie ? to jakieś implode(',', $_SESSION['wyswietlone_pytania']).

Napisany przez: dentopolis 20.11.2019, 20:43:39

tak jak mówiłeś viking - od tej pory wybrane zmienne są zapisywane w sesji, w tym id obecnie wyświetlanego pytania. po kliknięciu któregoś z przycisków np.średnie odpowiedź jest zapisywana do bazy i potrawię przez header("Location: test.php") powrócić do dalszego rozwiązywania testu (chwilowo to wyłączyłem) tylko mam pytanie jak to zapisać "w tablicy" żeby odjął to pytanie..i odejmował każde kolejne już wyświetlone.obecne zapytanie:

  1. $sql = "SELECT * FROM `pytajnik_pytania` WHERE `id` NOT IN (SELECT questionid FROM `pytajnik_odpowiedzi`) ORDER BY $orderx";
  2. $result = $conn->query($sql);
  3.  
  4. if ($result->num_rows > 0) {
  5. while($row = $result->fetch_assoc()) {
  6.  
  7. $questionid = $row['id'];
  8. http://www.php.net/echo $questionid;
  9. $question = $row['question'];
  10. $answer = $row['answer'];
  11.  
  12. }

https://dentopolis.org/pytajnik/

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)