Sonda w PHP

Jednym ze sposobów na urozmaicenie strony jest dodanie do niej różnego rodzaju ciekawych modułów, takich jak sondy, liczniki czy księgi gości. Pokazujemy, jak utworzyć prostą sondę, która pozwoli poznać opinie użytkowników i lepiej dostosować stronę do ich wymagań.

Jednym ze sposobów na urozmaicenie strony jest dodanie do niej różnego rodzaju ciekawych modułów, takich jak sondy, liczniki czy księgi gości. Pokazujemy, jak utworzyć prostą sondę, która pozwoli poznać opinie użytkowników i lepiej dostosować stronę do ich wymagań.

Sonda, którą utworzymy, będzie się składać z trzech skryptów: dodaj.php, zobacz.php i sonda.htm, odpowiedzialnych za dodanie głosu do bazy danych, wyświetlenie wyników głosowania i wyświetlenie sondy. Będziemy korzystać z bazy danych MySQL. W naszym minimalistycznym wariancie w ankiecie znajduje się tylko jedno pytanie z możliwością wybrania jednej z trzech odpowiedzi za pomocą przełącznika typu radio. Zatem struktura tabeli przechowującej odpowiedzi jest też bardzo prosta - zawiera trzy pola: odp1, odp2, odp3 - wszystkie typu int. Oczywiście liczbę pytań i odpowiedzi można dostosować do własnych potrzeb, dodając bądź usuwając pola z tabeli oraz modyfikując kod skryptów.

Kod sondy

Sama sonda nie zawiera kodu PHP, jednak formularz, za pomocą którego głosują internauci odwiedzający naszą stronę, musi spełniać odpowiednie wymagania, dotyczące np. nazw pól. Oto kod strony:

<html>

<head>

<title>Sonda</title>

</head>

<body>

<form action=dodaj.php method=post>

<! głos jest przesłany do skryptu dodaj.php -->

<h1>Sonda</h1>

<p>Czy podoba Ci się ta strona?</p> <!Ń pytanie -->

<input type=radio name=odp value=1>Tak<br>

<input type=radio name=odp value=2>Nie<br>

<input type=radio name=odp value=3>Jest przeciętna<br>

<! poszczególne warianty odpowiedzi mają różne wartości, aby można było odpowiednio dodać głosy do bazy danych -->

<input type=submit value=Wyślij>

</form>

<br><a href=zobacz.php>Zobacz wyniki</a>

</body>

</html>

Jak widać, kod nie jest skomplikowany. Kluczowe fragmenty to znacznik <form> oraz sekcja znaczników <input type=radio>. Dzięki zastosowaniu tej samej nazwy dla wszystkich pól typu radio odpowiedź będzie przekazywana do skryptu PHP za pomocą jednej zmiennej.

Skrypt PHP

Wyniki sondy - efekt działania skryptu zobacz.php.

Wyniki sondy - efekt działania skryptu zobacz.php.

Kod PHP skryptu dodającego głos (dodaj.php) składa się z dwóch części. Pierwsza dba o to, żeby jeden użytkownik nie oddał w ciągu jednego dnia kilku głosów, druga zajmuje się zapisaniem odpowiedzi w bazie danych.

<?

// część 1: sprawdzanie cookies - ciasteczek

// sprawdzamy czy ciasteczko nie jest ustawione

if ($_COOKIE["sonda"]<>"1")

{

$czydodacglos="mozna"; // można dodać głos

// ustaw ciasteczko; czas życia - 24 godziny

setcookie("sonda","1",time()+24*3600);

}

else

$czydodacglos="niemozna";

?>

W powyższym fragmencie wykorzystana została zmienna środowiskowa $_COOKIE, która zapewnia dostęp do tzw. ciasteczek, wykorzystanych tu do śledzenia aktywności użytkowników witryny. Udzielenie odpowiedzi powoduje ustawienie ciasteczka z czasem życia - 24 godziny. Dopóki ten okres nie upłynie, nie można ponownie oddać głosu. Zmienna $czydodacglos przyjmie wartość "mozna", dopiero gdy ważność ciasteczka wygaśnie.

Druga część skryptu dodaj.php zapisuje odpowiedź w bazie danych. Wybrana odpowiedź przekazywana jest do skryptu za pomocą parametru odp, przekazanego przez przeglądarkę w poleceniu POST, dlatego do jej odczytania wykorzystujemy zmienną $_POST. Kod realizujący połączenie z bazą danych i zapisanie odpowiedzi zostanie wykonany tylko wtedy, gdy w wyniku sprawdzania ciasteczka zmienna $czydodacglos będzie miała odpowiednią wartość.

<?

if ($czydodacglos=="mozna")

{

$odp=$_POST["odp"];

$polaczenie=

mysql_connect("localhost","user","password");

mysql_select_db("sonda",$polaczenie);

$rezultat=mysql_query("SELECT odp".$odp." from sonda",$polaczenie);

$wartosc=mysql_fetch_array($rezultat);

$liczba=$wartosc["odp".$odp];

$liczba+=1;

$sql=mysql_query("UPDATE sonda SET odp".$odp."=".$liczba,$polaczenie);

echo "<p>Dodano głos!</p>";

mysql_close($polaczenie);

}

else

echo "<p>Głos już został oddany!</p>";

?>

Połączenie z bazą danych odbywa się za pomocą funkcji mysql_connect, wywołanej z trzema parametrami - nazwą serwera oraz nazwą i hasłem użytkownika. Aby powyższy przykład działał poprawnie, w bazie MySQL musi być użytkownik o nazwie user z hasłem password. W celu przetestowania przykładu można też zostawić puste cudzysłowy i skorzystać z dostępu anonimowego, jednak w rzeczywistych zastosowaniach należy koniecznie utworzyć oddzielne konto i przyznać mu minimalny zestaw tylko koniecznych uprawnień.

Po nawiązaniu połączenia za pomocą polecenie mysql_select_db wybierana jest aktywna baza danych - w naszym przypadku jest to baza o nazwie sonda. Następnie wykonywane są dwa polecenia SQL: SELECT i UPDATE. Pierwsze odczytuje zawartość pola odp1, odp2 lub odp3 (odpowiedni numer pola przechowywany jest w zmiennej $odp i za każdym razem, gdy to konieczne, zostaje doklejony do ciągu znaków "odp"). Odczytana wartość jest zwiększana i zapisywana w bazie za pomocą drugiego polecenia. Analizując powyższy kod, można zauważyć dwie rzeczy. Po pierwsze, baza danych z odpowiednimi polami musi już być, a po drugie, wartości wszystkich pól muszą mieć wartość początkową równą zeru.

W świeżo zainstalowanej bazie MySQL nie ma oczywiście tabeli sonda. Można ją przygotować, wpisując w wierszu poleceń MySQL:

mysql> create database sonda;

mysql> create table sonda (odp1 int, odp2 int, odp3 int);

mysql> insert into sonda (odp1,odp2,odp3) values (0,0,0);

Dane odczytywane z bazy umieszczane są w zmiennej $rezultat. Aby mieć do nich wygodny dostęp, używamy funkcji mysql_fetch_array, która przekształca otrzymany wynik na tzw. tablicę asocjacyjną, która w tym przypadku pozwala się odwołać do wartości pola za pomocą jego nazwy, podanej zamiast indeksu tablicy.


Zobacz również