Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL] generowanie dynamicznego formularza na podstawie wynikow z bazy SQL
Forum PHP.pl > Forum > PHP
HDN
Witam,
do rzeczy mam skrypt ktory dodaje mi sonde do bazy danych na podstawie formularza do ktorego wpisuje sie pytanie i 6 odpowiedzi z tym ze nie wsystkie sa konieczne(min. 2).

Jak zrobic by wyswietlalo mi formularz(sonde) z mozliwymi do wyboru odpowiedziami z tym ze liczba tych odpowiedzi jest ustalana w zaleznosci od tego ile pol o1-o6 jest wypelnionych. Te pola sa wypelniane innym formularzem ktory dodaje sonde do bazy


oto baza:
pola od o1 do o6 to pola zawierajace odpowiedzi. a pola g1 do g6 beda zawieraly glosy



Bardzo proszę o odpowiedz i z góry dziękuje.
Jest to dosyć skomplikowane(jak dla mnie) więc jeśli ktoś mi pomoże i będzie chciał to w ramach wdzięczności mogę wykonać jakąś grafikę.
Speedy
Najlepiej stwórz sobie w bazie 2 tabele:

1. tabela: Sondy

a w niej 2 kolumny:

id, pytanie

2. tabela: Odpowiedzi

a w niej 4 kolumny

id, idSondy, odpowiedz, liczbaGlosow

Następnie dodając nową sondę dodajesz do tabeli nr 1 rekord z pytaniem oraz numerem id, a do tabeli nr 2 wstawiasz rekordy z pytaniami. W każdym rekordzie z pytaniami wstawiasz w kolumnie idSondy taką samą wartość, jaką wstawiłeś w kolumnie id w tabeli nr 1. Dzięki temu będziesz mógł relacyjnie powiązać te dwie tabele ze sobą i tworzyć sondy z dowolną ilością odpowiedzi. Później tylko tworzysz sobie odpowiedni formularz do głosowania i aktualizujesz pola w kolumnie liczbaGlosow w tabeli nr 2.

Pozdrawiam.
HDN
to już obojętne czy 2 tabele czy jedna choć twój pomysł z dwiema jest chyba lepszy i tak pewnie zrobie ale jak juz bede mial te tabele to jak na podstawie wyników zapytania wyswietlić formularz sondy który w zależności od wyników zapytania będzie mial 2 albo wiecej pól z odowiedziami?
Speedy
Np. W tabeli Sondy masz rekord o id = 5.

Pobierasz pytanie z tabeli nr 1 (Sondy).

  1. SELECT pytanie FROM Sondy WHERE id = 5 LIMIT 1 ;


Następnie odpowiednio przetwarzasz je sobie funkcjami w php i wyświetlasz pytanie.

W dalszej kolejności pobierasz odpowiedzi z tabeli nr 2 (Odpowiedzi).

  1. SELECT * FROM Odpowiedzi WHERE idSondy = 5;


Po wykonaniu takiego zapytania zostaną pobrane wszystkie odpowiedzi dla sondy o id = 5.
To zapytanie możesz również przetworzyć za pomocą php i stworzyć np. tablicę z danymi, na podstawie której możesz wygenerować stosowny formularz.

Numer id sondy możesz sobie przechowywać w url-u np. jako zmienną $_GET['id'] i wstawiać ją do tego zapytania (pamiętaj też o odpowiedniej filtracji, aby uniknąć sql injection).

Id sond nie muszą być kolejnymi numerami. Możesz sobie je generować np. na bazie aktualnego czasu za pomocą funkcji date('YmdGis'); , która wygeneruje Ci unikalną liczbę, w której będzie zawarta data, godzina, minuta oraz sekunda, w której została dodana sonda.
HDN
Bardzo zależy mi na tym projekcie z sondami który aktualnie robie. Jest możliwość żebyś mi podał swój numer gg mam jeszcze kilka pytań.
Speedy
Napisz te pytania na forum. Może ktoś jeszcze na tym skorzysta. Niestety nie mam teraz zbyt wiele czasu, żeby poświęcać go na takie rozmowy na gg. Jeśli pytania zadasz w tym lub innym wątku, to najprawdopodobniej będę mógł w wolnej chwili odpisać.
HDN
nie do konca zrozumialem twoja odpowiedz

Cytat
  1. <?php
  2. select * from Odpowiedzi where idSondy = 5;
  3. ?>


wiem ze dostane wszystkie odpowiedzi do sondy o id 5 ale moj problem polega na tym ze nie wiem jak na podstawie ilosci tych odpowiedzi wyswietlic odpowiednia ilosc tych odpowiedzi w formularzu do glosowania
Speedy
To zapytanie, jak już napisałem wcześniej, powinno Ci zwrócić wszystkie rekordy z pytaniami.

Następnie puszczasz w pętli instrukcję mysql_fetch_array" title="Zobacz w manualu PHP" target="_manual

Możesz skorzystać z funkcji wziętej żywcem z komentarzy z manuala php.

  1. <?php
  2. function mysql_fetch_all($query,$MySQL=NULL){
  3.  $r=@mysql_query($query,$MySQL);
  4.  if($err=mysql_errno($MySQL))return $err;
  5.  if(@mysql_num_rows($r))
  6. while($row=mysql_fetch_array($r))$result[]=$row;
  7.  return $result;
  8. }
  9. ?>


Następnie puszczasz sobie w pętli tę tablicę i generujesz formularz.

Oto przykładowe, schematyczne generowanie formularza z wykorzystaniem ww. funkcji (chodzi o sam pomysł) :

  1. <?php
  2.  
  3. $array = mysql_fetch_all('select * from Odpowiedzi where idSondy = 5');
  4.  
  5. echo '<form method="post" action="">';
  6.  
  7. foreach($array as $row)
  8. {
  9. echo '<input type="radio" name="glosowanie" value="'.$row['id'].'" />';
  10. }
  11.  
  12. echo '<input type="submit" value="Głosuj" />';
  13.  
  14. echo '</form>';
  15.  
  16. ?>
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.