Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP][MySQL] Sprawdzenie czy link zostal klikniety, oraz sprawdzenie prawidlowej odpowiedzi (formularz radio)
Forum PHP.pl > Forum > Przedszkole
SkuterPL
Witam ponownie,
Pisze skrypt, ktory bedzie wyswietlal pytania, kazde pytanie na osobnej stronie i to w losowej kolejnosci, to juz udalo mi sie zrobic.
KOD
  1. <?php
  2. ini_set('default_charset', 'UTF-8');
  3. include ('./connect.php');
  4.  
  5. /*------------------------------------------PYTANIA START--------------------------------------------------*/
  6.  
  7. $kategoria = 'UTK';
  8.  
  9.  
  10. $zapytanie = $pdo->prepare('SELECT * FROM pytania_new WHERE Kategoria = :kategoria'); //pobranie wedlud kategorii zdefiniowanej w 'bindValue'
  11. $zapytanie -> bindValue(':kategoria', $kategoria, PDO::PARAM_STR); //przypisanie wartosci $kategoria dla 'bindValue'
  12. $zapytanie -> execute();
  13.  
  14. /* Zwraca liczbe pobranych rekordow*/
  15. $count = $zapytanie->rowCount();
  16.  
  17.  
  18. /*Petla do wyswietlenia pytan
  19. foreach($zapytanie as $row)
  20. {
  21.   echo $row['Tresc'];
  22. echo "<br />";
  23. }*/
  24.  
  25.  
  26.  
  27. /*Wyswietlenie losowego pytanie + zapisanie aktualnego do sesji*/
  28. $sesja_pytan = $_SESSION['pytania_losowe']; //przypisanie lepszej nazwy zmiennej dla sesji :)
  29. if (!isset($sesja_pytan)) {
  30. $result = $zapytanie -> fetchAll(PDO::FETCH_ASSOC); // Wpisanie rekordow do tablicy
  31. shuffle($result); // losowanie kolejnosci pytan
  32. $_SESSION['pytania_losowe'] = $result; //sesja przetrzymuje wszystkie pytania w losowej kolejnosci
  33. }
  34.  
  35. if (isset($_GET['pytanie'])) {
  36. $numer=$_GET['pytanie'];
  37. $numer--; //odjecie 1, aby byla taka sama liczba jak dla indeksu w tablicy
  38. } else echo 'zacznij test';
  39.  
  40. $id = $sesja_pytan[$numer]['ID'];
  41. //echo $sesja_pytan[$numer]['Tresc']; //wyswietlenie tresci jednego pytania
  42.  
  43. /*foreach ($result as $result) {
  44. echo $result['Tresc'];
  45. } */
  46.  
  47. $zapytanie->closeCursor();
  48.  
  49. /*------------------------------------------PYTANIA KONIEC--------------------------------------------------*/
  50.  
  51.  
  52. /*------------------------------------------ODPOWIEDZI START------------------------------------------------*/
  53. $zapytanie2 = $pdo->prepare('SELECT * FROM odpowiedzi WHERE ID_Pytania = :ID_pytania'); //pobranie wedlud kategorii zdefiniowanej w 'bindValue'
  54. $zapytanie2 -> bindValue(':ID_pytania', $id, PDO::PARAM_INT); //przypisanie wartosci $kategoria dla 'bindValue'
  55. $zapytanie2->execute();
  56.  
  57. /* Zwraca liczbe pobranych rekordow*/
  58. $count2 = $zapytanie2->rowCount();
  59. print("Rekordow $count2 \n");
  60.  
  61. /*losowanie odpowiedzi*/
  62. $result2 = $zapytanie2 -> fetchAll(PDO::FETCH_ASSOC); // Wpisanie rekordow do tablicy
  63. shuffle($result2); // losowanie kolejnosci pytan
  64.  
  65.  
  66. $zapytanie2->closeCursor();
  67. /*------------------------------------------ODPOWIEDZI KONIEC-----------------------------------------------*/
  68.  
  69.  
  70. /*------------------------------------------FORMULARZ START-------------------------------------------------*/
  71. $value=0;
  72. echo '<form action="./test.php" method="GET">';
  73.  
  74. echo $sesja_pytan[$numer]['Tresc'];
  75. echo '<p>Jeśli zdjęcie to tutaj</p>';
  76. foreach($result2 as $row)
  77. {
  78. $odpowiedz = $row['Tresc_odpowiedzi'];
  79. $value++;
  80. echo "<p><input type=\"radio\" name=\"odp\" value=\"$value\" />$odpowiedz</p>";
  81. }
  82. $aktualna = $_GET['pytanie'];
  83. echo "<p>Pytanie $aktualna z $count</p>";
  84. echo '</form>';
  85. /*------------------------------------------FORMULARZ KONIEC------------------------------------------------*/
  86.  
  87.  
  88.  
  89. /*------------------------------------------STRONNICOWANIE START---------------------------------------------*/
  90.  
  91. $results = 1; //Ilość wyników na pojedynczej stronie
  92. $pages = $count; //Liczba wszystkich stron, na które rozdzielane będą wyniki z bazy danych
  93. $page = isset($_GET['pytanie']) ? $_GET['pytanie'] : 1; //Numer strony na której się znajdujemy, będzie pobierany z parametru GET o nazwie pytanie. Jeżeli adres nie będzie go zawierał, będzie to oznaczać iż znajdujemy się na pierwszej stronie.
  94. $next = $page + 1; //Te zmienne posłużą nam przy tworzeniu linków do przedniej i następnej strony:
  95. $back = $page - 1;
  96. $start = $page * $results - $results; //wiersz od którego zapytanie ma zacząć pobierać wyniki:
  97. $getData = $pdo->query("SELECT * FROM pytania_new LIMIT $start, $results")->fetchAll();
  98.  
  99.  
  100.  
  101. if($page > 1) {
  102. echo '<a href="test.php?pytanie=' . $back . '">Poprzednia</a>';
  103. }
  104. for($pg=1; $pg<=$pages; $pg++) {
  105. echo(' <a href="?pytanie=' . $pg . '">' . $pg . '</a> ');
  106. }
  107. if($page < $pages) {
  108. echo '<a href="test.php?pytanie=' . $next . '">Następna</a>';
  109. }
  110.  
  111. if ($page == $count) {
  112. echo '<a href="test.php?pytanie=koniec">Zakończ Test</a>';
  113. }
  114. /*------------------------------------------STRONNICOWANIE KONIEC--------------------------------------------*/
  115.  
  116.  
  117. /*------------------------------------------CZY PRAWIDŁOWY START---------------------------------------------*/
  118.  
  119. /*------------------------------------------CZY PRAWIDŁOWY KONIEC--------------------------------------------*/
  120.  
  121. ?>


