Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

3 Stron V   1 2 3 >  
Reply to this topicStart new topic
> 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
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
M4rcin3z
post
Post #21





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

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


Ale fajnie by było jakbyś mi pomógł (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
Pyton_000
post
Post #22





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

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


Pomogłem, gotowca więcej ode mnie nie dostaniesz. I nie dla tego że jestem wredny (no bo jestem (IMG:style_emoticons/default/haha.gif) ) ale dla tego że z każdą pierdołą będziesz leciał na forum i liczył na gotowce.
To nie na tym zabawa polega. Albo chcesz być programistą i się uczyć tego, albo nie wtedy płacisz za czyjąś wiedzę.

http://pl.wikibooks.org/wiki/PHP/Formularze

PS. Szukanie na prawdę nie boli...

Ten post edytował Pyton_000 20.01.2015, 20:12:38
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #23





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

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


Nie bede biegac, bo musze zrobic to max do konca czwartku i miec z glowy... Jest to dosc pilny termin, a jeszcze pare innych rzeczy mam do zrobienia :/ Dlatego jestem taki upierdliwy... Bardzo duzo juz mi pomogles i licze, ze ten ostatni raz tez pomozesz, bo w glebi duszy jestes dobrym czlowiekiem i pomocnym (troche wazeliny nikomu nie zaszkodzilo (IMG:style_emoticons/default/tongue.gif) )

A z ciekawości ile byś wziął za coś takiego? (IMG:style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
strife
post
Post #24





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


Cytat(M4rcin3z @ 22.01.2015, 12:56:19 ) *
Nie bede biegac, bo musze zrobic to max do konca czwartku i miec z glowy... Jest to dosc pilny termin, a jeszcze pare innych rzeczy mam do zrobienia :/ Dlatego jestem taki upierdliwy... Bardzo duzo juz mi pomogles i licze, ze ten ostatni raz tez pomozesz, bo w glebi duszy jestes dobrym czlowiekiem i pomocnym (troche wazeliny nikomu nie zaszkodzilo (IMG:style_emoticons/default/tongue.gif) )

A z ciekawości ile byś wziął za coś takiego? (IMG:style_emoticons/default/tongue.gif)


Napisz to na Giełdzie ofert na forum albo na PW to nie jest miejsce na taką konwersację.
A ja polecam, abyś mimo wszystko zacisnął zęby i sam sobie napisał to co chcesz, trochę więcej wiary (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #25





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

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


Jak się siedzi nad tym pare dni i nic nie wychodzi to sie szuka pomocy... Wiara w swoje mozliwosci mnie opuscila juz pare dni temu (IMG:style_emoticons/default/tongue.gif) :/
Go to the top of the page
+Quote Post
strife
post
Post #26





Grupa: Przyjaciele php.pl
Postów: 2 605
Pomógł: 96
Dołączył: 22.10.2004
Skąd: UK

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


Szukanie pomocy, a oczekiwanie na napisanie gotowca to dwie różne rzeczy.
Tutaj już wiele osób Ci pomogło, teraz jedynie musisz z tej pomocy skorzystać.

Uwierz mi, że jakbyś okazał chociaż odrobinę dobrej woli i zaczął to robić i potem zadawał już konkretne pytania w miejscu gdzie masz problem to już dawno byś to skończył.
Droga na skróty to zapłata komuś za wykonaną pracę - Giełda Ofert.
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #27





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

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


Tylko kolko sie zamyka w momencie kiedy napisalem ze nie moge dalej ruszyc i napisalem wprost co mnie boli to zostalem potraktowany jak nieuk. Nie mowie ze nikt mi nie pomogl, wrecz przeciwnie i nie napisalem ze oczekuje gotowca tylko pomocy jak z tym ruszyc, a podpowiedzi typu poczytaj manuala to troche dziwne wg mnie, bo robie wg manuala i nie idzie..

Dobra wracając do tematu głównego..

Sprawdzając, które dane przesyła $_POST wyświetla mi tylko to:
  1. (
  2. [10] => on
  3. [5] => on
  4. [6] => on
  5. )


Czyli generalnie wysyła tylko ID_Pytania, które było wyświetlone, ale nie pokazuje które ID_Odpowiedzi zostało zaznaczone.

Jakaś podpowiedź jak mogę sprawdzić, które konkretnie ID_Odpowiedzi zostało zaznaczone? Tak dla przypomnienia pytania są losowo generowane razem z przypisanymi do niego odpowiedziami.

Ten post edytował M4rcin3z 26.01.2015, 11:22:51
Go to the top of the page
+Quote Post
Pyton_000
post
Post #28





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

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


no to do value dla radio wrzuć ID_odpowiedzi, wtedy zamiast 'on' będziesz miał id odpowiedzi
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #29





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

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


Zrobiłem coś takiego:

echo "<input type='radio' name='Odpowiedz[{$pytanie['ID_Pytania']}] value='{$odpowiedzi['ID_Odpowiedzi']}'>{$odpowiedzi['Tresc_Odpowiedzi']}</br>";

Ale dalej wyświetla on a nie ID_Odpowiedzi :/

Albo jestem ślepy albo o czymś nie wiem (IMG:style_emoticons/default/haha.gif)

Jeszcze pytanie czy dobrze rozumuje.....

  1. $sth = $pdo->prepare("SELECT * FROM Odpowiedzi WHERE ID_Pytania IN(".implode(',', $idpytania).")");
  2. $sth->execute();
  3. $odpowiedzi = $sth->fetchAll(PDO::FETCH_ASSOC);


W powyższym kodzie wypisuje wszystkie kolumny w tabeli Odpowiedzi, więc też powinien wypisać mi ten ID_Odpowiedzi w taki sposób jak wpisałem w value?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #30





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

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


Zauważ że są one w tablicy dodatkowoczyli
Kod
array()
[0] -> array(wiersz1),
[1] -> array(wiersz2),
[2] -> array(wiersz3)


Wstaw sobie zamiast FETCH_ASSOC coś takiego:
Kod
PDO::FETCH_GROUP | PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC

i zobacz co masz dokładnie w odpowiedzi. Wtedy powienieneśmieć tablice z kluczem z id_odpowiedzi i zawartością pozostałych kolumn.
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #31





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

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


A tak z ciekawości muszę jeszcze coś zmodyfikować, bo to co napisałeś żebym wstawił zamiast nic nie dało... Dalej jest to samo :/

Dołożone co napisałeś i dalej jest to samo... Choć "postęp" jest w tym, że wyskakuje komunikat, że
Kod
Notice: Undefined index: ID_Odpowiedzi in C:\xampp\htdocs\EduPortal\bazydanych.php on line 83
i nie mam pomysłu co dalej :/
Go to the top of the page
+Quote Post
Pyton_000
post
Post #32





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

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


A zobaczyłeś choć jaki wynik dostajesz z tego zapytania ?
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #33





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

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


No właśnie miałem pisać, że po dopisaniu tego w ogóle nie wyświetla ID_Odpowiedzi..
Wyświetla coś takiego:

Kod
Array
(
    [6] => Array
        (
            [0] => Array
                (
                    [ID_Pytania] => 6
                    [Tresc_Odpowiedzi] => MySQL
                    [Czy_prawidlowa] => 0
                )

            [1] => Array
                (
                    [ID_Pytania] => 6
                    [Tresc_Odpowiedzi] => PostgreSQL
                    [Czy_prawidlowa] => 0
                )

            [2] => Array
                (
                    [ID_Pytania] => 6
                    [Tresc_Odpowiedzi] => Oracle
                    [Czy_prawidlowa] => 1
                )

            [3] => Array
                (
                    [ID_Pytania] => 6
                    [Tresc_Odpowiedzi] => Firebird
                    [Czy_prawidlowa] => 0
                )

        )
)


A jak wyświetle $przygpytania to już pokazuje ID_Odpowiedzi jako wiersz w tablicy, ale po próbie wyświetlenia wyskakuje error, że niezidentyfikowany index :/

Jestem ciekawy co może być powodem, że nie wyszukuje też ID_Odpowiedzi skoro w zapytaniu do bazy powinny być wyświetlone wszystkie pola tabeli odpowiedzi

Ten post edytował M4rcin3z 27.01.2015, 13:02:53
Go to the top of the page
+Quote Post
Pyton_000
post
Post #34





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

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


Zmień zapytanie na:
  1. $sth = $pdo->prepare("SELECT ID_Pytania, ID_Opowiedzi, Tresc_Oppowiedzi, Czy_prawidlowa FROM Odpowiedzi WHERE ID_Pytania IN(".implode(',', $idpytania).")");


i pokaż odpowiedź
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #35





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

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


Teraz to wyrzuca przy wyswietlaniu

odpowiedzi
Kod
Notice: Undefined offset: 2 in C:\xampp\htdocs\EduPortal\bazydanych.php on line 86
i
Kod
Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\EduPortal\bazydanych.php on line 84


a przy print_r($odpowiedzi) coś takiego:
Kod
Array
(
    [ID_Odpowiedzi] => 28
    [Tresc_Odpowiedzi] => elementy manipulacyjne modelu
    [Czy_prawidlowa] => 0
)


Go to the top of the page
+Quote Post
Pyton_000
post
Post #36





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

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


Pokaż jeszcze raz cały kod

Ten post edytował Pyton_000 27.01.2015, 14:26:11
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #37





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

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


Kod
<?php
  // Rozpoczynanie sesji.
session_start();
  
  require_once('config.php');

  
  // Jeśli zmienne sesji nie są ustawione, skrypt próbuje użyć
  // plików cookie.
  if (!isset($_SESSION['nr'])) {
    if (isset($_COOKIE['nr']) && isset($_COOKIE['PESEL'])) {
      $_SESSION['nr'] = $_COOKIE['nr'];
      $_SESSION['PESEL'] = $_COOKIE['PESEL'];
    }
  }
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <link rel="stylesheet" type="text/css" href="style.css" />
  <title>Główna strona</title>
</head>
<body>
    <div id="topDiv">
        <div id="headerMainDiv">
            <h3> Bazy danych </h3>
        </div>
        <div id="headerUserInfoDiv">
           <tr>Zalogowany: <?php echo $_SESSION['PESEL']; ?> </tr>
           <tr><a href="logout.php">Wyloguj się</a></tr>
        </div>
        <div id="TestContentDiv">
            <form name="formularz1" action ="result.php" method ="POST">
            <?php    
                $mysql_host = 'localhost';
                $port = '3306';
                $username = 'root';
                $password = '';
                $database = 'quiz';

            try{
                $pdo = new PDO('mysql:host='.$mysql_host.';dbname='.$database.';port='.$port, $username, $password );
            }catch(PDOException $e){
                echo 'Połączenie nie mogło zostać utworzone.<br />';
            }
//Losowe wybieranie pytan
            $sql = "SELECT * FROM pytania ORDER BY RAND() LIMIT 3;";
            $sth = $pdo->prepare($sql);
            $sth->execute();
            
            

            $pytania = $sth->fetchAll(PDO::FETCH_ASSOC);
//Przygotowywanie tablicy z id_pytan
            $idpytania = array();

            foreach ($pytania as $pytanie)
            {
                $idpytania[] = $pytanie['ID_Pytania'];
            }
//Wyszukanie rekordow, ktore zawieraja wybrane ID_Pytania
            $sth = $pdo->prepare("SELECT ID_Pytania, ID_Odpowiedzi, Tresc_Odpowiedzi, Czy_prawidlowa FROM Odpowiedzi WHERE ID_Pytania IN(".implode(',', $idpytania).")");
            $sth->execute();
            $odpowiedzi = $sth->fetchAll(PDO::FETCH_GROUP | PDO::FETCH_UNIQUE | PDO::FETCH_ASSOC);
        
            
            
            $przygpytania = array();
//Tworzenie tablicy z odpowiedziami na wybrane pytania          
            foreach($odpowiedzi as $odpowiedzi)
            {
                $przygpytania[$odpowiedzi['ID_Pytania']][] = $odpowiedzi;              
            }

          
//Tworzenie tablicy z wybranymi pytania oraz powiazanymi poprzez ID_Pytania odpowiedziami oraz ich wyswietlenie
            
            foreach ($pytania as $pytanie)
            {
                echo "<h2>{$pytanie['Tresc_Pytania']}</h2>";
                
            foreach($przygpytania[$pytanie['ID_Pytania']] as $odpowiedzi)
            {
                echo "<input type='radio' name='Odpowiedz[{$pytanie['ID_Pytania']}] value='{$odpowiedzi['ID_Odpowiedzi']}'>{$odpowiedzi['Tresc_Odpowiedzi']}</br>";
            }            
            }
           echo "<input type='submit' value='Zakończ test' name='submit'/>";
          
          
           echo '<pre>';
            print_r($odpowiedzi);
            echo '</pre>';

        ?>
            </form>
        </div>    
    </div>
</body>
</html>


całość
Go to the top of the page
+Quote Post
Pyton_000
post
Post #38





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

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


Masz i analizuj.
  1. $sql = "SELECT * FROM pytania ORDER BY RAND() LIMIT 3;";
  2. $sth = $pdo->prepare($sql);
  3. $sth->execute();
  4. $questions = $sth->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC|PDO::FETCH_UNIQUE);
  5.  
  6.  
  7. $sth = $pdo->prepare("SELECT ID_Pytania, ID_Odpowiedzi, Tresc_Odpowiedzi, Czy_prawidlowa FROM Odpowiedzi WHERE ID_Pytania IN(" . implode(',', array_keys($questions)) . ")");
  8. $sth->execute();
  9. $answers = $sth->fetchAll(PDO::FETCH_GROUP|PDO::FETCH_ASSOC);
  10.  
  11.  
  12. foreach ($questions as $question_id => $question) {
  13. echo "<h2>{$question['Tresc_Pytania']}</h2>";
  14.  
  15. foreach ($answers[$question_id] as $answer) {
  16. echo "<input type=\"radio\" name=\"answer[{$question_id}]\" value=\"{$answer['ID_Odpowiedzi']}\">{$answer['Tresc_Odpowiedzi']}<br>";
  17. }
  18. }
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #39





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

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


Ok przeksztalcone na moje i dziala (bo mialo dzialac (IMG:style_emoticons/default/tongue.gif) ) (IMG:style_emoticons/default/wink.gif)

Tylko teraz pytanie nastepujace. Po kliknieciu w przycisk 'zakoncz test' formularz w $_POST wysyla cos takiego

Kod
Array
(
    [answer] => Array
        (
            [5] => 19
            [1] => 2
            [9] => 35
        )

    [submit] => Zakończ test
)


Jak z takiej tablicy mogę pobrać dane i je odrazu sprawdzić, które z tych zaznaczonych odpowiedzi jest poprawnych(czyli czy_prawidlowa = 1 )?

/// edit

Ok domyślam się, że zapytaniem:

"SELECT count(ID_Odpowiedzi) FROM odpowiedzi WHERE ID_Odpowiedzi IN(19,2,35) AND czy_prawidlowa = 1;"

Zliczę ile w zaznaczonych odpowiedziach jest tych prawidlowych. W IN powinny być wtedy ID_Odpowiedzi tylko nie wiem jak je tam wstawić ;/

Ten post edytował M4rcin3z 31.01.2015, 13:00:48
Go to the top of the page
+Quote Post
Pyton_000
post
Post #40





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

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


implode(',',$_POST['answers'])
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #41





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

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


Coś mi tu nie tak poszło bo wyrzuca

Kod
Catchable fatal error: Object of class PDOStatement could not be converted to string in


a mam coś takiego:

Kod
$sth = $pdo->prepare("SELECT count(ID_Odpowiedzi) FROM odpowiedzi WHERE ID_Odpowiedzi IN (" . implode(',', $_POST['answer'])) . ") AND Czy_prawidlowa = 1";
            $sth->execute();
            $wynik = $sth->fetchAll();
            
            foreach ($wynik as $wyniki) {
                echo $wyniki;
            }


podpowiedz jakas?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #42





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

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


brak ) w prepare.
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #43





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

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


Hula aż miło (IMG:style_emoticons/default/tongue.gif)

Tylko ostatni problem :/

Chciałbym, aby skrypt przerzucił wynik i pare innych danych do bazy tzn.

mam tabele wyniki:

ID_Wyniku (auto increment)
ID_Testu (jest w tabeli pytania)
PESEL (przechowywany w $_SESSION ['PESEL']
Wynik ($wyniki['count(ID_Odpowiedzi)'])
Data (i tutaj chciałbym aby pokazała się bieżąca data DD-MM-RRRR)

wstępnie zrobiłem coś takiego:

Kod
INSERT INTO wyniki (ID_Wyniku, ID_Testu, PESEL, Wynik, Data) VALUES ('','$ID_Testu ','$_SESSION['PESEL']','DATE()','{$wyniki['count(ID_Odpowiedzi)']}')");


Jakaś podpowiedź jak to rozegrać? Co jest źle albo jak to inaczej zrobić?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #44





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

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


A w czym masz problem? Bo to już się zaczyna robić nawet nie śmieszne...
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #45





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

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


Mam problem z tym, że robiąc to w ten sposób:
Kod
$sth = $pdo->prepare("INSERT INTO wyniki (ID_Wyniku, ID_Testu, PESEL, Wynik, Data) VALUES ('','$ID_Testu ','{$_SESSION['PESEL']}','CURDATE()','{$wyniki['count(ID_Odpowiedzi)']}');");
            $sth->execute();
            $wpisy = $sth->fetchAll();


dodaje wynik do bazy, ale wpisuje tylko i wyłącznie w taki sposób:

'1', '0', '85091003652', '0', '0000-00-00'

Czyli dodaje tylko PESEL... i może Ty wiesz czemu.... ?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #46





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

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


Bo pozostałe zmienne nie mają wartości, masz poprzestawiane kolumny z wartościami itp.
Go to the top of the page
+Quote Post
M4rcin3z
post
Post #47





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

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


Wszystko zrobione ! Nie będę już truł d*** (IMG:style_emoticons/default/tongue.gif)




Na koniec chciałem tylko mega podziękować za mega pomoc i wyjaśnienie wielu rzeczy ! Wielkie dzięki Pyton_000 (IMG:style_emoticons/default/exclamation.gif)









sorry za upierdliwość (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 18.09.2025 - 16:14