Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [SQL][php][mysql] problem z wyciągnięciem zmiennych ..., prosty test .. jak wyciagnąć zmienne ..
lordkoniu
post 19.10.2012, 06:38:59
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 19.10.2012

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


witam smile.gif

TABELA :

NR_TESTU NR_PYTANIA PYTANIE A B C D ODP
1 1 Ile masz lat ? Tyle co ty smile.gif 20 30 40 c
1 2 Jak Się Nazywasz ? Artur Robert Maciek Kamil a
1 3 Gdzie Pracujesz ? US UM PKO BPH a
1 4 Jakie Masz Auto ? opel bmw audi skoda a
1 5 Ile zarabiasz ? 1000 2000 3000 4000 c

KOD PHP
  1. $zapytanie = "SELECT NR_PYTANIA, PYTANIE, A, B, C, D FROM TESTY where NR_TESTU=1";
  2. $idzapytania = mysql_query($zapytanie);
  3.  
  4. while ($wiersz = mysql_fetch_row($idzapytania))
  5. {
  6. echo '<form method="get">';
  7. '<table><tr><td colspan="2">'. $wiersz[0] .'.&nbsp<b>'. $wiersz[1] .
  8. '<b></td></tr><tr><td>A)&nbsp&nbsp'. $wiersz[2] .
  9. '&nbsp&nbsp</td><td><input type="radio" name="a" value="a" /></td></tr><tr><td>B)&nbsp&nbsp'. $wiersz[3] .
  10. '&nbsp&nbsp</td><td><input type="radio" name="a" value="b" /></td></tr><tr><td>C)&nbsp&nbsp'. $wiersz[4] .
  11. '&nbsp&nbsp</td><td><input type="radio" name="a" value="c" /></td></tr><tr><td>D)&nbsp&nbsp'. $wiersz[5] .
  12. '&nbsp&nbsp</td><td><input type="radio" name="a" value="d" /></td></tr><tr><td colspan="2">&nbsp</td></tr></table>';
  13. echo '<br><input type="submit" value="koniec">';
  14. echo '</form>';
  15. }


jak uzyskać do każdego pytania zmienna z odpowiedzia a b c lub d ? pytania jak w tabeli .. i wywalić dublujący sie przycisk koniec .. może to zła koncepcja ?

stronka z testem jest tu :

http://www.gadmar.home.pl/pracad/test/test.php

dzieki za pomoc i nakierowanie na właściwe rozwiązanie smile.gif
Go to the top of the page
+Quote Post
CuteOne
post 19.10.2012, 07:12:08
Post #2





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Odpowiedzi zapisujesz w osobnej tabeli np. odpowiedzi ;P

ID_PYTANIA | ODPOWIEDZ

i za pomocą JOIN "podczepiasz" odpowiedzi do pytania
Go to the top of the page
+Quote Post
lordkoniu
post 19.10.2012, 07:36:21
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 19.10.2012

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


hej dzięki za szybką reakcję smile.gif



nie wiem czy sie zrozumielismy chodzi o to, że ten test wyświetla się z bazy sql której struktura jest w 1 poście .. teraz chodzi mi o to, żeby ten kod PHP tak zamodyfikowac żęby :

1) przycisk koniec nie zapetlał się pod poszczególnymi pytaniami .. wiem że moge go dać po za pętlą ale wtedy pole radio można zaznaczyc tylko 1 dla wszytskich pytań a nie dla poszczególnego pytania.

2) druga sprawa chce żeby petla zwracała tyle zmiennych ile jest pyatn z wartościa a / b /c /d w zależości jaka odp będzie wybrana smile.gif

jak już będe miał te zmienne zapisze je do innej tabeli gdzie będzie imie i nazwisko studenta nazwa testu oraz odpowiedzi smile.gif

a później jeszcze sobie sparwdze czy dobrze odpowiedział czy źle ale to później smile.gif

Ten post edytował lordkoniu 19.10.2012, 07:44:49
Go to the top of the page
+Quote Post
CuteOne
post 19.10.2012, 07:47:04
Post #4





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


1. Nadaj polom UNIKALNE nazwy np. name="pole_<?=$row['id_pytania'];?>" wtedy form i przycisk wywal za i przed pętlę
2. Dodaj kolejną tabelę pytania_odpowiedzi, gdzie każde pytanie będzie posiadało zestaw odpowiedzi np.

id_odpowiedz | id_pytania | odpowiedz

1 | 2 | a
2 | 2 | b
itd..

a w tabeli odpowiedzi masz zapisane co wybrał użytkownik i dajesz na to pole "checked"


ps. nie później ;| teraz musisz wiedzieć jak ma wyglądać architektura twojej aplikacji - innymi słowy najpierw planowanie potem pisanie smile.gif

ps2. standardowo tak powinna wyglądać twoja baza

pytania
id_pytania | tresc pytania | status

