Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML] pętla w pętli i radiobuttony.
Forum PHP.pl > Forum > Przedszkole
viine
Witajcie !
Mam następujący problem, kod wygląda tak:
  1. $query1 = mysql_query('SELECT lista1 FROM lista1');
  2. $query2 = mysql_query('SELECT id FROM lista1');
  3.  
  4. $tablica_2 = mysql_fetch_assoc($query2);
  5.  
  6. while ( $tablica_1 = mysql_fetch_assoc($query1) )
  7.  
  8. foreach ($tablica_1 as $pytanie)
  9. {
  10.  
  11. echo ('<tr><td>' .$pytanie. '</td><td><input type="radio" name="odp1" value="1" checked>1</td><td><input type="radio" name="odp2" value="2" >2</td><td><tr>');
  12.  
  13. }


Pytań jest 10, chciałbym mieć listę pytań obok radiobuttony.
Żeby mi to działało, każdy radiobutton powinien mieć inną name. Więc stwierdziłem, że w każdym kroku pętli wyświetlającej pytania będzie dodatkowa pętla, która w polu name zrobi '$is'.odp1 i '$is'.odp2. Ale nie umiem, próbowałem, próbowałem i nic.
W skrócie nie mogę utworzyć checkboxów o nazwach takich jak rekordy w tabelach.
Wiem, że w tym kodzie jest aktualnie jedna pętla, szukam drugiej.
Pomożecie ?
bastard13
Rozumiem, że pole, którego chcesz użyć jako nazwa checkboxa wyciągasz z bazy?
Najpierw zrób sobie jedno zapytanie, ponieważ niepotrzebnie łączysz się z bazą dwukrotnie (select col1,col2,col3,... from tabela).
W pętli while odwołujesz się wtedy do pól tablicy, czyli $tablica_1['col1'] itd.
Co do pętli tworzącej radiobuttony o nazwach nazwa_odp1, nazwa_odp2 itd. to możesz użyć pętli for, gdzie zmienna inkrementowana będzie ostatnim członem twojej nazwy.
tehaha
to co zrobiłeś jest bez sensu.. skoro zapytaniem pobierasz dane z jednej kolumny to w zmiennej $tablica_1 będzie tylko jedna zmienna, więc foreach nie ma tutaj sensu skoro w tablicy będzie tylko jeden element, generalnie to musisz zacząć od początku i najpierw zastanowić się jak to ma działać, stwórz sobie tabelę gdzie będziesz miał kolumny zawierające id, nazwę, wartość i pytanie , i potem zapytaniem
  1. SELECT id, name, value, question FROM table_name
pobierzesz wszystkie radio buttony wprowadzone do bazy,
a następnie samą petlą while zbudujesz wszystkie buttony
everth
Opatrz coś takiego. Twój kod jest troche zamotany i chyba niekompletny ale powinieneś zrozumieć to na poniższym:
  1. $query1 = mysql_query('SELECT id,lista1 FROM lista1'); //nazywanie kolumn nazwą tabeli to bardzo zła praktyka
  2. $tablica_1 = mysql_fetch_assoc($query1);
  3.  
  4. foreach ($tablica_1 as $pytanie)
  5. {
  6. $answers = getAnswers($pytanie[0]);
  7. echo ('<tr><td>' .$pytanie[1]. '</td>'.$answers.'<tr>');
  8. }
  9.  
  10. function getAnswers($questionId) {
  11. $query1 = mysql_query('SELECT id,tekst FROM odpowiedzi WHERE question_id='.$questionId); //rozumiem że masz tabele z odp. ?
  12. $tablica_1 = mysql_fetch_assoc($query1);
  13.  
  14. $resultString;
  15. foreach ($tablica_1 as $odpowiedz) {
  16. $resultString .= '<td><input type="radio" name="odp_'.$odpowiedz[0].'" value="1" >'.$odpowiedz[1].'</td>';
  17. }
  18. return $resultString;
  19. }
viine
dzięki za odpowiedzi.
Mój problem polega na tym, że nie mogę sobie poradzić z tym żeby jeden krok pętli wypisywał mi treść pytania i obok drukował radiobuttona z odpowiednią etykietą.
Nie jest to połączone z odpowiedziami, to co zaznaczę później będzie zapisane w bazie. Ale na razie nie mogę skonstruować takiej macierzy pytań i radiobuttonów.
everth
No to szybka modyfikacja funkcji getAnswers:
  1. function getAnswers($questionId,$range=4) {
  2. $resultString;
  3. for($i;$i<$range;$i++) {
  4. $resultString .= '<td><input type="radio" name="odp['.$questionId.']" value="'.$i.'" >Odpowiedzi nr. '.($i+1).'</td>';
  5. }
  6. return $resultString;
  7. }

Numer pytania masz zawarty jako klucz pola odpowiedzi, wartością jest numer odpowiedzi
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.