Sonda (przechowywująca dane w plikach txt)
Wolverine
Oczywiście jak zwykle na sam początek, zabezpieczam się, że być może istnieją lepsze/łatwiejsze sposoby, ale nie ma ich na 4p.
Na początek stworzymy kilka plików:
poll.php
- będzie to główny skrypt sondy
vote.php
- skrypt zapisujący oddany głos
poll.txt
- gdzie będą znajdować się odpowiedzi na pytanie
poll_q.txt
- tutaj będzie pytanie do naszej sondy
poll_a.txt
- zbiór odpowiedzi
Pamiętajmy o ustawieniu CHMODów plików txt na 666
.
Zawartość pliku poll.php
:
<?
function file_GetLine ($filename, $index) {
$file = fopen ($filename, "r");
$line = -1;
while (!feof ($file)) {
$buffer = fgets($file, 4096);
$line++;
if ($line == $index) {
fclose ($file);
return $buffer;
}
}
fclose ($file);
}
function file_InsertLine ($filename, $line) {
$fp = fopen ($filename, "a");
flock($fp, LOCK_EX);
fputs ($fp, $line . "rn");
flock($fp, LOCK_UN);
fclose ($fp);
}
function file_ReadFromFile ($filename) {
$fp = fopen ($filename, "r");
$file = fread($fp, filesize ($filename));
fclose ($fp);
return $file;
}
function Voted() {
$votes = file('poll.txt');
for($q=0;$q<count($votes);$q++) {
$vote = explode('`', $votes[$q]);
if ($_SERVER['REMOTE_ADDR'] == $vote[1]) {
return 1;
}
}
return 0;
}
function GetA($index) {
return file_GetLine('poll_a.txt', $index);
}
echo(file_ReadFromFile('poll_q.txt') . '<br /><br />');
$as = file('poll_a.txt');
$voted = Voted();
if($voted == 1) {
$votes = file('poll.txt');
for($q=0;$q<count($votes);$q++) {
$vote = explode('`', $votes[$q]);
$w = $vote[0];
$v[$w]++;
}
for ($q=0;$q<count($as);$q++) {
if(!isset($v[$q])){
$v[$q] = 0;
}
}
foreach($v as $key => $value) {
if ($value > $max) { $max = $value; }
}
if ($max < 25) { $e = 2; }
if ($max < 10) { $e = 4; }
if ($max < 5) { $e = 10; }
foreach($v as $key => $value) {
echo(GetA($key) . ' - ' . $value . '<br />');
$width = $value * $e;
if ($width > 50) { $width = 50; }
echo('<hr style="height:4px;border:2px solid #666;" align="left" width="' . $width . '" />');
}
} else {
echo('<form method="POST" action="vote.php">');
for ($q=0;$q<count($as);$q++) {
echo('<input type="radio" name="vote" value="' . $q . '" > ' . $as[$q] . '<br />');
}
echo('<br /><input type="submit" value="Glosuj"></form>');
}
?>
Plik vote.php:
<?
function file_InsertLine ($filename, $line) {
$fp = fopen ($filename, "a");
flock($fp, LOCK_EX);
fputs ($fp, $line . "rn");
flock($fp, LOCK_UN);
fclose ($fp);
}
$vote = $_POST['vote'];
file_InsertLine('poll.txt', $vote . '`' . $_SERVER['REMOTE_ADDR'] . '`');
header('Location: index.php'); //Tutaj adres strony, na której includujemy sonde
?>
Użycie:
Teraz wystarczy, że napiszemy pytanie (plik poll_q.txt) i odpowiedzi (plik poll_a.txt, jedna pod drugą) i mamy gotową sonde. Żeby umieścić ją na swojej stronie wpisz w żądanym miejscu
<? include ('poll.php'); ?>
. Sonda zabezpiecza się przed ponownym głosowaniem poprzez zapisywanie numerów IP głosujących.
Specjalnie zarejestrowalem sie na tym portalu, zeby podziekowac :) DZIEKI!
btw. jak dodac, zeby mozna bylo zobaczyc ile lacznie ludzie glosow oddali? :) pzdr!
a jak bym chciał więcej pytań niż jedno? Co trzeba zrobić?
hm.. troche dziwny skrypt wedlug mnie ale jestem poczatkowym programista w php ale nie oto chodzi chodzi o fragment pliku
$vote = $_POST['vote'];
file_InsertLine('poll.txt', $vote . '
' . $_SERVER['REMOTE_ADDR'] . '
');header('Location: index.php');
nie wiem zabardzo jak na moj skrypt go zmienic bo mam cos takiego (fragment)
$son = '00.000.000.000'; //adres ip
if ($_SERVER['REMOTE_ADDR'] == $son)
i teraz nie wiem jak fragment $son = '00.000.000.000'; //adres ip przenies do pliku a w tym zrobic to zeby z niego to czytalo
ju prubowalem tak:
require_once('ip.txt')
if ($_SERVER['REMOTE_ADDR'] == $son)
i podobnie ale nie dzialalo zna ktos moze rade na ten problem?
Notice: Undefined variable: v in ***\poll.php on line 56
Notice: Undefined index: 0 in ***\poll.php on line 56
Notice: Undefined variable: max in ***\poll.php on line 65
jak temu zaradzic?
W poll.php
źle przekodowało na stronę
wszystkie momenty z < zamieniamy na znak mniejsze "<"
a > na ">"
udało mi się w końcu uruchomić :D a tak jeszcze dodając od siebie
to się można pobawić w rozbudowe tego skrypciku
ja sobie grafike ulepszam w linijce nr 74
echo('');
Ogólnie oceniając skrypt to za prostotę jego i za wyłumaczenie o co chodzi to 9/10
minus za to że nie ma mozliwości pobrania go wtedy można by było uniknąć błedów typu przekodowania znaków na hieroglify typu <
Poprawione, brakowalo tam funkcji GetLine, ale co do 'Empty delimiter' ... u mnie jest normalnie :/
mi to jakos nie chce dzialac :)
Warning: explode(): Empty delimiter. in /usr/home/karol/public_html/sonda/poll.php on line 20Chodzi o index.php? Po prostu tam dajesz adres na ktory ma przejsc po glosowaniu. Jesli to tylko sonda to zamien index.php na poll.php
a mi po zagłosowaniu wywala ze nie może znaleźć pliku :(
CooBek wyluzuj men ;)
Jaa to mam szczęście!! [glowa] Wlasnie przed chwila sie glowilem nad swoja sonda do serwisu, akurat skonczylem, patrze na 4p a tu wskazwka Wolverine'a !! Trza być zdolnym.. ;-( ;d