04. november 2003 - 17:22Der er
12 kommentarer og 1 løsning
IP logging!
Hej
Jeg har et script hvor man kan stemme på nogle billeder. Problemet med dette script er bare at man kan stemme så meget man vil på alle billederne.. så nogle brugere stemmer derfor mega meget på deres billede for at få det på top10!.. ville derfor høre om der var en der hurtigt kunne lave en kode som loggede ip'en på brugeren og hvad billede han havde stemt på således at han først kan stemme på det billede han lige har stemt på efter 24 timer.. håber i forstår hvad jeg mener..
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Først skal du finde IP-adressen med: $remoteaddr = $_SERVER['REMOTE_ADDR']
Dernæst skal du i en fil eller database gemme denne IP sammen med et timestamp og det billede vedkommende har stemt på.
Når du genererer siden skal du så først tage højde for om vedkommende har stemt indenfor de sidste 24 timer, eks.:
$query = "select * from billedbase where ip = ".$remoteaddr." and timestamp"... (du skal lige have en rutine til at konvertere timestamp til noget, du kan regne 24 timer tilbage fra. MySQL TIMESTAMP er i formatet YYYYMMDDHHiiSS.
Hvis din query returnerer svar, så har vedkommende allerede stemt og du lader være med at tegne stemmeknappen.
hehe den der plan havde jeg også udtænkt mig men for mig er det desværre den anden havldel af arbejdet der ikke er til at finde ud af :((.. håber der er en der kan bixe det samme for mig :)
Det er desværre ikke nok. Jeg mangler din komplette (eller i hvert fald relevante) datastruktur - tabellen over billeder og tabellen over votes.
Jeg antager følgende: Du har en billedtabel med id og lidt mere.
Først skal du oprette en tabel med din log: id int auto increment NOT NULL primary key IP text billed_id int (relation til billedtabellen) tid TIMESTAMP
Her følger så lidt kode, der tjekker en given IP for om den har votet på et givet billede indenfor de sidste 24 timer:
$USER_IP = $_SERVER['REMOTE_ADDR']; $now_minus_24_hrs = strtotime("-24 hours"); //convert to MYSQL_FORMAT(YYYYMMDDHHiiSS) $MYSQL_FORMAT = date("YmdHis", $now_minus_24_hrs); //Construct query $query = "select * from log where IP = '".$USER_IP."' and tid>".$MYSQL_FORMAT; $result = mysql_query($query);
if ($row = mysql_fetch_array) echo "USER HAS ALREADY VOTED WITHIN 24 HRS!"; else echo "FREE ACCESS!";
Ja - men jeg skal også vide, hvad de forskellige felter repræsenterer. Mit eksempel bygger på, at du har en tabel, der indeholder information om billedet (det du selv har skrevet?) og en tabel, der holder styr på votes (Det, jeg har skrevet). Så bare behold din tabel og lad min tabel relatere til id'en i din egen tabel, således at: Table LOG: Field billed_id: indeholder informationer om, hvilket billede voten tæller for. Jeg foreslår derfor følgende:
Opret en tabel, LOG, der er som før beskrevet. Ret din egen tabel, så der ikke er votes i den mere. Den beregner vi nemlig ud fra den anden tabel.
LOG tabellen kan indeholde eks. id IP billed_id tid 1 212.242.5.90 2 20031105130344 2 80.16.5.92 2 20031105160741 3 81.242.15.90 2 20031105215901 4 211.201.5.97 2 20031106110202
Herfra kan du lave en query, der tæller antallet af votes: SELECT count(*) FROM log where billed_id = 2 som tæller hvor mange votes der er på billed nr. 2. I dette tilfælde 4 votes.
Eksemplet ovenfor er stadig gangbart til at se om en IP har stemt indenfor de sidste 24 timer. Når der kommer en ny stemme, så laves følgende query: INSERT INTO log VALUES ('', $IP, $billed_id, $timestamp) Den første er blank, så MySQL indsætter auto increment values. $IP = $_SERVER['REMOTE_ADDR']; $timestamp = date("YmdHis"); $billed_id kan du vel selv gætte ;-)
Nu opdateres din log for hver gang der stemmes. Her er et virkende eksempel:
$USER_IP = $_SERVER['REMOTE_ADDR']; $now_minus_24_hrs = strtotime("-24 hours"); //convert to MYSQL_FORMAT(YYYYMMDDHHiiSS) $MYSQL_FORMAT = date("YmdHis", $now_minus_24_hrs); //Construct query $query = "select * from log where IP = '".$USER_IP."' and tid>".$MYSQL_FORMAT; $result = mysql_query($query);
if ($row = mysql_fetch_array) echo "DU HAR ALLEREDE STEMT INDENFOR DE SIDSTE 24 TIMER!"; else{ $query = "INSERT INTO log VALUES ('', $IP, $billed_id, $timestamp)"; mysql_query($query); }
Og for at finde ud af antallet af stemmer: $query = "SELECT count(*) FROM log where billed_id = ".$billed_id; $result = mysql_query($query); $row = mysql_fetch_array($result); $antal_votes = $row['count(*)'];
Hvis det her ikke hjælper, så... ;-)
Bare skriv! Rackbox
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.