Ale teraz nie wiem jak sprawdzic czy link "Nastepna", badz "Poprzednia" zostal klikniety.

Bo chce teraz sprawdzic czy uzytkownik zaznaczyl dobra odpowiedz i jesli tak to zwiekszy licznik i zapisze go do bazy/sesji i przejdzie do nastepnego pytania, tylko tutaj znalazlem problem co zrobic jak ktos bedzie chcial powrocic do pytania i poprawic odpowiedz? Jesli mialby zawsze bledu, to nie bylo by problemu zwiekszylo by ponownie liczniik i problem z glowy, ale jest mozliwosci, ktore zle policza:
1. uzytkownik mial zaznaczone dobra odpowiedz, licznik sie zwiekszyl, postanowil zmienic swoja odpowiedz to teraz chyba powinno mu odjac tak?

  1. <?php
  2. ini_set('default_charset', 'UTF-8');
  3. include ('./connect.php');
  4.  
  5. /*------------------------------------------PYTANIA START--------------------------------------------------*/
  6.  
  7. $kategoria = 'UTK';
  8.  
  9.  
  10. $zapytanie = $pdo->prepare('SELECT * FROM pytania_new WHERE Kategoria = :kategoria'); //pobranie wedlud kategorii zdefiniowanej w 'bindValue'
  11. $zapytanie -> bindValue(':kategoria', $kategoria, PDO::PARAM_STR); //przypisanie wartosci $kategoria dla 'bindValue'
  12. $zapytanie -> execute();
  13.  
  14. /* Zwraca liczbe pobranych rekordow*/
  15. $count = $zapytanie->rowCount();
  16.  
  17.  
  18. /*Petla do wyswietlenia pytan
  19. foreach($zapytanie as $row)
  20. {
  21.   echo $row['Tresc'];
  22. echo "<br />";
  23. }*/
  24.  
  25.  
  26.  
  27. /*Wyswietlenie losowego pytanie + zapisanie aktualnego do sesji*/
  28. $sesja_pytan = $_SESSION['pytania_losowe']; //przypisanie lepszej nazwy zmiennej dla sesji :)
  29. if (!isset($sesja_pytan)) {
  30. $result = $zapytanie -> fetchAll(PDO::FETCH_ASSOC); // Wpisanie rekordow do tablicy
  31. shuffle($result); // losowanie kolejnosci pytan
  32. $_SESSION['pytania_losowe'] = $result; //sesja przetrzymuje wszystkie pytania w losowej kolejnosci
  33. }
  34.  
  35. if (isset($_GET['pytanie'])) {
  36. $numer=$_GET['pytanie'];
  37. $numer--; //odjecie 1, aby byla taka sama liczba jak dla indeksu w tablicy
  38. } else echo 'zacznij test';
  39.  
  40. $id = $sesja_pytan[$numer]['ID'];
  41. //echo $sesja_pytan[$numer]['Tresc']; //wyswietlenie tresci jednego pytania
  42.  
  43. /*foreach ($result as $result) {
  44. echo $result['Tresc'];
  45. } */
  46.  
  47. $zapytanie->closeCursor();
  48.  
  49. /*------------------------------------------PYTANIA KONIEC--------------------------------------------------*/
  50.  
  51.  
  52. /*------------------------------------------ODPOWIEDZI START------------------------------------------------*/
  53. $zapytanie2 = $pdo->prepare('SELECT * FROM odpowiedzi WHERE ID_Pytania = :ID_pytania'); //pobranie wedlud kategorii zdefiniowanej w 'bindValue'
  54. $zapytanie2 -> bindValue(':ID_pytania', $id, PDO::PARAM_INT); //przypisanie wartosci $kategoria dla 'bindValue'
  55. $zapytanie2->execute();
  56.  
  57. /* Zwraca liczbe pobranych rekordow*/
  58. $count2 = $zapytanie2->rowCount();
  59. print("Rekordow $count2 \n");
  60.  
  61. /*losowanie odpowiedzi*/
  62. $result2 = $zapytanie2 -> fetchAll(PDO::FETCH_ASSOC); // Wpisanie rekordow do tablicy
  63. shuffle($result2); // losowanie kolejnosci pytan
  64.  
  65.  
  66. $zapytanie2->closeCursor();
  67. /*------------------------------------------ODPOWIEDZI KONIEC-----------------------------------------------*/
  68.  
  69.  
  70.  
  71.  
  72. /*------------------------------------------STRONNICOWANIE START---------------------------------------------*/
  73.  
  74. $results = 1; //Ilość wyników na pojedynczej stronie
  75. $pages = $count; //Liczba wszystkich stron, na które rozdzielane będą wyniki z bazy danych
  76. $page = isset($_GET['pytanie']) ? $_GET['pytanie'] : 1; //Numer strony na której się znajdujemy, będzie pobierany z parametru GET o nazwie pytanie. Jeżeli adres nie będzie go zawierał, będzie to oznaczać iż znajdujemy się na pierwszej stronie.
  77. $next = $page + 1; //Te zmienne posłużą nam przy tworzeniu linków do przedniej i następnej strony:
  78. $back = $page - 1;
  79. $start = $page * $results - $results; //wiersz od którego zapytanie ma zacząć pobierać wyniki:
  80. $getData = $pdo->query("SELECT * FROM pytania_new LIMIT $start, $results")->fetchAll();
  81.  
  82.  
  83. /*------------------------------------------FORMULARZ START-------------------------------------------------*/
  84. echo '<form action="./test.php" method="GET">';
  85. $aktualna = $_GET['pytanie'];
  86. echo '</form>';
  87.  
  88.  
  89. echo '<form action="./test.php" method="POST">';
  90.  
  91. echo $sesja_pytan[$numer]['Tresc'];
  92. echo '<p>Jeśli zdjęcie to tutaj</p>';
  93. foreach($result2 as $row)
  94. {
  95. $odpowiedz = $row['Tresc_odpowiedzi'];
  96. $value= $row['ID'];
  97. echo "<p><input type=\"radio\" name=\"odp\" value=\"$value\" />$odpowiedz</p>";
  98. }
  99. echo "<p>Pytanie $aktualna z $count</p>";
  100. if($page < $pages) {
  101. echo '<p><input type="submit" value="test" name="test" /></p>';
  102. }
  103.  
  104.  
  105.  
  106. if (isset($_POST['test'])) {
  107. if(isset( $_POST['odp'])){
  108. echo 'radio jest zaznaczone a wartość to: '.$_POST['odp'];
  109. $zapytanie3 = $pdo->prepare('SELECT * FROM odpowiedzi WHERE ID_Pytania = :ID_pytania AND ID = :ID_odpowiedzi'); //pobranie wedlud kategorii zdefiniowanej w 'bindValue'
  110. $zapytanie3 -> bindValue(':ID_pytania', $id, PDO::PARAM_INT); //przypisanie wartosci $kategoria dla 'bindValue'
  111. $zapytanie3 -> bindValue(':ID_odpowiedzi',$_POST['odp'], PDO::PARAM_INT);
  112. $zapytanie3 -> execute();
  113. $result3 = $zapytanie3 -> fetchAll(PDO::FETCH_ASSOC);
  114. print_r($result3);
  115. $zapytanie3->closeCursor();
  116. if ($result3['Prawidlowa']==1) {
  117. // jesli ok
  118. /*$zapytanie4 = $pdo->prepare("UPDATE uzytkownicy SET Aktualny_wynik = :wynik WHERE ID = :id");
  119. $zapytanie4->bindValue(':wynik', $_POST['odp'], PDO::PARAM_STR);
  120. $zapytanie4->bindValue(':id', 3, PDO::PARAM_INT);
  121. $zapytanie4->execute();*/
  122.  
  123. //header('location:test.php?pytanie='.$next);
  124.  
  125. echo 'poprawna odpowiedz';
  126. } else echo 'bledna odpowiedz';
  127. }
  128. }
  129.  
  130. echo '</form>';
  131. /*------------------------------------------FORMULARZ KONIEC------------------------------------------------*/
  132.  
  133.  
  134. if($page > 1) {
  135. echo '<a href="test.php?pytanie=' . $back . '">Poprzednia</a>';
  136. }
  137. for($pg=1; $pg<=$pages; $pg++) {
  138. echo(' <a href="?pytanie=' . $pg . '">' . $pg . '</a> ');
  139. }
  140. if($page < $pages) {
  141. echo '<a href="test.php?pytanie=' . $next . '">Następna</a>';
  142. }
  143.  
  144. if ($page == $count) {
  145. echo '<a href="test.php?pytanie=koniec">Zakończ Test</a>';
  146. }
  147. /*------------------------------------------STRONNICOWANIE KONIEC--------------------------------------------*/
  148.  
  149.  
  150.  
  151. ?>


