For albo while - Interbase+PHP

0

Siema.
Jest problem.
Sa dwie niezalezne tabele: pierwsza pytania, druga odpowiedzi.

Pytania
pyt1 | Oto pytanie pierwsze | ilosc odpowiedzi (2)
pyt2 | Oto pytanie drugie | ilosc odpowiedzi pyt2 (3)

Odpowiedzi
odpowiedz 1|pytanie 1| odpowiedz pierwsza do pytania 1
odpowiedz 2|pytanie 1| odpowiedz druga pytania 1

Jak napisac petle ktora wyswietli pytanie 1 pod nim odpowiedzi do pytania pierwszego, nastepnie pytanie 2 i odpowiedzi do pytania drugiego itd...

0

Musisz powiązać, jakoś ze sobą te rekordy w obu tabelach (typ sprzężenia 1 do wielu)
więc masz pytanie w tabeli pierwszej i masz pole IDpytania, Tam gdzie trzymasz odpowiedzi, masz też pole IDpytania, w które wstawiasz identyfikator pytania do którego odnosi się odpowiedź i robisz pętle w pętli...
Pętla zewnętrzna czyta (rekord po rekordzie) pytania z tabeli z pytaniami, a w pętli wewnętrznej filtrujesz tabelę z pytaniami tak aby IDpytania zgadzał się z tym pierwszym.
Ot i cała filozofia

0

Ja mogę dać kodzik do mysql, może ci się przyda sam szkic rozwiązania, jak nie to powiedz wtedy skasuje.

Mamy tabelę z trzema kolumnami z pytaniami:
-----------------+---------------+---------------------
numer_pytania tresc_pytania liczba_odpowiedzi
-----------------+---------------+----------------------
pyt1 Jak się... ? 2
-----------------+---------------+----------------------
pyt2 Jak się... ? 1
-----------------+---------------+----------------------

I taką tabelkę z odpowiedziami:
---------------------+-----------------+-------------
numer_odpowiedzi numer_pytania odpowiedz
---------------------+-----------------+-------------
odp1 pyt1 Trzeba...
---------------------+-----------------+-------------
odp2 pyt1 Można...
---------------------+-----------------+-------------
odp3 pyt2 Ja bym...
---------------------+-----------------+-------------

<?
mysql_pconnect('adres_bazy', 'user' ,'haslo'); // laczymy sie
mysql_select_db('nazwa_bazy'); // wybieramy baze z danymi

$query = mysql_query("select numer_pytania, tresc_pytania, liczba_odpowiedzi from pytania ORDER BY numer_pytania");
// pobieramy wszystkie pytania i sortujemy je względem numeru pytania

while($wiersz = mysql_fetch_array($query)) // dokładne wytłumaczenie funkcji mysql_fecth_array - umieściłem tutaj: http://4programmers.net/view_faq.php?id=546
{
echo 'Treść pytania:' . $wiersz[tresc_pytania];
echo '<BR>Liczba odpowiedzi:' . $wiersz[liczba_odpowiedzi];
echo '<BR>Odpowiedzi:<BR><BR>';
$query2 = mysql_query("select odpowiedz from odpowiedzi where = numer_pytania = '".$wiersz[numer_pytania]."' ORDER BY numer_odpowiedzi");
// pobieramy wszystkie odpowiedz, do aktualnego pytania i sortujemy je względem kolumny numer_odpowiedzi
while($wiersz2 = mysql_fetch_array($query2))
{
echo $wiersz2[odpowiedz] . '<BR>';
// wyświetlamy odpowiedzi do pytania
}
}
?>

Tak to mniej więcej by u mnie wyglądało. :)
Jedyne różnice by były tylko w tych wszystkich funkcjach sqlowskich, noi oczywiście w składni zapytania.

Pozdro... [cygaro]

0

Dzieki, ten kodzik przyda mi sie, troszke go pozmieniam i powinien zadzialac...

