Avatar billede bjavle Nybegynder
05. marts 2004 - 12:06 Der 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)

på forhånd tak for hjælpen
mvh bjavle
Avatar billede tefcke Nybegynder
05. marts 2004 - 12:34 #1
Du logger vel bare et tidspunkt, i databasen, for hvornår der sidst er givet point til en given bruger.

Noget lign.:

CREATE TABLE users (
    user_id,
    username,
    ...,
    ...,
        PRIMARY KEY (user_id)
);

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.
Avatar billede detox Nybegynder
05. marts 2004 - 12:53 #2
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
Avatar billede bjavle Nybegynder
05. marts 2004 - 13:50 #3
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?
Avatar billede bjavle Nybegynder
05. marts 2004 - 13:53 #4
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)
Avatar billede detox Nybegynder
05. marts 2004 - 14:32 #5
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
Avatar billede detox Nybegynder
05. marts 2004 - 14:34 #6
Hvis du har point i en anden tabel kommer du selvfølgelig til at opdatere denne osse.
Avatar billede bjavle Nybegynder
05. marts 2004 - 14:53 #7
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)
Avatar billede detox Nybegynder
05. marts 2004 - 15:48 #8
$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.
Avatar billede bjavle Nybegynder
05. marts 2004 - 17:49 #9
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')");
}
?>
Avatar billede bjavle Nybegynder
05. marts 2004 - 17:56 #10
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')");

?>
Avatar billede bjavle Nybegynder
05. marts 2004 - 17:59 #11
glem den med at slette, når de er for gamle.. har fået det til at virke.. så mangler der kun det andet
Avatar billede detox Nybegynder
06. marts 2004 - 00:36 #12
$user = test; skal være:
$user = 'test';

AND ip='ip' skal være:
AND ip='$ip'
Avatar billede bjavle Nybegynder
07. juni 2004 - 21:29 #13
smid svar
Avatar billede detox Nybegynder
07. juni 2004 - 22:30 #14
....svar
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester

IT-JOB