Poprawilem kod, aby dzialal na przysik, bo cos chyba na link to nie bedzie tak latwo, ale cos nie chce dzialac, moze tutaj ktos pomoze
ber32
Witam

Napisz co to wyświetla

  1.  
  2. echo $id = $sesja_pytan[$numer]['ID'];


zdaie sie że za mało

a potem to

  1. $result2 = $zapytanie2 -> fetchAll(PDO::FETCH_ASSOC); // Wpisanie rekordow do tablicy
goukan
możesz też zrobić to używając cookies
SkuterPL
  1. echo $id = $sesja_pytan[$numer]['ID'];


To pokazuje ID pytania z bazdy danych

  1. echo $result2 = $zapytanie2 -> fetchAll(PDO::FETCH_ASSOC); // Wpisanie rekordow do tablicy

A to pokazuje pusta tablice

cookie nie chcialbym na razie wdrazac.

pozmienialem troche kod i zapytanie i juz dziala wyswietlenie tablicy smile.gif

  1. if (isset($_POST['test']) && isset($_POST['odp'])) {
  2. echo 'radio jest zaznaczone a wartość to: '.$_POST['odp'];
  3. $zapytanie3 = $pdo->prepare('SELECT * FROM odpowiedzi WHERE ID = :ID_odpowiedzi'); //pobranie wedlud kategorii zdefiniowanej w 'bindValue'
  4. $zapytanie3 -> bindValue(':ID_odpowiedzi',$_POST['odp'], PDO::PARAM_INT);
  5. $zapytanie3 -> execute();
  6. $result3 = $zapytanie3 -> fetchAll(PDO::FETCH_ASSOC);
  7. print_r($result3);
  8. $zapytanie3->closeCursor();
  9. if ($result3[0]['Prawidlowa']==1) {
  10. // jesli ok
  11. /*$zapytanie4 = $pdo->prepare("UPDATE uzytkownicy SET Aktualny_wynik = :wynik WHERE ID = :id");
  12. $zapytanie4->bindValue(':wynik', $_POST['odp'], PDO::PARAM_STR);
  13. $zapytanie4->bindValue(':id', 3, PDO::PARAM_INT);
  14. $zapytanie4->execute();*/
  15.  
  16. header('location:test.php?pytanie='.$next);
  17.  
  18. echo 'poprawna odpowiedz';
  19. } else echo 'bledna odpowiedz';
  20.  
  21. }


Ale header nie chce dzialac, moze tutaj ktos mi pomoc?

wywwlailem co nie zbedne i zostawilem tylko sam header
  1. if (isset($_POST['wstecz']) && isset($_POST['odp'])) {
  2. header('location:test.php?pytanie='.$back);
  3.  
  4. }


i tez nie dziala :/

Myslalem, ze to echo przeszkadzalo, bo wyczytalem na forach, ale jednak nie pomoglo, czyli dalej nic...
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.