pytania_odpowiedzi
id_odpowiedz | id_pytania(z tabeli pytania) | odpowiedz

odpowiedzi
id_pytania (z tabeli pytania)| id_odpowiedzi(z tabeli pytania odpowiedzi)


Ten post edytował CuteOne 19.10.2012, 07:49:34
Go to the top of the page
+Quote Post
lordkoniu
post 19.10.2012, 08:12:51
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 19.10.2012

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


qde chyba za cienki jestem na to sad.gif

ale ok powalcze jeszcze troche smile.gif Ponieważ masz 100% rację że plan to podstawa zacznijmy od początku smile.gif

Chce zrobić prosty generator testów dla studentów zrobiłem takie tabele :

tabela TESTY


w niej za pomocą formularza będzie można dodawać testy czyli nr testu liczba pytań pytania i odpowiedzi oraz na konicu dobra odpowiedź.

tabela STUDENT


tu sobie zapisuje dane studentow którzy po nr index oraz hasile będą sie logować do testów.

tabela TESTY_NAZWA

a tutaj beda nazwy poszczególnych testów smile.gif

więc z tego co widzę brakuje mi chyba tabeli wyniki w której dam np:
LP | INDEX | NAZWA | NAZWA_TESTU | PYTANIE | ODP |

dobrze sobie to zaplanowałm ?
Go to the top of the page
+Quote Post
CuteOne
post 19.10.2012, 08:22:27
Post #6





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


Podejście masz dobre smile.gif ale zapominasz o jednej znaczącej rzeczy - mysql to baza relacyjna. Dzięki temu nie musisz przepisywać tych samych danych do kilku tabel, żeby je wyświetlić. Przykład

studenci
id_studenta | imie | nazwisko
1 | Gacek | Gacyński
2 | Jolanta | Kwaśniewska

testy
id_testu | nazwa_testu | ilosc_pytan
1 | Test testowy | 11
2 | Test ograniczony | 5

testy_studenci - łączy studentów z testami
id_testu | id_studenta
1 | 1
1 | 2

  1. SELECT
  2. t.nazwa_testu,
  3. s.imie, s.nazwisko
  4. FROM
  5. testy t
  6. LEFT JOIN testy_studenci ts ON (ts.id_testu = t.id_testu)
  7. LEFT JOIN studenci s ON (s.id_studenta = ts.id_studenta)
  8. WHERE
  9. t.id_testu = 1


Tym prostym zapytaniem pobierasz wszystkich studentów, którzy są podpięci do testu o id_testu = 1

ps. testy t to alias nazwy tabeli, żeby nie pisać zbyt długich nazw smile.gif więc równie dobrze można użyć
  1. WHERE
  2. testy.id_testu = 1


Ten post edytował CuteOne 19.10.2012, 08:24:13
Go to the top of the page
+Quote Post
lordkoniu
post 19.10.2012, 09:49:12
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 19.10.2012

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


troche to skomplikowane sad.gif

wracając do 1 kwesti tak będzie ok : ?

  1.  
  2. echo '<form method="get">';
  3. while ($wiersz = mysql_fetch_row($idzapytania))
  4. {
  5. echo
  6. '<table><tr><td colspan="2">'. $wiersz[0] .'.&nbsp<b>'. $wiersz[1] .
  7. '<b></td></tr><tr><td>A)&nbsp&nbsp'. $wiersz[2] .
  8. '&nbsp&nbsp</td><td><input type="radio" name="pole_<?=$row['NR_PYTANIA'];?>" value="a" /></td></tr><tr><td>B)&nbsp&nbsp'. $wiersz[3] .
  9. '&nbsp&nbsp</td><td><input type="radio" name="pole_<?=$row['NR_PYTANIA'];?>" value="b" /></td></tr><tr><td>C)&nbsp&nbsp'. $wiersz[4] .
  10. '&nbsp&nbsp</td><td><input type="radio" name="pole_<?=$row['NR_PYTANIA'];?>" value="c" /></td></tr><tr><td>D)&nbsp&nbsp'. $wiersz[5] .
  11. '&nbsp&nbsp</td><td><input type="radio" name="pole_<?=$row['NR_PYTANIA'];?>" value="d" /></td></tr><tr><td colspan="2">&nbsp</td></tr></table>';
  12. }
  13.  
  14. echo '<br><input type="submit" value="koniec">';
  15. echo '</form>';
  16.  
  17.  
  18.  
  19.  


ok czyli bezmyślnie skopiowałem :\
Go to the top of the page
+Quote Post
CuteOne
post 19.10.2012, 09:52:59
Post #8





