Hvad med ip adresse? Det sätter jo visse begränsninger (f ex at kun en comp. bag en router kan stemme). Men det burde ikke väre et större problem, man må jo ikke kigge på sådanne sider fra arbejde, og det er ikke mange hjem hvor der er flere personer der kigger på sådanne sider på hver sin comp. (Det skulle lige väre far og gammel sön ;o))
IP er selvfølgelig oplagt og klart den bedste løsning. Mit problemet ligger også mest i hvordan jeg registrere hvilke billeder der er blevet stemt på. Jeg havde overvejet et Array, men ved ik om det er smart!?
Hvert billede har et ID og det skal vel bare skrives til DB'en.. Men hvordan gør jeg det lettest, med henblik på at hente den oplysning igen?
Lav din id_reg tabel om til at indeholde IP (varchar(50)), ID (int) og Vote (tinyint), så kan du også vise fordelingen af stemmerne på hvert billede. Fjern rating og num_votes fra bryster tabellen.
<?php function GetUserIP() { if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) $ip = getenv("HTTP_CLIENT_IP"); else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) $ip = getenv("HTTP_X_FORWARDED_FOR"); else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) $ip = getenv("REMOTE_ADDR"); else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) $ip = $_SERVER['REMOTE_ADDR']; else $ip = "unknown"; return($ip); }
if ((isset($_POST['rating'])) && (preg_match('/^[0-9]+$/', $_POST['rating']))) { if ((isset($_POST['id'])) && (preg_match('/^[0-9]+$/', $_POST['id']))) { $rating = $_POST['rating']; $id = $_POST['id']; $result = mysql_query('SELECT * FROM bryster WHERE ID = ' . $id); //går ud fra id er unik if (mysql_num_rows($result) == 1) { $result = mysql_query('SELECT * FROM id_reg WHERE IP = "' . GetUserIP() . '" AND ID = ' . $id); if (mysql_num_rows($result) == 0) { mysql_query('INSERT INTO id_reg (IP, ID, Vote) VALUES ("' . GetUserIP() . '", ' . $id . ', ' . $vote . ')'); } else { mysql_query('UPDATE id_reg SET Vote = ' . $vote . ' WHERE ID = ' . $id . ' AND IP = "' . GetUserIP() . '"'); } } else { echo 'Billedet ikke fundet'; die(); } } }
$result = mysql_query('SELECT AVG(Vote) AS Average, COUNT(*) AS Total FROM id_reg WHERE ID = ' . $id); $row = mysql_fetch_array($result); echo 'Ny rating: ' . $row['Average'] . '<br>'; echo 'Antal stemmer: ' . $row['Total'] . '<br>'; ?>
Denne løsning kræver dog at du laver om i din kode hvor du viser gennemsnit og antal stemmer på hvert enkelt billede. Her kan du bruge den sidste SQL sætning til at finde tallene i stedet for i bryster tabellen.
olebole: Den funktion skulle nu være ok. (det er en mysql funktion)
Copy/paste fra mysql/Dev/doc
#
INET_ATON(expr)
Given the dotted-quad representation of a network address as a string, returns an integer that represents the numeric value of the address. Addresses may be 4- or 8-byte addresses.
Note: When storing values generated by INET_ATON(), it is recommended that you use an INT UNSIGNED column. If you use a (signed) INT column, values corresponding to IP addresses for which the first octet is greater than 127 cannot be stored correctly. See Section 11.2, “Numeric Types”. #
INET_NTOA(expr)
Given a numeric network address (4 or 8 byte), returns the dotted-quad representation of the address as a string.
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.