Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyświetlenie pytań oraz odpowiedzi z dwóch różnych tabel
M4rcin3z
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.03.2013

Ostrzeżenie: (0%)
-----


Cześć.

Najpierw parę informacji o co mi chodzi.

Tworzę mini portal edukacyjny z generowanymi testami. Wszystko oparte o MySQL i PHP. Temat pilny.

Pytania oraz odpowiedzi są w dwóch różnych tabelach tj.:

Pytania:
ID_Pytania | ID_Testu | Tresc_Pytania

Odpowiedzi

ID_Odpowiedzi | ID_Pytania | Tresc_Odpowiedzi | Czy_Prawidlowa


A teraz do rzeczy. Potrzebuję wyświetlić pytanie a pod nim 4 odpowiedzi w radio buttonie. Mamy taki kod:

  1. <?php
  2.  
  3. $conn = mysql_connect ("localhost", "root", "") or
  4. die ("Nie można połączyć z bazą MySQL");
  5. $db = mysql_select_db ("quiz", $conn) or die (mysql_error());
  6.  
  7. $wynik = mysql_query("SELECT ID_Pytania, Tresc_Pytania
  8. From pytania Order by RAND() LIMIT 10;");
  9. //$zapytanie = mysql_query("SELECT ID_Odpowiedzi, Tresc_Odpowiedzi, Czy_Prawidlowa
  10. // FROM Odpowiedzi;");
  11. if (mysql_num_rows($wynik)>0)
  12. {
  13.  
  14. // echo '<input type="radio" name="'.$i.'" value="'.$wynik['Tresc_Odpowiedzi'].'" />'.$wynik["Tresc_Odpowiedzi"].'</br>';
  15. $i=1;
  16. echo '<form method="post" action="result.php">';
  17.  
  18. while($pytanie = mysql_fetch_array($wynik)){
  19. echo '<br>'.$i.'.'.$pytanie['Tresc_Pytania'].'</br>';
  20.  
  21. echo '<input type="radio" value="" /></br>';
  22. echo '<input type="radio" value="" /></br>';
  23. echo '<input type="radio" value="" /></br>';
  24. echo '<input type="radio" value="" /></br>';
  25. echo '<br>';
  26.  
  27. $i++;
  28. }
  29.  
  30. print '<INPUT type="submit" name="wyslij" value="Pokaż wynik">';
  31.  
  32. }
  33. ?>
  34.  


Póki co mam tylko wyświetlone w pętli pytania i po 4 radio do każdego i tutaj jest problem (IMG:style_emoticons/default/tongue.gif) Jak wkleić pod te radio tresci odpowiedzi, które mam w bazie?
Już próbowałem pętle w pętli, ale nic nie dawało rady. Może zgłupiałem albo jestem cienki, a może coś przegapiłem. A żeby było śmieszniej potrzebowałbym żeby pytania były losowo wybierane i jak tu podczepić do losowych pytań odpowiedzi?

PS.

Jak nie ten dział to przepraszam, ale już tyle nad tym siedzę, że nie myślę (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
3 Stron V   1 2 3 >  
Start new topic
Odpowiedzi (1 - 19)
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Pobierasz z bazy pytania. Zapisujesz sobie do tablicy ich ID i pobierasz pytania do nich.

Iterujesz po tablicy pytań, wypisujesz treść pytania i potem kolejna pętla która iteruje po pytaniach i wyświetlasz pytania.

Oczywiście to najprostsze rozwiązanie, ale coś mi się wydaje że to temat na zaliczenie (IMG:style_emoticons/default/haha.gif)
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #3





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.03.2013

Ostrzeżenie: (0%)
-----


A możesz to bardziej w wersji kodu zapodać? (IMG:style_emoticons/default/tongue.gif) Powiedzmy, że na zaliczenie (IMG:style_emoticons/default/wink.gif)

Cytat(Pyton_000 @ 16.01.2015, 21:05:43 ) *
Pobierasz z bazy pytania. Zapisujesz sobie do tablicy ich ID i pobierasz pytania do nich.


Chyba miałeś na myśli, że pobieram sobie pytania. Zapisuje ich ID do tablicy i pobieram odpowiedzi do nich (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Pyton_000
post
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


"Literówka"

A czego nie rozumiesz w tym co napisałem. Część kodu już masz. No chyba że to nie Ty go pisałeś (IMG:style_emoticons/default/dry.gif)
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #5





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.03.2013

Ostrzeżenie: (0%)
-----


No jak nie pisałem jak pisałem.

Ale już parę razy kombinowałem i ani razu nie udało mi się zrobić tak jak chce :/

Nie za bardzo wiem, w którym miejscu miałbym wrzucić drugą pętle...
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


pętla w pętli
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #7





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.03.2013

Ostrzeżenie: (0%)
-----


A możesz taką przykładową, która wg Ciebie będzie działać tutaj? Jak powinna wyglądać. Bo ja tracę nadzieje :/
Go to the top of the page
+Quote Post
Pyton_000
post
Post #8





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Mam dziś za dobry dzień. Masz prawie gotowiec. Nic więcej Ci nie pomogę bo i tak już za dużo dostałeś.

  1. <?php
  2.  
  3. $pdo = new PDO('');
  4.  
  5. $sql = "SELECT * FROM questions";
  6. $sth = $pdo->prepare($sql);
  7. $sth->execute();
  8.  
  9. $questions = $sth->fetchAll(PDO::FETCH_ASSOC);
  10.  
  11. $questionsIds = array();
  12.  
  13. foreach ($questions as $question)
  14. {
  15. $questionsIds[] = $question['id'];
  16. }
  17.  
  18. $sth = $pdo->prepare("SELECT * FROM answers WHERE question_id IN(".implode(',', $questionsIds).")");
  19. $sth->execute();
  20. $answers = $sth->fetchAll(PDO::FETCH_ASSOC);
  21.  
  22. $answersPrepared = array();
  23. foreach($answers as $answers)
  24. {
  25. $answersPrepared[$answers['question_id']][] = $answers;
  26. }
  27.  
  28. foreach ($questions as $question)
  29. {
  30. echo "<h2>{$question['title']}</h2>";
  31. echo '<ul>';
  32. foreach($answersPrepared['question_id'] as $answers)
  33. {
  34. echo "<li><input type='checkbox' name='answer[{$answer['id']}]'>{$answer['title']}</li>";
  35. }
  36. echo '</ul>';
  37. }
  38.  
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #9





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.03.2013

Ostrzeżenie: (0%)
-----


Ok, dzięki... Dla kogoś kto jest zielony sam kod niewiele daje... Jakakolwiek próba przerobienia i odpalenia i tak wyrzuca błędy.. Ale dzięki

Zrobiłem dwoma pętlami FOR. Efekt?

Pyt1
radio
radio
radio
radio

pyt2
radio
radio
radio
radio
itd.

  1. <?php
  2.  
  3. $conn = mysql_connect ("localhost", "root", "") or
  4. die ("Nie można połączyć z bazą MySQL");
  5. $db = mysql_select_db ("quiz", $conn) or die (mysql_error());
  6.  
  7.  
  8. $zapytanie = mysql_query("SELECT pyt.ID_Pytania, pyt.Tresc_Pytania, odp.Tresc_Odpowiedzi
  9. From pytania pyt, Odpowiedzi odp WHERE pyt.ID_Pytania = odp.ID_Pytania;");
  10.  
  11.  
  12. $result = mysql_query("SELECT pyt.ID_Pytania, pyt.Tresc_Pytania
  13. From pytania pyt;");
  14.  
  15. if((mysql_num_rows($result)>0) AND (mysql_num_rows($zapytanie)>0)){
  16. for ($i=1;$i<11;$i++){
  17. $pytanie = mysql_fetch_array($result);
  18. echo '<br>'.$i.'.'.$pytanie['Tresc_Pytania'].'</br>';
  19.  
  20. for ($j=0;$j<4;$j++){
  21. $odpowiedz = mysql_fetch_array($zapytanie);
  22. echo '<input type="radio" name="'.$j.'" value="'.$odpowiedz['Tresc_Odpowiedzi'].'" />'.$odpowiedz["Tresc_Odpowiedzi"].'</br>';
  23. }
  24.  
  25. }
  26. }
  27. ?>
  28.  
  29.  


Może komuś się przyda, jak nie w całości to w kawałkach.

Ten post edytował M4rcin3z 17.01.2015, 17:49:22
Go to the top of the page
+Quote Post
Pyton_000
post
Post #10





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Taaa... tylko że to nie działa poprawnie, no chyba że nie musi... Tak więc nie sądzę że się komuś przyda (IMG:style_emoticons/default/wink.gif)

Ten post edytował Pyton_000 17.01.2015, 18:12:02
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #11





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.03.2013

Ostrzeżenie: (0%)
-----


W jakim sensie nie działa to prawidłowo?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


W takim że pytania nijak się mają do odpowiedzi, no chyba że w BD masz w odpowiedniej kolejności pytania i odpowiedzi.
Poza tym radio są źle nazwane, brakuje identyfikacji odpowiedzi.
Użyta stara biblioteka mysql_*
Pobierasz wszystkie pytania i odpowiedzi, a wyświetlasz tylko 11 pytań. A co jak nie będzie tyle w BD? lipa..

Dalej nie chce mi się wymieniać.
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #13





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.03.2013

Ostrzeżenie: (0%)
-----


Cytat(Pyton_000 @ 17.01.2015, 19:04:20 ) *
W takim że pytania nijak się mają do odpowiedzi, no chyba że w BD masz w odpowiedniej kolejności pytania i odpowiedzi.


Tak mam w odpowiedniej kolejności i pytania i odpowiedzi.


Nie jestem alfą i omegą, bo dopiero zaczynam na dobrą sprawę... Zawsze można się do czegoś przyczepić jak tylko się tego chce (IMG:style_emoticons/default/wink.gif)


Ok, wracając do Twojej opcji.

Wszystko niby będzie ok, ale coś mi nie gra... Wywala błędy w jednym miejscu i nie wiem jak to ugryźć :/

CODE
Notice: Undefined index: ID_Pytania in C:\xampp\htdocs\EduPortal\test.php on line 46


CODE
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\EduPortal\test.php on line 46

Ten problem już mam z głowy... Dodany
  1. foreach([b](array)[/b]$answersPrepared['ID_Pytania'] as $answers)


Z tego co wyczytałem sugeruje, że dana zmienna nie jest tablicą i na tym forum ktoś pisał żeby sprawdzić czy jest w ogóle wypełniona tym sposobem:

  1. echo '<pre>';
  2. print_r($zmienna);
  3. echo '</pre>';


I mi pokazuje coś takiego:
CODE

Array
(
[7] => Array
(
[0] => Array
(
[ID_Odpowiedzi] => 25
[ID_Pytania] => 7
[Tresc_Odpowiedzi] => jako zbiór krotek, które w znormalizowanych bazach danych s? unikatowe i nie gra roli ich kolejno??
[Czy_prawidlowa] => 1
)

[1] => Array
(
[ID_Odpowiedzi] => 26
[ID_Pytania] => 7
[Tresc_Odpowiedzi] => jako zbiór krotek, które w znormalizowanych bazach danych s? unikatowe i ich kolejno?? gra rol?
[Czy_prawidlowa] => 0
)

[2] => Array
(
[ID_Odpowiedzi] => 27
[ID_Pytania] => 7
[Tresc_Odpowiedzi] => jako zbiór krotek, które w znormalizowanych bazach danych s? powtarzalne i ich kolejno?? gra rol?
[Czy_prawidlowa] => 0
)

[3] => Array
(
[ID_Odpowiedzi] => 28
[ID_Pytania] => 7
[Tresc_Odpowiedzi] => elementy manipulacyjne modelu
[Czy_prawidlowa] => 0
)

)

[8] => Array
(
[0] => Array
(
[ID_Odpowiedzi] => 29
[ID_Pytania] => 8
[Tresc_Odpowiedzi] => Jest bogaty i pracuje jako konsultant dla Sun Mycrosystems.
[Czy_prawidlowa] => 0
)

[1] => Array
(
[ID_Odpowiedzi] => 30
[ID_Pytania] => 8
[Tresc_Odpowiedzi] => Procesuje si? o prawa do wykorzystywania jego pomys?u przez podmioty komercyjne.
[Czy_prawidlowa] => 0
)

[2] => Array
(
[ID_Odpowiedzi] => 31
[ID_Pytania] => 8
[Tresc_Odpowiedzi] => Opracowuje nowy typ relacyjnych baz danych
[Czy_prawidlowa] => 0
)

[3] => Array
(
[ID_Odpowiedzi] => 32
[ID_Pytania] => 8
[Tresc_Odpowiedzi] => Nie ?yje
[Czy_prawidlowa] => 1
)

)

[10] => Array
(
[0] => Array
(
[ID_Odpowiedzi] => 37
[ID_Pytania] => 10
[Tresc_Odpowiedzi] => ...to poprzedniczka relacyjnej bazy danych, obecnie nieu?ywana.
[Czy_prawidlowa] => 0
)

[1] => Array
(
[ID_Odpowiedzi] => 38
[ID_Pytania] => 10
[Tresc_Odpowiedzi] => ...znajduje si? w fazach prototypowych i nie powsta?y dotychczas rozwi?zania komercyjne.
[Czy_prawidlowa] => 1
)

[2] => Array
(
[ID_Odpowiedzi] => 39
[ID_Pytania] => 10
[Tresc_Odpowiedzi] => ...to zbiór obiektów, których zachowanie si?, stan oraz zwi?zki s? okre?lone zgodnie z obiektowym modelem danych
[Czy_prawidlowa] => 0
)

[3] => Array
(
[ID_Odpowiedzi] => 40
[ID_Pytania] => 10
[Tresc_Odpowiedzi] => ...nie istnieje
[Czy_prawidlowa] => 0
)

)

)


Czyli znaczyłoby, że jest wypełniona i ID_Pytania w tej tablicy się znajduje, więc gdzie leży problem? Zapodam kod:
  1. <?php
  2. $mysql_host = 'localhost'; //lub jakiś adres: np sql.nazwa_bazy.nazwa.pl
  3. $port = '3306'; //domyślnie jest to port 3306
  4. $username = 'root';
  5. $password = '';
  6. $database = 'quiz'; //'produkty'
  7.  
  8. try{
  9. $pdo = new PDO('mysql:host='.$mysql_host.';dbname='.$database.';port='.$port, $username, $password );
  10. echo 'Połączenie nawiązane!';
  11. }catch(PDOException $e){
  12. echo 'Połączenie nie mogło zostać utworzone.<br />';
  13. }
  14.  
  15.  
  16.  
  17. $sql = "SELECT * FROM pytania ORDER BY RAND() LIMIT 3";
  18. $sth = $pdo->prepare($sql);
  19. $sth->execute();
  20.  
  21. $questions = $sth->fetchAll(PDO::FETCH_ASSOC);
  22.  
  23. $questionsIds = array();
  24.  
  25. foreach ($questions as $question)
  26. {
  27. $questionsIds[] = $question['ID_Pytania'];
  28. }
  29.  
  30. $sth = $pdo->prepare("SELECT * FROM Odpowiedzi WHERE ID_Pytania IN(".implode(',', $questionsIds).")");
  31. $sth->execute();
  32. $answers = $sth->fetchAll(PDO::FETCH_ASSOC);
  33.  
  34. $answersPrepared = array();
  35. foreach($answers as $answers)
  36. {
  37. $answersPrepared[$answers['ID_Pytania']][] = $answers;
  38. }
  39. echo '<pre>';
  40. print_r($answersPrepared);
  41. echo '</pre>';
  42. foreach ($questions as $question)
  43. {
  44. echo "<h2>{$question['Tresc_Pytania']}</h2>";
  45. echo '<ul>';
  46. foreach($answersPrepared['ID_Pytania'] as $answers)
  47. {
  48. echo "<li><input type='checkbox' name='answer[{$answer['ID_Pytania']}]'>{$answer['Tresc_Odpowiedzi']}</li>";
  49. }
  50. echo '</ul>';
  51. }
  52.  
  53. ?>


Ten post edytował M4rcin3z 18.01.2015, 09:23:03
Go to the top of the page
+Quote Post
Pyton_000
post
Post #14





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Brawo..
zamień
foreach($answersPrepared['ID_Pytania'] as $answers)
na
foreach($answersPrepared[$question['ID_Pytania']] as $answers)
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #15





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.03.2013

Ostrzeżenie: (0%)
-----


Ok działa (zaraz napiszesz, że wiesz że działa (IMG:style_emoticons/default/wink.gif) ). Jeszcze tylko sprawdzenie i zliczenie ile użytkownik zaznaczył poprawnych odpowiedzi i będzie koniec. Mam nadzieję, że dam sobie z tym już sam radę (IMG:style_emoticons/default/wink.gif)


Dzięki wielkie i sorry za upierdliwość (ale tak mam, że jak czegoś nie wiem a ktoś mi podpowiada to chce wiedzieć na później jak najwięcej) (IMG:style_emoticons/default/tongue.gif)

PS.

Kliknięte "POMÓGŁ".

Nie rozpoczynając nowego tematu.

Jestem zmuszony sytuacją, że proszę o pomoc ponownie tym razem z tym zliczaniem poprawnych odpowiedzi.

W tabeli odpowiedzi jest pole Czy_prawidlowa (1- poprawna, 0-bledna).

Mam trochę problem z rozgryzieniem jaki warunek wrzucic zeby zaczelo zliczac... Warunek w sumie mam juz w glowie tylko nie bardzo wiem jak to przelac na wersje PHP :/

Podpowie ktos?
Go to the top of the page
+Quote Post
rad11
post
Post #16





Grupa: Zarejestrowani
Postów: 1 270
Pomógł: 184
Dołączył: 7.10.2012
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. SELECT count(*) FROM tabela WHERE Czy_prawidlowa = 1
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #17





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.03.2013

Ostrzeżenie: (0%)
-----


To daje ze bede mial wyswietlone i liczone... A jak to ma sie do weryfikacji tego co zaznaczyl uzytkownik?


Może inaczej.

Chodzi mi oto jak mogę sprawdzić czy zaznaczony radio button ma w kolumnie Czy_prawidlowa wartosc 1 czyli poprawna odpowiedzi? W takim przypaku naliczylo za to pkt dla uzytkownika.

Ten post edytował M4rcin3z 20.01.2015, 14:16:38
Go to the top of the page
+Quote Post
Pyton_000
post
Post #18





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Po przesłaniu odpowiedzi zbierasz ich ID z formularza, pobierasz z BD wszystkie pytania o tych ID i dalej sobie robisz co chcesz czyli możesz wyświetlić błędne odpowiedzi itd.

Natomiast jeżeli interesuje Cię tylko ilość poprawnych to

  1. SELECT COUNT(id) FROM odpowiedzi WHERE id IN(1,2,4,5) AND czy_prawidlowa = 1
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #19





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 17.03.2013

Ostrzeżenie: (0%)
-----


No ok, tylko proszę łopatologicznie jak pobrać je z formularza?

Chyba robię się coraz głupszy niż mądrzejszy... :/
Go to the top of the page
+Quote Post
Pyton_000
post
Post #20





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Weź sobie jakiś kurs PHP od podstaw to staniesz się coraz mądrzejszy...
Go to the top of the page
+Quote Post

3 Stron V   1 2 3 >
Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.12.2025 - 08:16