webForumDet fria alternativet
Logga in / Bli medlem

IP Spärr i röstscript

Databaser & SQL

2 svar · 243 visningar · startad av F_I_C

Medlem sedan jan. 200293 inlägg
Trådstart#1

Vet inte riktigt om det är rätt forum kanske skulle vara under PHP och isf ber jag admin flytta tråden.

Har programerat ett relativt enkelt röstscript, men det fungerar iaf. Har hållt på ett tag att försöka ordna in en IP spärr så att det endast är möjligt att rösta 1 gång från samma IP.
Har till detta skapat en tabell enligt följande

| ID (int) | IP (varchar) | DATUM(datetime) |

Nu är frågan hur jag löser det lättast med SQL satser etc. Kör en vanlig INSERT när personen röstat.

Därefter har jag testat med att plocka ut infon ur databasen och kört några while-loopar i PHP för att kolla upp statusen. Förmodar att detta skulle kunna fungera (har inte lyckats än) men att det inte är den bästa lösningen.

Kan jag sätta in något i databasen och ställa tid när det ska raderas ? Kan jag skicka besökarens IP till databasen och be den kolla upp om den finns där, och isf returnera false/true eller liknande ?

Om inte det går att sätta tid på när databasen ska tömas, kan jag skriva en mysql sats som tömmer allt som är äldre än tex. 168h ?

Om jag är helt ute i det blå, kom gärna med en alternativ lösning ;)

Medlem sedan mars 20034 471 inlägg
#2

Förutsätter MySQL.

//En gång röstat från visst ip, aldrig mer:
function OKtoVote($ip) {
   $sql = "SELECT * FROM VoteTab WHERE IP = '$ip'";
   $res = mysql_query($sql) or die("fel");
   return (mysql_num_rows($res) === 0);
}

$ip = $_SERVER['REMOTE_ADDR'];

if (OKtoVote($ip))
  //rösta på

//EJ OK att rösta om mindre än x dagar gått. (x = något heltal)
function tooRecentRes($ip) {
   $sql = "SELECT * FROM VoteTab
             WHERE IP = '$ip' AND
             Datum > DATE_SUB( CURDATE( ) , INTERVAL x DAY )";
   $res = mysql_query($sql) or die("fel recent");
   return (mysql_num_rows($res) > 0);
}

if (!tooRecentRes($ip))
  //Rösta på...
Medlem sedan jan. 200293 inlägg
#3

Ursäkta att jag inte återkommit, men har inte haft tid att testa förrens nu. Fungerade kanon!
Stort tack!

690 ms totalt · 4 externa anrop · v20260731065814-full.51f67c91
561 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
561 ms — ändringar (db)