Ankieta
W zadaniu niezbędna jest znajomość funkcji PHP umożliwiających komunikację z SZBD PostgreSQL. Funkcje te zostały omówione w pliku pomocy do poprzednich zajęć.
Treść zadania
Użytkownik otworzy stronę WWW zawierającą pytanie oraz kilka proponowanych odpowiedzi z możliwością wskazania jednej z nich, np.:
Jaki jest Twój ulubiony kolor?
Ο Czerwony
Ο Niebieski
Ο Zielony
............
Formularz umożliwiający udzielenie odpowiedzi powinien być zbudowany w oparciu o pole listy lub grupę opcji.
Po dokonaniu wyboru użytkownik kliknie przycisk polecenia, który wyświetli stronę WWW zawierającą wszystkie możliwe odpowiedzi, liczbę oddanych głosów i liczbę wskazującą, ile procent wszystkich głosów oddano na daną odpowiedź, np.:
Czerwony 15 0,30%
Niebieski 13 0,26%
Zielony 22 0,44%
...................
II. Proponowane rozwiązanie
W trybie interaktywnym (psql) utwórz w bazie danych tabelę o nazwie Ankieta składającą się z dwóch pól:
odpowiedz Varchar(150), klucz podstawowy
liczba_odpowiedzi Int8
Wpisz do tabeli co najmniej trzy rekordy. W polu odpowiedz wpisz treści odpowiedzi, które będą wybierali użytkownicy, w polu liczba_odpowiedzi wpisz zero dla każdego rekordu.
Napisz program o nazwie ankieta.php, wyświetlający stronę WWW, na której użytkownik będzie mógł zagłosować:
z bazy danych należy pobrać wszystkie odpowiedzi (pole odpowiedz z tabeli Ankieta) wykorzystując funkcje PHP,
odpowiedzi na pytanie ankietowe oraz przycisk polecenia należy umieścić pomiędzy znacznikami:
<FORM METHOD=”post” ACTION=”ankieta2.php”>
</FORM>
gdzie ankieta2.php to nazwa pliku, który wyświetli stronę z wynikami po oddaniu głosu,
aby uzyskać opcje do wyboru, do wyświetlenia każdego wiersza tabeli wybranej z bazy danych należy zastosować element INPUT typu RADIO:
<INPUT TYPE='radio' NAME='wybor' VALUE='aaa'>'Tekst'<BR>
Wszystkie opcje muszą mieć tę samą nazwę (wybor) i zwracać różne wartości (aaa). Wartości te (aaa) muszą pochodzić z pola odpowiedz tabeli Ankieta.
`Tekst' pochodzi z kolumny odpowiedz tabeli Ankieta.
Uwaga, aby ten fragment programu mógł działać poprawnie niezależnie od liczby odpowiedzi, do ich wyświetlenia należy użyć pętli FOR.
Użytkownik zatwierdza wybór klikając przycisk polecenia.
Po jego kliknięciu sterowanie przejmuje plik ankieta2.php.
Zadaniem pliku ankieta2.php jest:
Zwiększenie o 1 zawartości pola liczba_odpowiedzi tego rekordu tabeli Ankieta, którego dotyczy odpowiedź, na którą został oddany głos. Służy do tego instrukcja SQL UPDATE.
Przykład:
UPDATE NazwaTabeli SET nazwaPola=NowaWartość, nazwaPola=NowaWartość, ...
WHERE Warunek wskazujący rekordy, w których ma być dokonana zmiana
UWAGA:
W klauzuli WHERE instrukcji UPDATE należy uwzględnić wybór dokonany przez użytkownika w poprzednim formularzu. Dane w drugim pliku są dostępne poprzez tablicę asocjacyjną $_POST[].
Przykład:
W pliku x1.php umieszczony jest formularz:
<form action="x2.php" method="post">
Wpisz nazwisko: <input type="text" name="nazwisko" />
Wpisz wiek: <input type="text" name="wiek" />
<input type="submit" />
</form>
W pliku x2.php wartości wpisane w formularzu umieszczonym w pliku x1.php są dostępne poprzez zmienną $_POST[]:
Witaj <?php echo $_POST["nazwisko"]; ?>.<br />
Masz <?php echo $_POST["wiek"]; ?> lat.
Można też w pliku x2.php wartość z tablicy $_POST przypisać zmiennej:
$n = $_POST[”nazwisko”];
$w = $_POST[”wiek”];
I dalej w programie używać zmiennych $n i $w.
Jeśli treść instrukcji SQL zawiera nazwę zmiennej, cała instrukcja musi być ujęta w cudzysłów, a zmienna w apostrofy (jeśli jest to tekst) lub nie (jeśli jest to liczba), np.:
$query = "UPDATE Tabela SET PoleA=4 WHERE PoleB='$X'"
(na końcu jest apostrof a po nim cudzysłów).
Wyświetlenie z tabeli Ankieta pól odpowiedz, liczba_odpowiedzi oraz pola wyliczanego informującego, ile procent wszystkich głosów oddano na daną odpowiedź.