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(); $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*/ 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 "#"*/ } else ?>
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(); $this->write($ips); } /** * @return array */ function read() { if ($serializedData) { } else { } } else { } } /** * @param array $ips */ function write() { } /** * @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) { // trim for safety measures // attempt to validate IP if ($this->validateIp($ip)) { return $ip; } } } } } /** * @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?