05. marts 2004 - 12:06Der er
13 kommentarer og 1 løsning
giv kun point ÈN gang pr. IP pr . time
Er der en der kan fikse noget kode sammen hvor den laver følgende:
hvor en person der besøger f.eks " side.php?user=poul " så giver den poul point via sql (sql skal jeg nok selv lave) og så skal den person ikke give poul point igen hvis han besøger siden inden for en time. men hvis den samme person besøger " side.php?user=mette " skal mette få point...(og igen skal personen ikke kunne give point igen indenfor en time)
CREATE TABLE point_given ( user_id_from, -- user_id fra 'users' på den som har givet point user_id_to, -- user_id fra 'users' på den som har modtaget point given DATETIME -- tidspunktet på hvornår point er givet );
Så når der overgår et point fra en bruger til en anden, så opdaterer du tabellen med user_id for de involverede bruger, samt et tidspunkt.
Det kunne laves med en tabel, med felterne: 'user', 'point', 'ip', 'tid'. Hvor 'tid' er fx et TIMESTAMP. Så kunne du lave et tjek vha.:
$antal = mysql_result(mysql_query("SELECT count(*) FROM tabel where user='$user' AND ip='ip' AND now()<date_add(tid, INTERVAL 1 HOUR)"),0); if ($antal>0) { // der er givet point } else { // der er ikke givet point }
Den enkelte 'user's points kan findes med:
SELECT SUM(point) AS point FROM tabel WHERE user='$user'
Alle 'user's points:
SELECT user, SUM(point) AS point FROM tabel GROUP BY user ORDER BY user
tefcke >> Det er sådan at alle skal kunne give en bruger point. (dvs. alle der besøger siden.. ikke kun andre brugere) MEN der skal kun kunne gives 1 point fra en ip pr time... dvs 4 forskellige ip`er (for 4 der har besøgt siden) = 4 point
detox >> det ser meget godt ud, men hvordan skulle jeg smide det ind i db`en?
detox >> altså hvordan skulle sql strengen til at smide de forskellige ting ind i db være? (det er nok kun med user, ip, tid da pointne ligger et andet sted i db´en)
Hvis du så osse har 'user' et andet sted i din db, er det jo nærliggende at bruger et userid som tefcke foreslår. Hvis der automatisk altid gives 1 point pr. gang, behøver du iøvrigt slet ikke en kolonne til point, da du bare vil kunne tælle antallet af rækker. Men hvis du alligevel har pointene i en anden tabel, kan du tilgengæld slette nogle gamle rækker i din 'tjektabel' ind imellem. Fx med: if (rand(1,10) == 1) { mysql_query("DELETE FROM tabel where tid<date_sub(now(), INTERVAL 2 HOUR)") } Hvis du laver feltet tid som TIMESTAMP, hvor der automatisk bliver sat et tidsstempel, er det jo bare: INSERT INTO tabel (user, ip) VALUES ('$user', '$ip') selvfølgelig indsat her: // der er ikke givet point
detox >> ja det virker meget fornuftigt at slette dem når de ikke skal bruges mere.. jeg skal bare have en kode der tjekker om ip`en er blevet brugt til at give point, hvis den er skal der ikke gøres noget. Hvis den ikke er, skal der smækkes user, ip, time ind i db`en samtidigt må den gerne slette entrys der er over d 1 time gammel.. er det noget du kan fikse sammen, evt bare med faste variabler? (så kan jeg selv rette dem til)
$user = // POST eller GET variabel $ip = $_SERVER['REMOTE_ADDR']; mysql_query("DELETE FROM tabel where tid<date_sub(now(), INTERVAL 2 HOUR)"); $antal = mysql_result(mysql_query("SELECT count(*) FROM tabel where user='$user' AND ip='ip' AND now()<date_add(tid, INTERVAL 1 HOUR)"),0); if ($antal>0) { // der er givet point } else { mysql_query("INSERT INTO tabel (user, ip) VALUES ('$user', '$ip')"); }
Noget i den stil. Du skal dog være opmærksom på at der er andre måder at få ip-adressen på, mens det nogle gange ikke er muligt alt efter hvad browseren medsender.
ved denne kommer denne fejl mysql_result(): supplied argument is not a valid MySQL result resource
<? mysql_connect("***","***","***"); mysql_select_db("***"); $user = test; $ip = $_SERVER['REMOTE_ADDR']; mysql_query("DELETE FROM ad where tid<date_sub(now(), INTERVAL 2 HOUR)"); $antal = mysql_result(mysql_query("SELECT count(*) FROM ad where user='$user' AND ip='ip' AND now()<date_add(tid, INTERVAL 1 HOUR)"),0); if ($antal>0) { // der er givet point } else { mysql_query("INSERT INTO ad (user, ip) VALUES ('$user', '$ip')"); } ?>
hvis jeg ændre datoen når jeg kun bruger den har sletter den ikke den (selvom jeg har ændret den til at være 3 dage gammel)
<? mysql_connect("***","***","***"); mysql_select_db("***"); $user = test; $ip = $_SERVER['REMOTE_ADDR']; mysql_query("DELETE FROM ad where tid<date_sub(now(), INTERVAL 2 HOUR)"); mysql_query("INSERT INTO ad (user, ip) VALUES ('$user', '$ip')");
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.