[PHP] Jak stworzyć ankietę (sondę), aby można było oddać tylko jeden głos lub określoną ilość głosów?
Potrzebujesz uruchomić prostą ankietę, która pozwoli na oddawanie głosów przez użytkowników. Ankieta ma być zabezpieczona przed wielokrotnym głosowaniem. Mało tego - chcesz regulować ile razy może zagłosować każdy użytkownik.
Jeżeli masz już przygotowane pytanie i kilka odpowiedzi, wpisz je do poniższego skryptu i czekaj, aż użytkownicy będą oddawać swoje głosy. Ankieta lub sonda to przydatny element każdego serwisu, pozwala bowiem zapoznać się z preferencjami i opiniami użytkowników.
<?
$pyt="Ile godzin ma doba?";
$odp[]="nie wiem";
$odp[]="dokładnie 24";
$odp[]="pewnie 12...";
$glosowan=1;
$pl="ip.txt";
$ip = $_SERVER["REMOTE_ADDR"];
$o=$_GET["o"];
$ile=count($odp);
$f = fopen($pl, "r");
$plik = fread($f, filesize($pl));
fclose($f);
preg_match_all("/$ip/i", $plik, $glos);
if (($o>-1)and($o<$ile)and(count($glos[0])<$glosowan)) {
$f=fopen($pl,"a");
fputs($f,"<$o>$ip"); fclose($f);
$plik .= "<$o>";
}
echo $pyt;
for ($i=0;$i<$ile;$i++) {
preg_match_all("/<$i>/i", $plik, $li);
$wynik ="[". count($li[0]) ."]";
echo "<br>$wynik <a href=\"index.php?o=$i\">$odp[$i]</a>";
}
?>
Cały skrypt został wizualnie podzielony na cztery części. W pierwszej umieszczasz pytanie i dowolną ilość odpowiedzi. Dla zmiennej $glosowan podajesz ile razy użytkownik może głosować. Czasem zachodzi konieczność oddania kilku głosów, np. przy wyborze trzech ulubionych książek. Zmienna $pl określa nazwę i ścieżkę do pliku, który będzie przechowywał odpowiedzi i numery IP głosujących.
Kolejna część skryptu liczy ile jest odpowiedzi do wyboru i pobiera zawartość pliku z odpowiedziami. Plik musi być na serwerze udostępniony do zapisywania dla każdego (chmod 666).
Następnie sprawdzane jest IP użytkownika - jeżeli znajduje się już w pliku, nie ma on możliwości oddania kolejnego głosu (chyba, że zezwolisz mu na wielokrotne głosowanie). Jeżeli liczba głosów oddanych jest mniejsza niż liczba określająca ile razy może zagłosować, a numer odpowiedzi zawiera się w ilości odpowiedzi, głos uznany jest za ważny i dopisujemy go do pliku w postaci <X>XXX.XXX.XXX.XXX i do wcześniej pobranej zawartości pliku.
Teraz pozostaje wyświetlić pytanie, poszczególne odpowiedzi i policzyć ile razy dana odpowiedź występuje w pliku. I już - mamy wyśmienicie działającą ankietę.
Modyfikując bazowy kod można pokazywać procenty zamiast liczb, a nawet pasek graficzny. Nic nie stoi na przeszkodzie, aby wynik był widoczny dopiero po oddaniu głosu, a nie od razu. Ankietę można otoczyć ramką lub dodać jej guziki z formularza zamiast linków. Ankieta wykorzystuje blokadę numeru IP co wystarcza w większości zastosowań, ale można też dodać blokadę cookies, jeżeli jest taka potrzeba.