Witam
Mam funkcjonujący mechanizm głosowania w html i php (prawdopodobnie 4.x) oparty na ciasteczkach, dla którego została przygotowana modyfikacja zabezpieczająca przed głosowaniem z tego samego IP. Lecz napisana w php5 prawdopodobnie.
Minimalnie edytowałem tak, że już nie wyświetla błędów, ale z jakiegoś powodu zawiesza się coś i nie idzie dalej.
Aktualnie plik odpowiedzialny za dopisanie głosu wygląda tak:
<?PHP
require('voter.php');
$voter = new Voter();
if($voter->isPossibleToVote()){
$voter->saveVoteDate();
$file = fopen("/include/Konkurs/zaglebie2/sonda.txt","r+"); /*otwieramy plik sonda.txt*/ $linia = fgets($file, 80
); $tab = explode("#",$linia); /*zapisujemy linię do tablicy*/ $tbl["a"] = $tab[0];/*którš zapisujemy do asocjacyjnej*/
$tbl["b"] = $tab[1];
$tbl["c"] = $tab[2];
$tbl["d"] = $tab[3];
$tbl["e"] = $tab[4];
$tbl["f"] = $tab[5];
$tbl["g"] = $tab[6];
$tbl["h"] = $tab[7];
$tbl["i"] = $tab[8];
$tbl["j"] = $tab[9];
$tbl["k"] = $tab[10];
$tbl["l"] = $tab[11];
$tbl["m"] = $tab[12];
$tbl["n"] = $tab[13];
$tbl["o"] = $tab[14];
$tbl["p"] = $tab[15];
$tbl["q"] = $tab[16];
$tbl["r"] = $tab[17];
$tbl["s"] = $tab[18];
$tbl["t"] = $tab[19];
$tbl["u"] = $tab[20];
$tbl["v"] = $tab[21];
$tbl["w"] = $tab[22];
$tbl["x"] = $tab[23];
$tbl["y"] = $tab[24];
$tbl["z"] = $tab[25];
$tbl["aa"] = $tab[26];
$tbl["bb"] = $tab[27];
$tbl["cc"] = $tab[28];
$tbl["dd"] = $tab[29];
++$tbl[$_POST['odp']];/*zwiększamy o jeden iloć osób głosujšcych na danš odpowied*/
fseek($file, 0
);/*przesuwamy strumień pliku do poczštku*/ fwrite($file, $tbl["a"]."#".$tbl["b"]."#".$tbl["c"]."#".$tbl["d"]."#".$tbl["e"]."#".$tbl["f"]."#".$tbl["g"]."#".$tbl["h"]."#".$tbl["i"]."#".$tbl["j"]."#".$tbl["k"]."#".$tbl["l"]."#".$tbl["m"]."#".$tbl["n"]."#".$tbl["o"]."#".$tbl["p"]."#".$tbl["q"]."#".$tbl["r"]."#".$tbl["s"]."#".$tbl["t"]."#".$tbl["u"]."#".$tbl["v"]."#".$tbl["w"]."#".$tbl["x"]."#".$tbl["y"]."#".$tbl["z"]."#".$tbl["aa"]."#".$tbl["bb"]."#".$tbl["cc"]."#".$tbl["dd"]); /*zapisujemy dane do pliku oddzielajšc je "#"*/
Header("Location: http://...page=tak2");/*komunikat o akceptacji głosu*/
} else
Header("Location: http://...page=nie2");/*komunikat o braku akceptacji głosu*/ ?>
Kolejny plik odpowiedzialny za weryfikację ip:
<?php
/**
* Class Voter
*/
class Voter
{
function isPossibleToVote()
{
$ip = $this->getIp();
if ($ip === null) {
return false; //nie można zidentyfikować IP
}
$ips = $this->read();
return true; //nie głosował jeszcze
return true; //głosował, ale czas minął
} else {
return false;
}
}
function saveVoteDate()
{
$ip = $this->getIp();
$ips = $this->read();
$ips[$ip] = date('Y-m-d H:i:s');
$this->write($ips);
}
/**
* @return array
*/
function read()
{
if ($serializedData) {
} else {
}
} else {
}
}
/**
* @param array $ips
*/
function write()
{
file_put_contents
('voting_ips.txt', serialize($ips), LOCK_EX
); }
/**
* @return string|null
*/
function getIp()
{
'HTTP_CLIENT_IP',
'HTTP_X_FORWARDED_FOR',
'HTTP_X_FORWARDED',
'HTTP_X_CLUSTER_CLIENT_IP',
'HTTP_FORWARDED_FOR',
'HTTP_FORWARDED',
'REMOTE_ADDR'
);
foreach ($ip_keys as $key) {
foreach (explode(',', $_SERVER[$key]) as $ip) { // trim for safety measures
// attempt to validate IP
if ($this->validateIp($ip)) {
return $ip;
}
}
}
}
return isset($_SERVER['REMOTE_ADDR']) ?
$_SERVER['REMOTE_ADDR'] : null; }
/**
* @param string $ip
* @return bool
*/
function validateIp($ip)
{
if (filter_var($ip, FILTER_VALIDATE_IP,
FILTER_FLAG_IPV4 | FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) === false
) {
return false;
}
return true;
}
}
Resztę, czyli prezentację wyników mam i powinna działać po przejściu etapu weryfikacji i dopisaniu głosu.
Czy mogę prosić o sprawdzenie kodu?