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
<?php
ini_set('default_charset', 'UTF-8'); include ('./connect.php');
/*------------------------------------------PYTANIA START--------------------------------------------------*/
$kategoria = 'UTK';
$zapytanie = $pdo->prepare('SELECT * FROM pytania_new WHERE Kategoria = :kategoria'); //pobranie wedlud kategorii zdefiniowanej w 'bindValue'
$zapytanie -> bindValue(':kategoria', $kategoria, PDO::PARAM_STR); //przypisanie wartosci $kategoria dla 'bindValue'
$zapytanie -> execute();
/* Zwraca liczbe pobranych rekordow*/
$count = $zapytanie->rowCount();
/*Petla do wyswietlenia pytan
foreach($zapytanie as $row)
{
echo $row['Tresc'];
echo "<br />";
}*/
/*Wyswietlenie losowego pytanie + zapisanie aktualnego do sesji*/
$sesja_pytan = $_SESSION['pytania_losowe']; //przypisanie lepszej nazwy zmiennej dla sesji :)
if (!isset($sesja_pytan)) { $result = $zapytanie -> fetchAll(PDO::FETCH_ASSOC); // Wpisanie rekordow do tablicy
shuffle($result); // losowanie kolejnosci pytan $_SESSION['pytania_losowe'] = $result; //sesja przetrzymuje wszystkie pytania w losowej kolejnosci
}
if (isset($_GET['pytanie'])) { $numer=$_GET['pytanie'];
$numer--; //odjecie 1, aby byla taka sama liczba jak dla indeksu w tablicy
} else echo 'zacznij test';
$id = $sesja_pytan[$numer]['ID'];
//echo $sesja_pytan[$numer]['Tresc']; //wyswietlenie tresci jednego pytania
/*foreach ($result as $result) {
echo $result['Tresc'];
} */
$zapytanie->closeCursor();
/*------------------------------------------PYTANIA KONIEC--------------------------------------------------*/
/*------------------------------------------ODPOWIEDZI START------------------------------------------------*/
$zapytanie2 = $pdo->prepare('SELECT * FROM odpowiedzi WHERE ID_Pytania = :ID_pytania'); //pobranie wedlud kategorii zdefiniowanej w 'bindValue'
$zapytanie2 -> bindValue(':ID_pytania', $id, PDO::PARAM_INT); //przypisanie wartosci $kategoria dla 'bindValue'
$zapytanie2->execute();
/* Zwraca liczbe pobranych rekordow*/
$count2 = $zapytanie2->rowCount();
print("Rekordow $count2 \n");
/*losowanie odpowiedzi*/
$result2 = $zapytanie2 -> fetchAll(PDO::FETCH_ASSOC); // Wpisanie rekordow do tablicy
shuffle($result2); // losowanie kolejnosci pytan
$zapytanie2->closeCursor();
/*------------------------------------------ODPOWIEDZI KONIEC-----------------------------------------------*/
/*------------------------------------------FORMULARZ START-------------------------------------------------*/
$value=0;
echo '<form action="./test.php" method="GET">';
echo $sesja_pytan[$numer]['Tresc']; echo '<p>Jeśli zdjęcie to tutaj</p>'; foreach($result2 as $row)
{
$odpowiedz = $row['Tresc_odpowiedzi'];
$value++;
echo "<p><input type=\"radio\" name=\"odp\" value=\"$value\" />$odpowiedz</p>"; }
$aktualna = $_GET['pytanie'];
echo "<p>Pytanie $aktualna z $count</p>"; /*------------------------------------------FORMULARZ KONIEC------------------------------------------------*/
/*------------------------------------------STRONNICOWANIE START---------------------------------------------*/
$results = 1; //Ilość wyników na pojedynczej stronie
$pages = $count; //Liczba wszystkich stron, na które rozdzielane będą wyniki z bazy danych
$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. $next = $page + 1; //Te zmienne posłużą nam przy tworzeniu linków do przedniej i następnej strony:
$back = $page - 1;
$start = $page * $results - $results; //wiersz od którego zapytanie ma zacząć pobierać wyniki:
$getData = $pdo->query("SELECT * FROM pytania_new LIMIT $start, $results")->fetchAll();
if($page > 1) {
echo '<a href="test.php?pytanie=' . $back . '">Poprzednia</a>'; }
for($pg=1; $pg<=$pages; $pg++) {
echo(' <a href="?pytanie=' . $pg . '">' . $pg . '</a> '); }
if($page < $pages) {
echo '<a href="test.php?pytanie=' . $next . '">Następna</a>'; }
if ($page == $count) {
echo '<a href="test.php?pytanie=koniec">Zakończ Test</a>'; }
/*------------------------------------------STRONNICOWANIE KONIEC--------------------------------------------*/
/*------------------------------------------CZY PRAWIDŁOWY START---------------------------------------------*/
/*------------------------------------------CZY PRAWIDŁOWY KONIEC--------------------------------------------*/
?>
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?
<?php
ini_set('default_charset', 'UTF-8'); include ('./connect.php');
/*------------------------------------------PYTANIA START--------------------------------------------------*/
$kategoria = 'UTK';
$zapytanie = $pdo->prepare('SELECT * FROM pytania_new WHERE Kategoria = :kategoria'); //pobranie wedlud kategorii zdefiniowanej w 'bindValue'
$zapytanie -> bindValue(':kategoria', $kategoria, PDO::PARAM_STR); //przypisanie wartosci $kategoria dla 'bindValue'
$zapytanie -> execute();
/* Zwraca liczbe pobranych rekordow*/
$count = $zapytanie->rowCount();
/*Petla do wyswietlenia pytan
foreach($zapytanie as $row)
{
echo $row['Tresc'];
echo "<br />";
}*/
/*Wyswietlenie losowego pytanie + zapisanie aktualnego do sesji*/
$sesja_pytan = $_SESSION['pytania_losowe']; //przypisanie lepszej nazwy zmiennej dla sesji :)
if (!isset($sesja_pytan)) { $result = $zapytanie -> fetchAll(PDO::FETCH_ASSOC); // Wpisanie rekordow do tablicy
shuffle($result); // losowanie kolejnosci pytan $_SESSION['pytania_losowe'] = $result; //sesja przetrzymuje wszystkie pytania w losowej kolejnosci
}
if (isset($_GET['pytanie'])) { $numer=$_GET['pytanie'];
$numer--; //odjecie 1, aby byla taka sama liczba jak dla indeksu w tablicy
} else echo 'zacznij test';
$id = $sesja_pytan[$numer]['ID'];
//echo $sesja_pytan[$numer]['Tresc']; //wyswietlenie tresci jednego pytania
/*foreach ($result as $result) {
echo $result['Tresc'];
} */
$zapytanie->closeCursor();
/*------------------------------------------PYTANIA KONIEC--------------------------------------------------*/
/*------------------------------------------ODPOWIEDZI START------------------------------------------------*/
$zapytanie2 = $pdo->prepare('SELECT * FROM odpowiedzi WHERE ID_Pytania = :ID_pytania'); //pobranie wedlud kategorii zdefiniowanej w 'bindValue'
$zapytanie2 -> bindValue(':ID_pytania', $id, PDO::PARAM_INT); //przypisanie wartosci $kategoria dla 'bindValue'
$zapytanie2->execute();
/* Zwraca liczbe pobranych rekordow*/
$count2 = $zapytanie2->rowCount();
print("Rekordow $count2 \n");
/*losowanie odpowiedzi*/
$result2 = $zapytanie2 -> fetchAll(PDO::FETCH_ASSOC); // Wpisanie rekordow do tablicy
shuffle($result2); // losowanie kolejnosci pytan
$zapytanie2->closeCursor();
/*------------------------------------------ODPOWIEDZI KONIEC-----------------------------------------------*/
/*------------------------------------------STRONNICOWANIE START---------------------------------------------*/
$results = 1; //Ilość wyników na pojedynczej stronie
$pages = $count; //Liczba wszystkich stron, na które rozdzielane będą wyniki z bazy danych
$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. $next = $page + 1; //Te zmienne posłużą nam przy tworzeniu linków do przedniej i następnej strony:
$back = $page - 1;
$start = $page * $results - $results; //wiersz od którego zapytanie ma zacząć pobierać wyniki:
$getData = $pdo->query("SELECT * FROM pytania_new LIMIT $start, $results")->fetchAll();
/*------------------------------------------FORMULARZ START-------------------------------------------------*/
echo '<form action="./test.php" method="GET">'; $aktualna = $_GET['pytanie'];
echo '<form action="./test.php" method="POST">';
echo $sesja_pytan[$numer]['Tresc']; echo '<p>Jeśli zdjęcie to tutaj</p>'; foreach($result2 as $row)
{
$odpowiedz = $row['Tresc_odpowiedzi'];
$value= $row['ID'];
echo "<p><input type=\"radio\" name=\"odp\" value=\"$value\" />$odpowiedz</p>"; }
echo "<p>Pytanie $aktualna z $count</p>"; if($page < $pages) {
echo '<p><input type="submit" value="test" name="test" /></p>'; }
if (isset($_POST['test'])) { if(isset( $_POST['odp'])){ echo 'radio jest zaznaczone a wartość to: '.$_POST['odp']; $zapytanie3 = $pdo->prepare('SELECT * FROM odpowiedzi WHERE ID_Pytania = :ID_pytania AND ID = :ID_odpowiedzi'); //pobranie wedlud kategorii zdefiniowanej w 'bindValue'
$zapytanie3 -> bindValue(':ID_pytania', $id, PDO::PARAM_INT); //przypisanie wartosci $kategoria dla 'bindValue'
$zapytanie3 -> bindValue(':ID_odpowiedzi',$_POST['odp'], PDO::PARAM_INT);
$zapytanie3 -> execute();
$result3 = $zapytanie3 -> fetchAll(PDO::FETCH_ASSOC);
$zapytanie3->closeCursor();
if ($result3['Prawidlowa']==1) {
// jesli ok
/*$zapytanie4 = $pdo->prepare("UPDATE uzytkownicy SET Aktualny_wynik = :wynik WHERE ID = :id");
$zapytanie4->bindValue(':wynik', $_POST['odp'], PDO::PARAM_STR);
$zapytanie4->bindValue(':id', 3, PDO::PARAM_INT);
$zapytanie4->execute();*/
//header('location:test.php?pytanie='.$next);
echo 'poprawna odpowiedz'; } else echo 'bledna odpowiedz'; }
}
/*------------------------------------------FORMULARZ KONIEC------------------------------------------------*/
if($page > 1) {
echo '<a href="test.php?pytanie=' . $back . '">Poprzednia</a>'; }
for($pg=1; $pg<=$pages; $pg++) {
echo(' <a href="?pytanie=' . $pg . '">' . $pg . '</a> '); }
if($page < $pages) {
echo '<a href="test.php?pytanie=' . $next . '">Następna</a>'; }
if ($page == $count) {
echo '<a href="test.php?pytanie=koniec">Zakończ Test</a>'; }
/*------------------------------------------STRONNICOWANIE KONIEC--------------------------------------------*/
?>
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