Teraz inna sprawa
Ten test (pytania i po 3 odp do pytania) ma byc wygenerowany na stronie php (wybranie pytania to CheckBox'y).
Dla kazdej odpowiedzi jest tworzony <input type="checkbox"> jednak po wypelnieniu testu nalezy sprawdzic procent poprawnosci testu.
Nie wiem teraz jak rozroznic checkbox odpowiedzi 1 z pyt 1 od odpowiedzi 2 z pyt 1.

A moze lepiej byloby pobierac po jednym pytaniu, trzy odpowiedzi i wpisywac wyniki do utworzonej przez PHP tablicy?

Jak uwazacie? Moze macie jakis lepszy pomysl?

Zaznaczam ze wyniki maja byc porownywane przez php ale nie moga zostac zapisane (nawet wyniki na chwile) do zadnej tabeli w bazie danych.

Prosze o pomoc i z gory dziekuje.

0

Dobra tu masz taki teścik zrobiony, który sprawdza odpowiedzi zgodnie z tym co podałeś w tabeli bazy, mówi ile miałeś dobrych odpowiedzi, ile złych i za każdą dobrą odpowiedź daje 2 punkty. Najpierw robimy sobie takie tabele w bazie:
pytania/
-----------------+---------------+--------------------+--------------
numer_pytania tresc_pytania liczba_odpowiedzi dobra_odp
-----------------+---------------+--------------------+--------------
pyt1 Jak.... ? 2 odp1
-----------------+---------------+--------------------+--------------
pyt2 Jak... ? 1 odp3
-----------------+---------------+--------------------+--------------

odpowiedzi/
----------------------+-----------------+---------------
numer_odpowiedzi numer_pytania odpowiedz
----------------------+-----------------+---------------
odp1 pyt1 Trzeba...
----------------------+-----------------+---------------
odp2 pyt1 Można...
----------------------+-----------------+---------------
odp3 pyt2 Ja bym...
----------------------+-----------------+---------------
odp4 pyt2 Hmm...
----------------------+-----------------+---------------

<?
function punkty($punkty)
{
if ($punkty == 1)
$wynik = punkt;
if ($punkty <= 4 && $punkty != 1)
$wynik = punkty;
elseif ($punkty > 4)
$wynik = punktów;

return $wynik;
}
function odpowiedzi($odpowiedz)
{
if ($odpowiedz == 1)
$wynik = pytanie;
if ($odpowiedz <= 4 && $odpowiedz != 1)
$wynik = pytania;
elseif (odpowiedz > 4)
$wynik = pytań;

return $wynik;
}
mysql_pconnect('localhost', 'user' ,'haslo'); // laczymy sie
mysql_select_db('baza'); // wybieramy baze z danymi
if ($_POST[wyslane])
{

$query = mysql_query("select p.tresc_pytania, p.numer_pytania, o.numer_odpowiedzi, o.odpowiedz from 

pytania as p, odpowiedzi as o where p.numer_pytania = o.numer_pytania  and  p.dobra_odp = 

o.numer_odpowiedzi ORDER By p.numer_pytania");
$i =0;
while($wiersz = mysql_fetch_array($query))
{
echo 'Treść pytania: ' . $wiersz[tresc_pytania] . '<BR>';
echo 'Numer pytania: ' . $wiersz[numer_pytania] . '<BR>';
echo 'Treść dobrej odpowiedzi: ' . $wiersz[odpowiedz] . '<BR>';
echo 'Numer dobrej odpowiedzi: ' . $wiersz[numer_odpowiedzi] . '<BR>';
echo 'Twoja odpowiedź: ' .$_POST[$wiersz[numer_pytania]]. '<BR><BR>';

$tablica[$i] = $wiersz[numer_odpowiedzi]; // tablica z dobrymi odpowiedzami
$tablica2[$i] = $_POST[$wiersz[numer_pytania]]; // tablica z twoimi odpowiedziami
$i++;
}
$punkty = 0;
$dobrze = 0;
for ($i=0;$i < mysql_num_rows($query);$i++)
{
if ($tablica[$i] == $tablica2[$i])
{
$punkty += 2;
$dobrze++;
}
}

echo 'Odpowiedziałeś poprawnie na ' .$dobrze.' '. odpowiedzi($dobrze) .'<BR>';
echo 'Odpowiedziałeś błędnie na ' .(mysql_num_rows($query) - $dobrze).' '. 

odpowiedzi((mysql_num_rows($query) - $dobrze)) .'<BR>';
echo 'Zdobyłeś ' .$punkty.' ' .punkty($punkty) .' na ' .(mysql_num_rows($query) * 2). ' możliwe.';

}else{

$query = mysql_query("select numer_pytania, tresc_pytania, liczba_odpowiedzi from pytania ORDER BY 

numer_pytania");
// pobieramy wszystkie pytania i sortujemy je względem numeru pytania

while($wiersz = mysql_fetch_array($query)) // dokładne wytłumaczenie funkcji mysql_fecth_array - 

umieściłem tutaj: http://4programmers.net/view_faq.php?id=546
{
echo '<BR>Treść pytania:' . $wiersz[tresc_pytania];
echo '<BR>Liczba odpowiedzi:' . $wiersz[liczba_odpowiedzi];
echo '<BR>Odpowiedzi:<BR><FORM ACTION=html.php METHOD=POST><INPUT TYPE=hidden NAME=wyslane VALUE=sa>';
$query2 = mysql_query("select numer_odpowiedzi,odpowiedz from odpowiedzi where numer_pytania = 

'".$wiersz[numer_pytania]."' ORDER BY numer_odpowiedzi");
// pobieramy wszystkie odpowiedz, do aktualnego pytania i sortujemy je względem kolumny numer_odpowiedzi
while($wiersz2 = mysql_fetch_array($query2))
{
echo '<INPUT TYPE=checkbox NAME='.$wiersz[numer_pytania].' 

VALUE='.$wiersz2[numer_odpowiedzi].'>'.$wiersz2[odpowiedz] . '<BR>';
// wyświetlamy odpowiedzi do pytania

}
}
echo '<INPUT TYPE=submit VALUE=wyslij> ';
}
?>

Jak go sobie przeanalizujesz to wszystko będzie jasne :)

Pozdro... ;p

1 użytkowników online, w tym zalogowanych: 0, gości: 1