Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP/MySQL] generowanie dynamicznego formularza na podstawie wynikow z bazy SQL
HDN
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 23.01.2008

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


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
(IMG:http://designwww.ovh.org/baza.jpg)


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ę.
Go to the top of the page
+Quote Post
Speedy
post
Post #2





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


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.

Ten post edytował Speedy 23.01.2008, 14:16:08
Go to the top of the page
+Quote Post
HDN
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 23.01.2008

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


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?
Go to the top of the page
+Quote Post
Speedy
post
Post #4





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


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.

Ten post edytował Speedy 23.01.2008, 18:34:31
Go to the top of the page
+Quote Post
HDN
post
Post #5





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 23.01.2008

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


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ń.
Go to the top of the page
+Quote Post
Speedy
post
Post #6





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


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ć.
Go to the top of the page
+Quote Post
HDN
post
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 23.01.2008

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


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
Go to the top of the page
+Quote Post
Speedy
post
Post #8





Grupa: Zarejestrowani
Postów: 651
Pomógł: 28
Dołączył: 4.12.2004

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


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. ?>


Ten post edytował Speedy 24.01.2008, 02:28:31
Go to the top of the page
+Quote Post

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: 22.08.2025 - 13:36