
Słupki są graficzne i należy zrobić grafikę 1px na 1px. Kolorystyka dowolna, ja akurat zrobiłem dwa aby efekt był lepszy.
plik sonda.php
- Kod: Zaznacz wszystko
<?php
// Autor Puma - www.puma.pomorze.pl
// plik z glosami, nadac chmod 666
$sonda_plik = file('sonda.dat');
// sumuje wszystko glosy oddane w sondzie ($sonda_plik[0] to data a [1] ip glosujacego)
$sonda_suma = $sonda_plik[2] + $sonda_plik[3] + $sonda_plik[4];
// oblicza procent poszczegolnych glosow w stosunku do wszystkich
@$sonda_procent1 = sprintf("%.2f", $sonda_plik[2] * 100 / $sonda_suma);
@$sonda_procent2 = sprintf("%.2f", $sonda_plik[3] * 100 / $sonda_suma);
@$sonda_procent3 = sprintf("%.2f", $sonda_plik[4] * 100 / $sonda_suma);
// blokada na ip glosujacego. 1 = 1 sekunda, 60*60=60 minut
$sonda_blokada = $sonda_plik[0] + (60*60);
// wykrywa ip glosujacego i przypisuje do zmiennej
$sonda_ip = $_SERVER["REMOTE_ADDR"];
// przypisuje ip zapisany w pliku do zmiennej
$sonda_plik_ip = trim($sonda_plik[1]);
// sprawdza czy nie ma cookies, ip lub jesli jest ip czy minal odpowiedni czas, jezeli nie ma to wyswietli formularz
if (!isset($_COOKIE['sonda'])) {
if ( (($sonda_ip == $sonda_plik_ip) && (time() > $sonda_blokada)) || ($sonda_ip <> $sonda_plik_ip) ) {
// przypisuje formularz glosowania do zmiennej (dodac opcje w razie potrzeby)
$sonda_formularz = '
<form id="sonda" action="" method="post">
<fieldset><legend>Jak oceniasz przydatność tego skryptu?</legend>
<label><input type="radio" name="glos" value="o1" />Dobrze</label>
<label><input type="radio" name="glos" value="o2" />Średnio</label>
<label><input type="radio" name="glos" value="o3" />Źle</label>
<input type="submit" value="Głosuj" name="glosuj" />
</fieldset>
</form>';
}}
$sonda_wyniki = '
<table class="sonda">
<caption>Jak oceniasz przydatność tego skryptu - wyniki</caption>
<tr>
<td class="slupek"><p>'.$sonda_procent1.' %</p><img src="sonda-pasek1.gif" alt="pasek" style="height: '.round($sonda_procent1).'%;" /></td>
<td class="slupek"><p>'.$sonda_procent2.' %</p><img src="sonda-pasek2.gif" alt="pasek" style="height: '.round($sonda_procent2).'%;" /></td>
<td class="slupek"><p>'.$sonda_procent3.' %</p><img src="sonda-pasek1.gif" alt="pasek" style="height: '.round($sonda_procent3).'%;" /></td>
</tr>
<tr><td>Dobrze</td><td>Średnio</td><td>Źle</td></tr>
<tr class="glosy"><td>'.$sonda_plik[2].'</td><td>'.$sonda_plik[3].'</td><td>'.$sonda_plik[4].'</td></tr>
<tr class="suma"><td colspan="3">Razem głosów: <span>'.$sonda_suma.'</span></td></tr>
</table>';
// wlasciwa czesc skryptu odpowiedzialna za glosowanie
if(isset($_POST['glosuj'])) {
$odpowiedz = $_POST['glos'];
// sprawdza czy zaznaczono glos, jezeli nie to wyswietli komunikat
if ($odpowiedz == "") {
$error = 'Nie zaznaczyłeś(aś) żadnej odpowiedzi';
} else {
// sprawdza czy plik do danych istnieje
if(file_exists("sonda.dat")); {
$fp = fopen("sonda.dat", "r+"); }
$data = intval(fgets($fp));
$ip = intval(fgets($fp));
// zapisuje date i numer ip glosojacego
$data = time(); // data
$ip = $_SERVER["REMOTE_ADDR"]; // numer ip
// dodaje glos do pliku
// mozna zmieniac w zaleznosci ile chcemy opcji w sondzie (w tym przykladzie sa trzy)
$o1 = intval(fgets($fp));
$o2 = intval(fgets($fp));
$o3 = intval(fgets($fp));
switch($odpowiedz) {
case "o1":$o1++; break;
case "o2":$o2++; break;
case "o3":$o3++; break;
}
fseek($fp, 0);
// zapisuje date i numer ip glosujacego
fputs($fp, $data."\r\n"); // data
fputs($fp, $ip."\r\n"); // numer ip
fputs($fp, $o1."\r\n");
fputs($fp, $o2."\r\n");
fputs($fp, $o3."\r\n");
// wysyla cookie na komputer glosujacego
// 1 = 1 sekunda, doba ma 86400 sekund, razy 30 = 30 dni
setcookie ("sonda", "sonda", time()+30*86400);
// przyladowuje strone
header("Location: $_SERVER[PHP_SELF]");
}
}
?>
przykładowy css
- Kod: Zaznacz wszystko
* { margin: 0; padding: 0; }
body { margin: 20px; text-align: center; font-size: 12px; }
table.sonda { margin: 5px auto; width: 170px; height: 200px; border: 1px solid #006400; }
table.sonda td.slupek { height: 140px; width: 32%; vertical-align: bottom; }
table.sonda td.slupek img { width: 100%; }
table.sonda tr.suma { background: #e2f1eb; letter-spacing: 1px; line-height: 20px; }
table.sonda tr.glosy { background: #e2f1eb; font-weight: bold; color: #006400; }
table.sonda tr.suma td { border: 1px solid #006400; }
table.sonda tr.suma td span { font-weight: bold; color: #006400; }
form#sonda { margin: 20px auto; padding: 10px; width: 300px; border: 1px solid #006400; }
form#sonda input { margin: 0 10px; }
oraz przykładowy plik wstawiania sondy na stronę
- Kod: Zaznacz wszystko
<?php include('sonda.php'); ?>
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="pl" lang="pl">
<head>
<meta http-equiv="Content-Language" content="pl" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="Author" content="Puma - www.puma.pomorze.pl" />
<link href="style.css" rel="stylesheet" type="text/css" />
<title>Sonda</title>
</head>
<body>
<?php
// wyswietla komunikat, wyniki i formularz
echo $sonda_wyniki;
echo '<p>'.$error.'</p>';
echo $sonda_formularz;
?>
</body>
</html>
Kod
- Kod: Zaznacz wszystko
<?php include('sonda.php'); ?>
powinien być koniecznie przed doctype.
demo
Dla wygody wszystko można ściągnąć
Skrypt jest zrobiony na podstawie innej sondy jednak przedstawienie w formie słupkowej jest w 100% mojego autorstwa.
ps. Do moderka.
Temat z założenia ma służyć do podawania ciekawych rozwiązań webmasterskich i jeśli moderek uważa że temat może być ciekawy to poproszę go przykleić.
edit. Dodałem blokadę ip jeśli ktoś nie akceptuje cookies.