Grupa: Zarejestrowani
Postów: 2 958
Pomógł: 574
Dołączył: 23.09.2008
Skąd: wiesz, że tu jestem?

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


  1. <form method="get">
  2. <?php while ($wiersz = mysql_fetch_assoc($idzapytania)) : ?>
  3.  
  4. <table>
  5. <tr><td colspan="2"><?=$wiersz['kolumna_x']?>&nbsp<b><?=$wiersz['kolumna_y']?> '<b></td></tr>
  6. <tr><td>A)&nbsp&nbsp<?=$wiersz['kolumna_z']?>
  7. &nbsp&nbsp</td><td><input type="radio" name="pole_<?=$wiersz['NR_PYTANIA'];?>" value="a" /></td></tr><tr><td>B)&nbsp&nbsp <?= $wiersz['kolumna_3']?>
  8. &nbsp&nbsp</td><td><input type="radio" name="pole_<?=$wiersz['NR_PYTANIA'];?>" value="b" /></td></tr><tr><td>C)&nbsp&nbsp <?= $wiersz['kolumna_4']?>
  9. &nbsp&nbsp</td><td><input type="radio" name="pole_<?=$wiersz['NR_PYTANIA'];?>" value="c" /></td></tr><tr><td>D)&nbsp&nbsp <?= $wiersz['kolumna_5']?>
  10. &nbsp&nbsp</td><td><input type="radio" name="pole_<?=$wiersz['NR_PYTANIA'];?>" value="d" /></td></tr><tr><td colspan="2">&nbsp</td></tr>
  11. </table>
  12. <?php endwhile;?>
  13.  
  14. <br><input type="submit" value="koniec">
  15. </form>


Jak widzisz zastosowałem mysql_fetch_assoc - do kolumn odwołujesz się jak wyżej po ich nazwach.

ps. nie znam struktury twojej tabeli więc kolumna_x zmień na właściwe nazwy
ps2. zamiast mysql_* używaj PDO lub mysqli


edit: zamiast method="get" daj post

Ten post edytował CuteOne 19.10.2012, 09:57:58
Go to the top of the page
+Quote Post
lordkoniu
post 19.10.2012, 10:41:50
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 19.10.2012

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


ok zrobiłem tak smile.gif

  1. $zapytanie = "SELECT NR_PYTANIA, PYTANIE, A, B, C, D FROM TESTY where NR_TESTU=1";
  2. $idzapytania = mysql_query($zapytanie);
  3.  
  4. ?>
  5.  
  6. <form method="get">
  7.  
  8. <?php while ($wiersz = mysql_fetch_assoc($idzapytania)) : ?>
  9.  
  10. <table>
  11. <tr><td colspan="2"><?=$wiersz['NR_PYTANIA']?>.&nbsp<b><?=$wiersz['PYTANIE']?><b></td></tr>
  12. <tr><td>A)&nbsp&nbsp<?=$wiersz['kolumna_z']?>
  13. &nbsp&nbsp</td><td><input type="radio" name="pole_<?=$wiersz['NR_PYTANIA'];?>" value="a" /></td></tr><tr><td>B)&nbsp&nbsp <?= $wiersz['kolumna_3']?>
  14. &nbsp&nbsp</td><td><input type="radio" name="pole_<?=$wiersz['NR_PYTANIA'];?>" value="b" /></td></tr><tr><td>C)&nbsp&nbsp <?= $wiersz['kolumna_4']?>
  15. &nbsp&nbsp</td><td><input type="radio" name="pole_<?=$wiersz['NR_PYTANIA'];?>" value="c" /></td></tr><tr><td>D)&nbsp&nbsp <?= $wiersz['kolumna_5']?>
  16. &nbsp&nbsp</td><td><input type="radio" name="pole_<?=$wiersz['NR_PYTANIA'];?>" value="d" /></td></tr><tr><td colspan="2">&nbsp</td></tr>
  17. </table>
  18. <?php endwhile;?>
  19.  
  20. <br><input type="submit" value="koniec">
  21. </form>
  22.  
  23.  
  24.  


i efekt jest całkiem ok :
http://www.gadmar.home.pl/pracad/test/test1.php

super sprawa smile.gif

po wypełnieniu mam w przeglądarce:
test1.php?pole_1=b&pole_2=b&pole_3=b&pole_4=c&pole_5=c

jak teraz te zmienne wyspiac na ekran i dodać do tabeli z wynikami ?

np jak nacisne koniec niech mi echo wypisze podspodem odpowiedzi .. może to mnie nakieruje jak później do tabeli to przenieść z wynikami ..

poprawiłem bo odpowiedzi nie było smile.gif

http://www.gadmar.home.pl/pracad/test/test1.php



a i teraz zmieniłem metode nie wyświetla juz danych w przeglądarce smile.gif
Go to the top of the page
+Quote Post
--lordkoniu--
post 19.10.2012, 19:23:18
Post #10





Goście







ok wieczorna sesja smile.gif walcze z tym i walcze i ide w strone pętli if .. zaraz coś może zaproponuje smile.gif
Go to the top of the page
+Quote Post

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 Wersja Lo-Fi Aktualny czas: 15.06.2025 - 02:11